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 | } |