Subversion Repositories AndroidProjects

Rev

Rev 950 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
848 chris 1
package com.gebauz.burutaru.game.entities;
2
 
869 chris 3
import com.badlogic.gdx.audio.Sound;
868 chris 4
import com.badlogic.gdx.graphics.Texture.TextureFilter;
849 chris 5
import com.gebauz.bauzoid.graphics.sprite.Sprite;
922 chris 6
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
924 chris 7
import com.gebauz.bauzoid.math.Matrix4;
950 chris 8
import com.gebauz.bauzoid.math.collision.AABoundingBox;
902 chris 9
import com.gebauz.bauzoid.math.collision.Shape;
10
import com.gebauz.bauzoid.math.collision.ShapeUtil;
851 chris 11
import com.gebauz.burutaru.GameConsts;
848 chris 12
import com.gebauz.burutaru.game.GameLogic;
13
 
14
public class PlasmaShots extends Entity
15
{
16
 
17
        // Constants========================================================================================
849 chris 18
 
936 chris 19
        public final static int PLASMA_SHOT_DAMAGE = 10;
20
 
879 chris 21
        final static int MAX_PLASMA_SHOTS = 10;
849 chris 22
 
879 chris 23
        final static float PLASMA_SHOT_WIDTH = 40;
24
        final static float PLASMA_SHOT_HEIGHT = 10;
926 chris 25
        final static float PLASMA_SHOT_SPEED = 1500;
848 chris 26
 
27
        // Embedded Types===================================================================================
849 chris 28
 
936 chris 29
        public class Shot extends Projectile
849 chris 30
        {
922 chris 31
                public SpriteInstance spriteInstance = null;
906 chris 32
 
849 chris 33
                public Shot()
34
                {
936 chris 35
                        super(PLASMA_SHOT_DAMAGE);
922 chris 36
                        spriteInstance = new SpriteInstance(getGraphics(), mShotSprite, mShotShape);
936 chris 37
 
38
                        setAlive(false);
849 chris 39
                }
40
 
922 chris 41
                public void spawn(float x, float y)
849 chris 42
                {
936 chris 43
                        setAlive(true);
922 chris 44
 
45
                        spriteInstance.param.x = x;
46
                        spriteInstance.param.y = y;
47
                        spriteInstance.param.w = PLASMA_SHOT_WIDTH;
48
                        spriteInstance.param.h = PLASMA_SHOT_HEIGHT;
49
                        spriteInstance.param.centerPivot();
849 chris 50
                }
51
 
52
                public void update(float deltaTime)
53
                {
922 chris 54
                        spriteInstance.param.x += PLASMA_SHOT_SPEED * deltaTime;
866 chris 55
 
936 chris 56
                        getGameLogic().checkProjectileHit(this);
906 chris 57
 
922 chris 58
                        if (spriteInstance.param.x > GameConsts.VIRTUAL_SCREEN_WIDTH + PLASMA_SHOT_WIDTH)
851 chris 59
                        {
936 chris 60
                                setAlive(false);
851 chris 61
                        }
849 chris 62
                }
63
 
64
                public void render()
65
                {
936 chris 66
                        if (!isAlive())
850 chris 67
                                return;
68
 
922 chris 69
                        spriteInstance.render();
936 chris 70
                }
71
 
72
                @Override
993 chris 73
                public void processHit(ICollidable hitObject)
936 chris 74
                {
75
                        // spawn impact effect
993 chris 76
                        hitObject.hit(getDamage());
936 chris 77
                        setAlive(false);
78
                }
79
 
80
                @Override
81
                public Shape getShape()
82
                {
83
                        return spriteInstance.getShape();
84
                }
85
 
86
                @Override
87
                public Matrix4 getShapeTransform()
88
                {
89
                        return spriteInstance.param.getTransform();
950 chris 90
                }
91
 
92
                @Override
93
                public AABoundingBox getBounds()
94
                {
95
                        return spriteInstance.param.getBoundingBox();
96
                }
849 chris 97
        }
848 chris 98
 
99
        // Fields===========================================================================================
849 chris 100
 
101
        private Sprite mShotSprite = null;
902 chris 102
        private Shape mShotShape = null;
849 chris 103
 
104
        private Shot mShotList[] = new Shot[MAX_PLASMA_SHOTS];
869 chris 105
 
106
        private Sound mShotSound = null;
924 chris 107
 
848 chris 108
        // Methods==========================================================================================
109
 
110
        public PlasmaShots(GameLogic gameLogic)
111
        {
112
                super(gameLogic);
849 chris 113
 
114
                mShotSprite = new Sprite(getGraphics(), "data/textures/plasma_shot.png");
848 chris 115
        }
849 chris 116
 
117
        @Override
118
        public void initAsync()
119
        {
120
                mShotSprite.initAsync();
121
        }
848 chris 122
 
123
        @Override
124
        public void init()
125
        {
869 chris 126
                mShotSound = getAudio().newManagedSound("data/sounds/plasma_shot.wav");
127
 
902 chris 128
                mShotShape = ShapeUtil.createShapeFromFile("data/textures/plasma_shot.shape");
129
 
849 chris 130
                mShotSprite.init();
868 chris 131
                mShotSprite.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
848 chris 132
 
849 chris 133
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
134
                {
135
                        mShotList[i] = new Shot();
136
                }
848 chris 137
        }
138
 
139
        @Override
140
        public void exit()
141
        {
902 chris 142
                mShotShape = null;
143
 
849 chris 144
                if (mShotSprite != null)
145
                {
146
                        mShotSprite.dispose();
147
                        mShotSprite = null;
148
                }
869 chris 149
 
150
                if (mShotSound != null)
151
                {
152
                        getAudio().removeManagedSound(mShotSound);
153
                        mShotSound = null;
154
                }
848 chris 155
        }
156
 
157
        @Override
158
        public void update(float deltaTime)
159
        {
849 chris 160
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
161
                {
936 chris 162
                        if (mShotList[i].isAlive())
867 chris 163
                                mShotList[i].update(deltaTime);
849 chris 164
                }
848 chris 165
        }
166
 
167
        @Override
168
        public void render()
169
        {
849 chris 170
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
171
                {
172
                        mShotList[i].render();
173
                }
848 chris 174
        }
175
 
849 chris 176
        public void spawnShot(float x, float y)
177
        {
178
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
179
                {
936 chris 180
                        if (!mShotList[i].isAlive())
849 chris 181
                        {
182
                                mShotList[i].spawn(x, y);
869 chris 183
                                mShotSound.play();
851 chris 184
                                break;
849 chris 185
                        }
186
                }
187
        }
188
 
848 chris 189
        // Getters/Setters==================================================================================
190
 
191
 
192
}