Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1051 chris 1
package com.gebauz.bauzoid.menu;
2
 
3
import com.gebauz.bauzoid.game.Game;
4
import com.gebauz.bauzoid.graphics.sprite.Sprite;
5
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
6
import com.gebauz.bauzoid.math.Rect;
7
import com.gebauz.bauzoid.math.Vector4;
8
import com.gebauz.bauzoid.parser.ScanException;
9
import com.gebauz.bauzoid.parser.Tokenizer;
10
 
11
/** Button that uses a Frame as image.
12
 *
13
 * @author chiu
14
 *
15
 */
16
public class SegmentButton extends Button
17
{
18
        // Constants========================================================================================
19
 
20
 
21
        // Embedded Types===================================================================================
22
 
23
        // Fields===========================================================================================
24
 
25
        private String mTextureName = "";
26
        private String mPushTextureName = "";
27
        private String mButtonImageName = "";
28
 
29
        private FrameElement mImage = null;
30
        private FrameElement mPushImage = null;
31
 
32
        private Sprite mButtonImageSprite = null;
33
        private SpriteInstance mButtonImage = null;
34
        private float mButtonImageScale = 1.0f;
35
        private HorizontalAlign mButtonImageAlignH = HorizontalAlign.CENTER;
36
        private VerticalAlign mButtonImageAlignV = VerticalAlign.CENTER;
37
 
38
        // Methods==========================================================================================
39
 
40
        public SegmentButton(Game game, Menu parent, String name)
41
        {
42
                super(game, parent, name);
43
        }
44
 
45
        @Override
46
        public void init()
47
        {
48
                super.init();
49
 
50
                mImage = new FrameElement(getParent().getGame());
51
                mImage.setInnerOffset(new Rect(FrameElement.CELL_SIZE, FrameElement.CELL_SIZE, FrameElement.CELL_SIZE, FrameElement.CELL_SIZE));
52
                //mImage.init(new Texture(Gdx.files.internal(mTextureName)), true);
53
                mImage.init(mTextureName, true);
54
                Frame.setFrameProperties(mImage, this);
55
 
56
                if (!mPushTextureName.isEmpty())
57
                {
58
                        mPushImage = new FrameElement(getParent().getGame());
59
                        if (mPushImage != null)
60
                        {
61
                                mPushImage.setInnerOffset(new Rect(FrameElement.CELL_SIZE, FrameElement.CELL_SIZE, FrameElement.CELL_SIZE, FrameElement.CELL_SIZE));
62
                                mPushImage.init(mPushTextureName, true);
63
                                //mPushImage.init(new Texture(Gdx.files.internal(mPushTextureName)), true);
64
                                Frame.setFrameProperties(mPushImage, this);
65
                        }
66
                }
67
 
68
                if (!mButtonImageName.isEmpty())
69
                {
70
                        //mButtonImage = new Sprite(getParent().getGame().getGraphics(), new Texture(Gdx.files.internal(mButtonImageName)));
71
                        mButtonImageSprite = new Sprite(getGame().getGraphics(), mButtonImageName);
72
                        mButtonImageSprite.init();
73
                        mButtonImage = mButtonImageSprite.createSpriteInstance(0);
74
                }
75
        }
76
 
77
        @Override
78
        public void exit()
79
        {
80
                if (mImage != null)
81
                {
82
                        mImage.exit();
83
                        mImage = null;
84
                }
85
 
86
                if (mPushImage != null)
87
                {
88
                        mPushImage.exit();
89
                        mPushImage = null;
90
                }
91
 
92
                if (mButtonImageSprite != null)
93
                {
94
                        mButtonImageSprite.dispose();
95
                        mButtonImageSprite = null;
96
                }
97
                mButtonImage = null;
98
 
99
                super.exit();
100
        }
101
 
102
        @Override
103
        public void update(float deltaTime)
104
        {
105
                super.update(deltaTime);
106
 
107
                mImage.update(deltaTime);              
108
                Frame.setFrameProperties(mImage, this);
109
                if (mPushImage != null)
110
                {
111
                        Frame.setFrameProperties(mPushImage, this);
112
                        mPushImage.update(deltaTime);
113
                }
114
 
115
                if (mButtonImage != null)
116
                {
117
                        // treat like text
118
                        float w = getRight() - getLeft();
119
                        float h = getBottom() - getTop();                      
120
 
121
                        mButtonImage.transform.x = getLeft();
122
                        mButtonImage.transform.y = getTop();
123
                        mButtonImage.transform.w = mButtonImageSprite.getTextureWidth() * mButtonImageScale;
124
                        mButtonImage.transform.h = mButtonImageSprite.getTextureHeight() * mButtonImageScale;
125
                        mButtonImage.transform.pivotX = 0;
126
                        mButtonImage.transform.pivotY = 0;
127
 
128
                        if (mButtonImageAlignH == HorizontalAlign.RIGHT)
129
                        {
130
                                mButtonImage.transform.x = getRight();
131
                                mButtonImage.transform.pivotX = mButtonImage.transform.w;
132
                        }
133
                        else if (mButtonImageAlignH == HorizontalAlign.CENTER)
134
                        {
135
                                mButtonImage.transform.x = getLeft() + w/2;
136
                                mButtonImage.transform.pivotX = mButtonImage.transform.w/2;
137
                        }
138
 
139
                        if (mButtonImageAlignV == VerticalAlign.BOTTOM)
140
                        {
141
                                mButtonImage.transform.y = getBottom();
142
                                mButtonImage.transform.pivotY = mButtonImage.transform.h;
143
                        }                      
144
                        else if (mButtonImageAlignV == VerticalAlign.CENTER)
145
                        {
146
                                mButtonImage.transform.y = getTop() + h/2;
147
                                mButtonImage.transform.pivotY = mButtonImage.transform.h/2;
148
                        }
149
 
150
                        if (isButtonDown())
151
                        {
152
                                mButtonImage.transform.x += getPushOffset().x;
153
                                mButtonImage.transform.y += getPushOffset().y;
154
                        }
155
                }
156
        }
157
 
158
        @Override
159
        public void render()
160
        {
161
                if (isButtonDown() && (mPushImage != null))
162
                        mPushImage.render();
163
                else
164
                        mImage.render();
165
 
166
                if (mButtonImage != null)
167
                {
168
                        float oldAlpha = mButtonImage.alpha;
169
                        mButtonImage.alpha *= getParent().getFadeAlpha();
170
 
171
                        if (getTextElement().isShadow())
172
                        {                      
173
                                Vector4 oldColor = mButtonImage.color;
174
                                mButtonImage.color = getTextElement().getShadowColor();
175
                                mButtonImage.transform.x += getTextElement().getShadowOffset().x;
176
                                mButtonImage.transform.y += getTextElement().getShadowOffset().y;
177
                                mButtonImage.render();
178
                                mButtonImage.transform.x -= getTextElement().getShadowOffset().x;
179
                                mButtonImage.transform.y -= getTextElement().getShadowOffset().y;
180
                                mButtonImage.color = oldColor;
181
                        }
182
 
183
 
184
                        mButtonImage.render();
185
                        mButtonImage.alpha = oldAlpha;
186
                }
187
 
188
                super.render();
189
        }
190
 
191
        public boolean parseLine(String identifier, Tokenizer tokenizer) throws ScanException  
192
        {
193
                if (identifier.equalsIgnoreCase("texture"))
194
                {
195
                        mTextureName = MenuUtil.parseString(tokenizer);
196
                }
197
                else if (identifier.equalsIgnoreCase("pushTexture"))
198
                {
199
                        mPushTextureName = MenuUtil.parseString(tokenizer);
200
                }
201
                else if (identifier.equalsIgnoreCase("buttonImage"))
202
                {
203
                        mButtonImageName = MenuUtil.parseString(tokenizer);
204
                }
205
                else if (identifier.equalsIgnoreCase("buttonImageScale"))
206
                {
207
                        mButtonImageScale = MenuUtil.parseNumber(tokenizer);
208
                }
209
                else if (identifier.equalsIgnoreCase("buttonImageAlign"))
210
                {
211
                        mButtonImageAlignH = MenuUtil.stringToHorizontalAlignment(tokenizer.readIdentifier());
212
                        tokenizer.readToken(",");
213
                        mButtonImageAlignV = MenuUtil.stringToVerticalAlignment(tokenizer.readIdentifier());
214
                        tokenizer.readToken(";");
215
                }
216
                else
217
                {
218
                        return super.parseLine(identifier, tokenizer);
219
                }              
220
                return true;
221
        }
222
 
223
        // Getters/Setters==================================================================================
224
 
225
}