Subversion Repositories AndroidProjects

Rev

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

Rev Author Line No. Line
893 chris 1
package com.gebauz.burutaru.game.entities;
2
 
3
import java.util.Vector;
4
 
5
import com.gebauz.bauzoid.graphics.sprite.AtlasSprite;
6
import com.gebauz.bauzoid.graphics.sprite.AtlasSpriteInstance;
906 chris 7
import com.gebauz.bauzoid.graphics.sprite.Sprite;
8
import com.gebauz.bauzoid.graphics.sprite.SpriteParameters;
893 chris 9
import com.gebauz.bauzoid.math.MathUtil;
906 chris 10
import com.gebauz.bauzoid.math.Matrix4;
893 chris 11
import com.gebauz.bauzoid.math.Vector2;
904 chris 12
import com.gebauz.bauzoid.math.collision.Shape;
13
import com.gebauz.bauzoid.math.collision.ShapeUtil;
893 chris 14
import com.gebauz.burutaru.game.GameLogic;
15
import com.gebauz.burutaru.game.entities.BlobEnemies.Instance;
16
import com.gebauz.burutaru.game.entities.PowerUps.Type;
17
 
18
public class CarrotEnemies extends Entity
19
{
20
 
21
        // Constants========================================================================================
22
 
23
        public static final float SPRITE_WIDTH = 110;
24
        public static final float SPRITE_HEIGHT = SPRITE_WIDTH/2;
25
        public static final float ANIM_DURATION = 1.2f;
26
 
27
        // Embedded Types===================================================================================
28
 
29
        public class Instance
30
        {
31
                public float x = 0;
32
                public float y = 0;
33
                public float lifeTime = 0;
34
                public boolean isAlive = false;
35
 
906 chris 36
                private SpriteParameters mParams = new SpriteParameters();
37
 
893 chris 38
                public Instance(float _x, float _y)
39
                {
40
                        x = _x; y = _y; isAlive = true;
41
                        lifeTime = 0.0f;
42
                }
43
 
44
                public void update(float deltaTime)
45
                {
46
                        lifeTime += deltaTime;
47
 
906 chris 48
                        //x -= deltaTime * 400;
909 chris 49
                }
50
 
51
                public void render()
52
                {
53
                        float t = (lifeTime % ANIM_DURATION) / ANIM_DURATION;
54
                        int frame = MathUtil.clamp((int)(t * mCarrotFrames.length), 0, mCarrotFrames.length-1);
906 chris 55
 
56
                        mParams.x = x;
57
                        mParams.y = y;
58
                        mParams.w = SPRITE_WIDTH;
59
                        mParams.h = SPRITE_HEIGHT;
60
                        mParams.pivotX = 0;
61
                        mParams.pivotY = mParams.h/2;
62
                        mParams.mirrorX = true;
909 chris 63
                        //mParams.angle = (lifeTime * 90) % 360;
64
                        //mParams.angle = 34;
65
                        //mParams.angle = 90;
66
 
893 chris 67
 
906 chris 68
                        mCarrotFrames[frame].param.apply(mParams);
909 chris 69
                        mCarrotFrames[frame].render();
70
 
911 chris 71
 
72
/*                      float pX = mParams.w/3;
73
                        float pY = mParams.h/3;
74
 
75
                        Vector2 p = mCarrotFrames[frame].param.transformPoint(pX, pY);
76
 
77
                        mTester.param.x = p.x;
78
                        mTester.param.y = p.y;
79
                        mTester.param.w = 4;
80
                        mTester.param.h = 4;                   
81
                        mTester.centerPivot();
82
                        mTester.render();*/
83
 
909 chris 84
                        /*getGraphics().getBatch().begin();
85
                        mParams.y += 100.0f;
86
                        mCarrotFrames[frame].param.apply(mParams);
87
                        getGraphics().getBatch().drawSprite(mCarrotFrames[frame]);
88
                        getGraphics().getBatch().end();*/
906 chris 89
                }
90
 
91
                public boolean checkForHit(Shape shape, Matrix4 transform)
92
                {
893 chris 93
 
906 chris 94
 
95
                        return false;
893 chris 96
                }
97
 
98
                public boolean checkForHit(float _x, float _y, float w, float h)
99
                {
100
                        return (((_x) > (x - SPRITE_WIDTH/2)) &&
101
                                        ((_x) < (x + SPRITE_WIDTH/2)) &&
102
                                        ((_y) > (y - SPRITE_HEIGHT/2)) &&
103
                                        ((_y) < (y + SPRITE_HEIGHT/2)));
104
                        /*return (((_x + w/2) > (x - SPRITE_SIZE/2)) &&
105
                                        ((_x - w/2) < (x + SPRITE_SIZE/2)) &&
106
                                        ((_y + h/2) > (y - SPRITE_SIZE/2)) &&
107
                                        ((_y - h/2) < (y + SPRITE_SIZE/2)));*/
108
                }
109
 
110
        }
111
 
112
        // Fields===========================================================================================
113
 
114
        private Vector<Instance> mEnemies = new Vector<Instance>();
115
 
904 chris 116
        private Shape mCarrotShape = null;
117
 
893 chris 118
        private AtlasSprite mCarrotSprite = null;
119
        private AtlasSpriteInstance mCarrotFrames[] = null;
906 chris 120
 
121
        private Sprite mTester = null;
893 chris 122
 
123
        // Methods==========================================================================================
124
 
125
        public CarrotEnemies(GameLogic gameLogic)
126
        {
127
                super(gameLogic);
128
                mCarrotSprite = new AtlasSprite(getGraphics(), "data/textures/carrot.png", "data/textures/carrot.txt");
906 chris 129
                mTester = new Sprite(getGraphics(), "data/textures/tester.png");
893 chris 130
        }
131
 
132
        @Override
133
        public void initAsync()
134
        {
135
                mCarrotSprite.initAsync();
906 chris 136
                mTester.initAsync();
893 chris 137
        }
138
 
139
        @Override
140
        public void init()
141
        {
142
                mCarrotSprite.init();
143
                mCarrotFrames = mCarrotSprite.createSpriteInstances();
906 chris 144
 
145
                mTester.init();
893 chris 146
 
904 chris 147
                mCarrotShape = ShapeUtil.createShapeFromFile("data/textures/carrot.shape");
893 chris 148
        }
149
 
150
        @Override
151
        public void exit()
152
        {
904 chris 153
                mCarrotShape = null;
893 chris 154
                mCarrotFrames = null;
155
 
906 chris 156
                if (mTester != null)
157
                {
158
                        mTester.dispose();
159
                        mTester = null;
160
                }
161
 
893 chris 162
                if (mCarrotSprite != null)
163
                {
164
                        mCarrotSprite.dispose();
165
                        mCarrotSprite = null;
166
                }
167
        }
168
 
169
        @Override
170
        public void update(float deltaTime)
171
        {
172
                int i = 0;
173
                while (i < mEnemies.size())
174
                {
175
                        Instance enemy = mEnemies.get(i);
176
                        enemy.update(deltaTime);
177
 
178
                        if (!enemy.isAlive)
179
                        {
180
                                mEnemies.remove(i);
181
                                continue;
182
                        }
183
 
184
                        ++i;
185
                }
186
        }
187
 
188
        @Override
189
        public void render()
190
        {
191
                int i = 0;
192
                while (i < mEnemies.size())
193
                {
194
                        Instance enemy = mEnemies.get(i);
195
                        if (enemy.isAlive)
196
                        {
197
                                enemy.render();
198
                        }
199
 
200
                        ++i;
201
                }
202
        }
203
 
204
        public void spawn(float x, float y)
205
        {
206
                mEnemies.add(new Instance(x, y));
207
        }
208
 
906 chris 209
        public boolean checkForHit(Shape shape, Matrix4 transform)
210
        {
211
                boolean hitFound = false;
212
 
213
                int i = 0;
214
                while (i < mEnemies.size())
215
                {
216
                        Instance enemy = mEnemies.get(i);
217
                        if (enemy.checkForHit(shape, transform))
218
                        {
219
                                getGameLogic().getExplosions().spawn(enemy.x, enemy.y);
220
                        }
221
                        ++i;
222
                }
223
 
224
                return hitFound;
225
        }
226
 
893 chris 227
        // TODO: unify
228
        public boolean checkForHit(float x, float y, float w, float h)
229
        {
230
                boolean hitFound = false;
231
 
232
                int i = 0;
233
                while (i < mEnemies.size())
234
                {
235
                        Instance enemy = mEnemies.get(i);
236
                        if (enemy.checkForHit(x, y, w, h))
237
                        {
238
                                getGameLogic().getExplosions().spawn(enemy.x, enemy.y);
239
 
240
                                // spawn powerup
241
                                // TEMP:
906 chris 242
                                /*int n = getGame().getRandomInt(1, 10);
893 chris 243
                                if (n == 5)
244
                                {
245
                                        int rand = getGame().getRandomInt(PowerUps.Type.SPEED_UP.ordinal(), PowerUps.Type.MISSILE.ordinal());
246
                                        getGameLogic().getPowerUps().spawn(enemy.x, enemy.y, Type.values()[rand]);
906 chris 247
                                }*/
893 chris 248
 
906 chris 249
                                //mEnemies.remove(i);
250
                                //hitFound = true;
251
                                //continue;                             
893 chris 252
                        }
253
                        ++i;
254
                }
255
 
256
                return hitFound;
257
        }
258
 
259
        // TODO: unify
260
        public boolean getNearestEnemy(float x, float y, Vector2 result, float previousDistanceSqr)
261
        {
262
                boolean found = false;
263
                float distanceSqr = previousDistanceSqr;
264
 
265
                for (int i = 0; i < mEnemies.size(); i++)
266
                {
267
                        Instance enemy = mEnemies.get(i);
268
                        if (enemy.isAlive)
269
                        {
270
                                float diffX = enemy.x - x;
271
                                float diffY = enemy.y - y;
272
                                float currentDistanceSqr = diffX*diffX + diffY*diffY;
273
 
274
                                if ((distanceSqr < 0) || (currentDistanceSqr < distanceSqr))
275
                                {
276
                                        found = true;
277
                                        distanceSqr = currentDistanceSqr;
278
 
279
                                        result.x = enemy.x;
280
                                        result.y = enemy.y;
281
                                }
282
                        }
283
                }
284
 
285
                return found;
286
        }
287
 
288
        // Getters/Setters==================================================================================
289
 
290
}