Subversion Repositories AndroidProjects

Rev

Rev 524 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
521 chris 1
package com.gebauz.Bauzoid.menu;
2
 
3
import com.gebauz.Bauzoid.game.Game;
4
import com.gebauz.Bauzoid.game.GameObject;
5
import com.gebauz.Bauzoid.math.Vector2;
6
import com.gebauz.Bauzoid.math.Vector4;
7
import com.gebauz.Bauzoid.parser.ScanException;
8
import com.gebauz.Bauzoid.parser.Tokenizer;
9
 
10
 
11
/** Base class for all Menu items.
12
 * MenuItem has the following additional properties:
13
 * - position
14
 * - size
15
 * - align
16
 *
17
 * Note: different actual menu items might interpret these properties differently.
18
 *
19
 * @author chiu
20
 *
21
 */
22
public abstract class MenuItem extends GameObject
23
{
24
        // Constants========================================================================================
25
 
26
        // Embedded Types===================================================================================
27
 
28
        public enum HorizontalAlign
29
        {
30
                LEFT,
31
                CENTER,
32
                RIGHT,
33
        }
34
 
35
        public enum VerticalAlign
36
        {
37
                TOP,
38
                CENTER,
39
                BOTTOM,
40
        }
524 chris 41
 
42
        public static interface UpdateListener
43
        {
44
                public void onUpdate(MenuItem sender, float deltaTime);
45
        }
521 chris 46
 
47
        // Fields===========================================================================================
48
        private Menu mParentMenu = null;
49
        private String mName = "";
50
 
51
        private Vector2 mPosition = new Vector2(0, 0);
52
        private Vector2 mSize = new Vector2(0, 0);
53
        private HorizontalAlign mHorizontalAlignment = HorizontalAlign.LEFT;
54
        private VerticalAlign mVerticalAlignment = VerticalAlign.TOP;
55
        private Vector4 mColor = new Vector4(1, 1, 1, 1);
524 chris 56
 
525 chris 57
        /** Whether this item should be rendered. */
524 chris 58
        private boolean mIsVisible = true;
59
 
525 chris 60
        /** Whether this item should react to input. */
61
        private boolean mIsEnabled = true;
62
 
524 chris 63
        private UpdateListener mUpdateListener = null;
521 chris 64
 
65
        // Methods==========================================================================================
66
 
67
        public MenuItem(Game game, Menu parent, String name)
68
        {
69
                super(game);
70
                mParentMenu = parent;
71
                mName = name;
72
        }
73
 
74
        /** Perform initialization. */
75
        public abstract void init();
76
 
77
        /** Destroy resources. */
78
        public abstract void exit();
79
 
80
        /** Update internal structures. */
81
        public abstract void update(float deltaTime);
82
 
83
        /** Render the UI element. */
84
        public abstract void render();
85
 
86
        /** Parse an instruction line in the body of the MenuItem.
87
         * Returns true if the identifier has been processed, or false if not. The caller should then
88
         * appropiately process the identifier in another way.
89
         * @param identifier Identifier of statement to be processed
90
         * @param tokenizer Tokenizer parsing the statement
91
         * @return true if the statement has been processed.
92
         * @throws ScanException
93
         */
94
        public boolean parseLine(String identifier, Tokenizer tokenizer) throws ScanException  
95
        {
96
                if (identifier.equalsIgnoreCase("position"))
97
                {
98
                        setPosition(MenuUtil.parseVector2(tokenizer));
99
                }
100
                else if (identifier.equalsIgnoreCase("size"))
101
                {
102
                        setSize(MenuUtil.parseVector2(tokenizer));
103
                }
104
                else if (identifier.equalsIgnoreCase("align"))
105
                {
106
                        mHorizontalAlignment = MenuUtil.stringToHorizontalAlignment(tokenizer.readIdentifier());
107
                        tokenizer.readToken(",");
108
                        mVerticalAlignment = MenuUtil.stringToVerticalAlignment(tokenizer.readIdentifier());
109
                        tokenizer.readToken(";");
110
                }
111
                else if (identifier.equalsIgnoreCase("color"))
112
                {
113
                        setColor(MenuUtil.parseVector4(tokenizer));
114
                }
524 chris 115
                else if (identifier.equalsIgnoreCase("visible"))
116
                {
117
                        mIsVisible = MenuUtil.parseBool(tokenizer);
118
                }
525 chris 119
                else if (identifier.equalsIgnoreCase("enabled"))
120
                {
121
                        mIsEnabled = MenuUtil.parseBool(tokenizer);
122
                }
521 chris 123
                else
124
                {
125
                        // When reached here, nothing interpreted the identifer, so we can throw a ScanException
126
                        throw new ScanException("Syntax error", tokenizer.getSurroundings());
127
                }
128
 
129
                return true;
130
        }
131
 
132
        // Getters/Setters==================================================================================
133
 
134
        public Menu getParent() { return mParentMenu; }
135
 
136
        public String getName() { return mName; }
137
 
138
        public Vector2 getPosition() { return mPosition; }
139
        public void setPosition(Vector2 position) { mPosition = position; }
524 chris 140
        public void setPosition(float x, float y) { mPosition.x = x; mPosition.y = y; }
141
 
521 chris 142
        public float getPositionX() { return mPosition.x; }
143
        public void setPositionX(float positionX) { mPosition.x = positionX; }
144
 
145
        public float getPositionY() { return mPosition.y;}
146
        public void setPositionY(float positionY) { mPosition.y = positionY; }
147
 
148
        public HorizontalAlign getHorizontalAlignment() { return mHorizontalAlignment;}
149
        public void getHorizontalAlignment(HorizontalAlign horizonalAlignment) { mHorizontalAlignment = horizonalAlignment;}
150
 
151
        public VerticalAlign getVerticalAlignment() { return mVerticalAlignment; }
152
        public void setVerticalAlignment(VerticalAlign verticalAlignment) { mVerticalAlignment = verticalAlignment;}
153
 
154
        public Vector4 getColor() { return mColor; }
155
        public void setColor(Vector4 color) { mColor = color; }
156
 
157
        public Vector2 getSize() { return mSize; }
158
        public void setSize(Vector2 size) { mSize = size; }
159
 
160
        public float getWidth() { return mSize.x; }
161
        public void setWidth(float width) { mSize.x = width; }
162
 
163
        public final float getHeight() { return mSize.y; }
164
        public void setHeight(float height) { mSize.y = height; }
165
 
524 chris 166
        public boolean isVisible() { return mIsVisible; }
167
        public void setVisible(boolean visible) { mIsVisible = visible; }
168
 
525 chris 169
        public boolean isEnabled() { return mIsEnabled; }
170
        public void setEnabled(boolean enabled) { mIsEnabled = enabled; }
171
 
524 chris 172
        public void setUpdateListener(UpdateListener listener) { mUpdateListener = listener; }
173
        public UpdateListener getUpdateListener() { return mUpdateListener; }
174
 
521 chris 175
        public float getLeft()
176
        {
177
                if (mHorizontalAlignment == HorizontalAlign.RIGHT)
178
                        return mPosition.x - mSize.x;
179
                else if (mHorizontalAlignment == HorizontalAlign.CENTER)
180
                        return mPosition.x - mSize.x/2;
181
                else //if (mHorizontalAlignment == HorizontalAlignment.LEFT)
182
                        return mPosition.x;
183
        }
184
 
185
        public float getTop()
186
        {
187
                if (mVerticalAlignment == VerticalAlign.BOTTOM)
188
                        return mPosition.y - mSize.y;
189
                else if (mVerticalAlignment == VerticalAlign.CENTER)
190
                        return mPosition.y - mSize.y/2;
191
                else //if (mHorizontalAlignment == HorizontalAlignment.LEFT)
192
                        return mPosition.y;
193
        }
194
 
195
        public float getRight()
196
        {
197
                if (mHorizontalAlignment == HorizontalAlign.RIGHT)
198
                        return mPosition.x;
199
                else if (mHorizontalAlignment == HorizontalAlign.CENTER)
200
                        return mPosition.x + mSize.x/2;
201
                else //if (mHorizontalAlignment == HorizontalAlignment.LEFT)
202
                        return mPosition.x + mSize.x;
203
        }
204
 
205
        public float getBottom()
206
        {
207
                if (mVerticalAlignment == VerticalAlign.BOTTOM)
208
                        return mPosition.y;
209
                else if (mVerticalAlignment == VerticalAlign.CENTER)
210
                        return mPosition.y + mSize.y/2;
211
                else //if (mHorizontalAlignment == HorizontalAlignment.LEFT)
212
                        return mPosition.y + mSize.y;
213
        }
214
 
524 chris 215
 
521 chris 216
}