Rev 993 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 838 | chris | 1 | package com.gebauz.burutaru.game.entities; |
| 2 | |||
| 880 | chris | 3 | import com.badlogic.gdx.audio.Sound; |
| 868 | chris | 4 | import com.badlogic.gdx.graphics.Texture.TextureFilter; |
| 915 | chris | 5 | import com.gebauz.bauzoid.graphics.sprite.AtlasSpriteFrame; |
| 843 | chris | 6 | import com.gebauz.bauzoid.graphics.sprite.AtlasSprite; |
| 977 | chris | 7 | import com.gebauz.bauzoid.graphics.sprite.AtlasSpriteInstance; |
| 863 | chris | 8 | import com.gebauz.bauzoid.graphics.sprite.Sprite; |
| 841 | chris | 9 | import com.gebauz.bauzoid.math.MathUtil; |
| 977 | chris | 10 | import com.gebauz.bauzoid.math.Matrix4; |
| 11 | import com.gebauz.bauzoid.math.collision.AABoundingBox; |
||
| 12 | import com.gebauz.bauzoid.math.collision.Shape; |
||
| 13 | import com.gebauz.bauzoid.math.collision.ShapeUtil; |
||
| 841 | chris | 14 | import com.gebauz.burutaru.GameConsts; |
| 838 | chris | 15 | import com.gebauz.burutaru.game.GameLogic; |
| 16 | |||
| 17 | public class Ship extends Entity |
||
| 18 | { |
||
| 848 | chris | 19 | |
| 20 | // Constants======================================================================================== |
||
| 21 | |||
| 879 | chris | 22 | public static final int SHIP_WIDTH = 64; |
| 23 | public static final int SHIP_HEIGHT = 64; |
||
| 839 | chris | 24 | |
| 879 | chris | 25 | // HACK: for powerup pickup |
| 26 | public static final float SHIP_RADIUS_SQR = SHIP_WIDTH*SHIP_WIDTH * 0.5f; |
||
| 863 | chris | 27 | |
| 879 | chris | 28 | public static final int NUM_UP_FRAMES = 5; |
| 29 | public static final int NUM_DOWN_FRAMES = 5; |
||
| 30 | public static final int NUM_SHIP_FRAMES = 1 + NUM_UP_FRAMES + NUM_DOWN_FRAMES; |
||
| 31 | public static final int SHIP_SPRITE_SIZE = 128; |
||
| 32 | public static final int NUM_SHIP_FRAMES_X = 4; |
||
| 33 | public static final int NUM_SHIP_FRAMES_Y = 4; |
||
| 34 | public static final float UPDOWN_ANIM_SPEED = 4.0f; |
||
| 35 | public static final float UPDOWN_THRESHOLD = 20.0f; |
||
| 864 | chris | 36 | |
| 879 | chris | 37 | public static final float MUZZLEFLASH_DURATION = 0.15f; |
| 38 | public static final float MUZZLEFLASH_SIZE = 40.0f; |
||
| 865 | chris | 39 | |
| 879 | chris | 40 | public static final float EXHAUST_WIDTH = 28; |
| 41 | public static final float EXHAUST_HEIGHT = 16; |
||
| 42 | |||
| 43 | public static final float EXHAUST_BOOST_MAX = 0.3f; |
||
| 44 | public static final float EXHAUST_BOOST_MIN = -0.1f; |
||
| 45 | public static final float EXHAUST_BOOST_FACTOR = 11.0f; |
||
| 46 | public static final float EXHAUST_ANIM_SPEED = 4000.0f; |
||
| 47 | |||
| 48 | |||
| 49 | public static final float ENGINE_BOOST_DURATION = 0.5f; |
||
| 968 | chris | 50 | |
| 971 | chris | 51 | public static final float BEAMSHOT_COOLDOWN_TIME = 0.2f; |
| 977 | chris | 52 | |
| 53 | public static final float DAMAGE_COOLDOWN_TIME = 0.2f; |
||
| 848 | chris | 54 | |
| 55 | // Embedded Types=================================================================================== |
||
| 843 | chris | 56 | |
| 844 | chris | 57 | public enum MoveDirection |
| 843 | chris | 58 | { |
| 59 | NONE, |
||
| 60 | UP, |
||
| 61 | DOWN |
||
| 62 | } |
||
| 63 | |||
| 848 | chris | 64 | // Fields=========================================================================================== |
| 65 | |||
| 838 | chris | 66 | private float mPositionX = 100; |
| 67 | private float mPositionY = 100; |
||
| 68 | |||
| 865 | chris | 69 | private float mLastMoveX = 0.0f; |
| 70 | private float mLastMoveY = 0.0f; |
||
| 71 | |||
| 843 | chris | 72 | private AtlasSprite mShipAtlas = null; |
| 915 | chris | 73 | private AtlasSpriteFrame mShipFrames[] = new AtlasSpriteFrame[NUM_SHIP_FRAMES]; |
| 977 | chris | 74 | private AtlasSpriteInstance mSpriteInstance = null; |
| 75 | |||
| 76 | private Shape mShipShape = null; |
||
| 77 | |||
| 843 | chris | 78 | private int mCurrentShipFrame = 0; |
| 79 | private MoveDirection mMoveDirection = MoveDirection.NONE; |
||
| 839 | chris | 80 | |
| 863 | chris | 81 | private Sprite mMuzzleFlash = null; |
| 82 | private float mMuzzleFlashTimer = -1.0f; |
||
| 83 | |||
| 968 | chris | 84 | private float mBeamShotTimer = 0.0f; |
| 85 | |||
| 864 | chris | 86 | private Sprite mEngineExhaust = null; |
| 87 | private float mEngineExhaustScale = 1.0f; |
||
| 865 | chris | 88 | private float mEngineExhaustBoost = 0.0f; |
| 864 | chris | 89 | |
| 843 | chris | 90 | private float mMoveDirectionCoeff = 0.0f; |
| 845 | chris | 91 | private float mMoveDirectionCoeffTarget = 0.0f; |
| 879 | chris | 92 | |
| 93 | private float mEngineBoostTimer = 0.0f; |
||
| 880 | chris | 94 | |
| 95 | private Sound mEngineBoostSfx = null; |
||
| 977 | chris | 96 | |
| 97 | private float mDamageCoolDown = 0.0f; |
||
| 864 | chris | 98 | |
| 848 | chris | 99 | // Methods========================================================================================== |
| 100 | |||
| 838 | chris | 101 | public Ship(GameLogic gameLogic) |
| 102 | { |
||
| 103 | super(gameLogic); |
||
| 860 | chris | 104 | mShipAtlas = new AtlasSprite(getGraphics(), "data/textures/shipframes.png", "data/textures/ship.txt"); |
| 863 | chris | 105 | mMuzzleFlash = new Sprite(getGraphics(), "data/textures/plasma_muzzleflash.png"); |
| 864 | chris | 106 | mEngineExhaust = new Sprite(getGraphics(), "data/textures/engine_exhaust.png"); |
| 838 | chris | 107 | } |
| 839 | chris | 108 | |
| 109 | @Override |
||
| 110 | public void initAsync() |
||
| 111 | { |
||
| 843 | chris | 112 | mShipAtlas.initAsync(); |
| 863 | chris | 113 | mMuzzleFlash.initAsync(); |
| 864 | chris | 114 | mEngineExhaust.initAsync(); |
| 839 | chris | 115 | } |
| 838 | chris | 116 | |
| 117 | @Override |
||
| 118 | public void init() |
||
| 119 | { |
||
| 880 | chris | 120 | mEngineBoostSfx = getAudio().newManagedSound("data/sounds/speedup.wav"); |
| 121 | |||
| 843 | chris | 122 | mShipAtlas.init(); |
| 868 | chris | 123 | mShipAtlas.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); |
| 860 | chris | 124 | mShipAtlas.createSpriteInstances(mShipFrames); |
| 863 | chris | 125 | mMuzzleFlash.init(); |
| 868 | chris | 126 | mMuzzleFlash.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); |
| 864 | chris | 127 | mEngineExhaust.init(); |
| 868 | chris | 128 | mEngineExhaust.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); |
| 977 | chris | 129 | |
| 130 | mShipShape = ShapeUtil.createShapeFromFile("data/textures/ship.shape"); |
||
| 131 | |||
| 132 | mSpriteInstance = new AtlasSpriteInstance(getGraphics(), mShipAtlas, mShipFrames, mShipShape); |
||
| 838 | chris | 133 | } |
| 134 | |||
| 135 | @Override |
||
| 136 | public void exit() |
||
| 137 | { |
||
| 977 | chris | 138 | mShipShape = null; |
| 139 | mSpriteInstance = null; |
||
| 140 | |||
| 843 | chris | 141 | for (int i = 0; i < NUM_SHIP_FRAMES; i++) |
| 142 | { |
||
| 143 | mShipFrames[i] = null; |
||
| 144 | } |
||
| 145 | |||
| 146 | if (mShipAtlas != null) |
||
| 147 | { |
||
| 148 | mShipAtlas.dispose(); |
||
| 149 | mShipAtlas = null; |
||
| 150 | } |
||
| 863 | chris | 151 | |
| 152 | if (mMuzzleFlash != null) |
||
| 153 | { |
||
| 154 | mMuzzleFlash.dispose(); |
||
| 155 | mMuzzleFlash = null; |
||
| 156 | } |
||
| 864 | chris | 157 | |
| 158 | if (mEngineExhaust != null) |
||
| 159 | { |
||
| 160 | mEngineExhaust.dispose(); |
||
| 161 | mEngineExhaust = null; |
||
| 162 | } |
||
| 880 | chris | 163 | |
| 164 | if (mEngineBoostSfx != null) |
||
| 165 | { |
||
| 166 | getAudio().removeManagedSound(mEngineBoostSfx); |
||
| 167 | mEngineBoostSfx = null; |
||
| 168 | } |
||
| 838 | chris | 169 | } |
| 170 | |||
| 171 | @Override |
||
| 172 | public void update(float deltaTime) |
||
| 839 | chris | 173 | { |
| 843 | chris | 174 | if (mMoveDirection == MoveDirection.UP) |
| 175 | { |
||
| 176 | // move towards -1 |
||
| 844 | chris | 177 | mMoveDirectionCoeff -= deltaTime * UPDOWN_ANIM_SPEED; |
| 846 | chris | 178 | if (mMoveDirectionCoeff < mMoveDirectionCoeffTarget) |
| 179 | mMoveDirectionCoeff = mMoveDirectionCoeffTarget; |
||
| 843 | chris | 180 | } |
| 181 | else if (mMoveDirection == MoveDirection.DOWN) |
||
| 182 | { |
||
| 183 | // move towards +1 |
||
| 846 | chris | 184 | mMoveDirectionCoeff += deltaTime * UPDOWN_ANIM_SPEED; |
| 185 | if (mMoveDirectionCoeff > mMoveDirectionCoeffTarget) |
||
| 186 | mMoveDirectionCoeff = mMoveDirectionCoeffTarget; |
||
| 843 | chris | 187 | } |
| 844 | chris | 188 | else if (mMoveDirection == MoveDirection.NONE) |
| 843 | chris | 189 | { |
| 190 | // move towards 0 |
||
| 191 | if (mMoveDirectionCoeff > 0) |
||
| 844 | chris | 192 | mMoveDirectionCoeff = MathUtil.clamp(mMoveDirectionCoeff - deltaTime * UPDOWN_ANIM_SPEED, 0, 1); |
| 843 | chris | 193 | else if (mMoveDirectionCoeff < 0) |
| 844 | chris | 194 | mMoveDirectionCoeff = MathUtil.clamp(mMoveDirectionCoeff + deltaTime * UPDOWN_ANIM_SPEED, -1, 0); |
| 843 | chris | 195 | } |
| 196 | |||
| 844 | chris | 197 | mMoveDirectionCoeff = MathUtil.clamp(mMoveDirectionCoeff, -1, 1); |
| 198 | |||
| 199 | if (mMoveDirectionCoeff > 0) |
||
| 843 | chris | 200 | { |
| 844 | chris | 201 | mCurrentShipFrame = (int)(1 + (NUM_DOWN_FRAMES-1) * (mMoveDirectionCoeff)); |
| 843 | chris | 202 | } |
| 844 | chris | 203 | else if (mMoveDirectionCoeff < 0) |
| 843 | chris | 204 | { |
| 844 | chris | 205 | mCurrentShipFrame = (int)(1 + NUM_DOWN_FRAMES + (NUM_UP_FRAMES-1) * (-mMoveDirectionCoeff)); |
| 843 | chris | 206 | } |
| 207 | else |
||
| 208 | { |
||
| 209 | mCurrentShipFrame = 0; |
||
| 210 | } |
||
| 211 | |||
| 845 | chris | 212 | //Gdx.app.log(GameConsts.LOG_TAG, "coeff = " + mMoveDirectionCoeff + ", frame = " + mCurrentShipFrame + ", dir = " + mMoveDirection); |
| 844 | chris | 213 | |
| 843 | chris | 214 | mCurrentShipFrame = MathUtil.clamp(mCurrentShipFrame, 0, NUM_SHIP_FRAMES-1); |
| 864 | chris | 215 | |
| 865 | chris | 216 | if (mLastMoveX > 0.0f) |
| 217 | { |
||
| 218 | // grow |
||
| 219 | float diff = EXHAUST_BOOST_MAX - mEngineExhaustBoost; |
||
| 220 | mEngineExhaustBoost += diff * deltaTime * EXHAUST_BOOST_FACTOR; |
||
| 221 | } |
||
| 222 | else if (mLastMoveX < 0.0f) |
||
| 223 | { |
||
| 224 | float diff = EXHAUST_BOOST_MIN - mEngineExhaustBoost; |
||
| 225 | mEngineExhaustBoost += diff * deltaTime * EXHAUST_BOOST_FACTOR; |
||
| 226 | } |
||
| 227 | else |
||
| 228 | { |
||
| 229 | float diff = 0.0f - mEngineExhaustBoost; |
||
| 230 | mEngineExhaustBoost += diff * deltaTime * EXHAUST_BOOST_FACTOR; |
||
| 231 | } |
||
| 232 | mEngineExhaustScale = 0.9f + MathUtil.sin(getGame().getTime() * EXHAUST_ANIM_SPEED) * 0.05f + mEngineExhaustBoost; |
||
| 879 | chris | 233 | |
| 234 | if (mEngineBoostTimer > 0.0f) |
||
| 235 | { |
||
| 236 | mEngineBoostTimer -= deltaTime; |
||
| 237 | if (mEngineBoostTimer < 0.0f) |
||
| 238 | mEngineBoostTimer = 0.0f; |
||
| 239 | } |
||
| 240 | |||
| 241 | mEngineExhaustScale += ((mEngineBoostTimer / ENGINE_BOOST_DURATION) * 1.8f); |
||
| 242 | |||
| 855 | chris | 243 | |
| 863 | chris | 244 | if (mMuzzleFlashTimer > 0.0f) |
| 245 | mMuzzleFlashTimer -= deltaTime; |
||
| 968 | chris | 246 | |
| 247 | if (mBeamShotTimer > 0.0f) |
||
| 248 | mBeamShotTimer -= deltaTime; |
||
| 977 | chris | 249 | |
| 250 | if (mDamageCoolDown > 0.0f) |
||
| 251 | mDamageCoolDown -= deltaTime; |
||
| 855 | chris | 252 | } |
| 253 | |||
| 254 | @Override |
||
| 255 | public void render() |
||
| 864 | chris | 256 | { |
| 879 | chris | 257 | |
| 258 | if (mEngineBoostTimer > 0.0f) |
||
| 259 | { |
||
| 955 | chris | 260 | mMuzzleFlash.param.x = mPositionX; |
| 900 | chris | 261 | mMuzzleFlash.param.y = mPositionY - 1; |
| 262 | mMuzzleFlash.param.w = MUZZLEFLASH_SIZE * (1 + mEngineBoostTimer / ENGINE_BOOST_DURATION); |
||
| 263 | mMuzzleFlash.param.h = MUZZLEFLASH_SIZE * (1 + 0.5f*mEngineBoostTimer / ENGINE_BOOST_DURATION); |
||
| 955 | chris | 264 | mMuzzleFlash.param.pivotX = mMuzzleFlash.param.w; |
| 900 | chris | 265 | mMuzzleFlash.param.pivotY = mMuzzleFlash.param.h/2; |
| 266 | mMuzzleFlash.param.mirrorX = true; |
||
| 267 | mMuzzleFlash.param.alpha = (mEngineBoostTimer / ENGINE_BOOST_DURATION); |
||
| 879 | chris | 268 | mMuzzleFlash.render(); |
| 269 | } |
||
| 270 | |||
| 900 | chris | 271 | mEngineExhaust.param.x = mPositionX - EXHAUST_WIDTH/2; |
| 272 | mEngineExhaust.param.y = mPositionY - 1; |
||
| 273 | mEngineExhaust.param.w = EXHAUST_WIDTH * mEngineExhaustScale; |
||
| 274 | mEngineExhaust.param.h = EXHAUST_HEIGHT; |
||
| 275 | mEngineExhaust.param.pivotX = mEngineExhaust.param.w; |
||
| 276 | mEngineExhaust.param.pivotY = mEngineExhaust.param.h/2; |
||
| 864 | chris | 277 | mEngineExhaust.render(); |
| 278 | |||
| 279 | |||
| 977 | chris | 280 | mSpriteInstance.param.x = mPositionX; |
| 281 | mSpriteInstance.param.y = mPositionY; |
||
| 282 | mSpriteInstance.param.w = SHIP_WIDTH; |
||
| 283 | mSpriteInstance.param.h = SHIP_HEIGHT; |
||
| 284 | mSpriteInstance.param.centerPivot(); |
||
| 285 | mSpriteInstance.renderFrame(mCurrentShipFrame); |
||
| 286 | |||
| 287 | /*mShipFrames[mCurrentShipFrame].param.x = mPositionX; |
||
| 899 | chris | 288 | mShipFrames[mCurrentShipFrame].param.y = mPositionY; |
| 289 | mShipFrames[mCurrentShipFrame].param.w = SHIP_WIDTH; |
||
| 290 | mShipFrames[mCurrentShipFrame].param.h = SHIP_HEIGHT; |
||
| 864 | chris | 291 | mShipFrames[mCurrentShipFrame].centerPivot(); |
| 977 | chris | 292 | mShipFrames[mCurrentShipFrame].render();*/ |
| 864 | chris | 293 | |
| 863 | chris | 294 | if (mMuzzleFlashTimer > 0.0f) |
| 295 | { |
||
| 900 | chris | 296 | mMuzzleFlash.param.x = mPositionX + SHIP_WIDTH/2; |
| 297 | mMuzzleFlash.param.y = mPositionY; |
||
| 298 | mMuzzleFlash.param.w = MUZZLEFLASH_SIZE; |
||
| 299 | mMuzzleFlash.param.h = MUZZLEFLASH_SIZE; |
||
| 300 | mMuzzleFlash.param.pivotX = mMuzzleFlash.param.w/3 + 1.0f; |
||
| 301 | mMuzzleFlash.param.pivotY = mMuzzleFlash.param.h/2; |
||
| 302 | mMuzzleFlash.param.mirrorX = false; |
||
| 303 | mMuzzleFlash.param.alpha = mMuzzleFlashTimer/MUZZLEFLASH_DURATION; |
||
| 863 | chris | 304 | mMuzzleFlash.render(); |
| 305 | } |
||
| 838 | chris | 306 | } |
| 840 | chris | 307 | |
| 844 | chris | 308 | public void moveBy(float x, float y, float deltaTime) |
| 840 | chris | 309 | { |
| 844 | chris | 310 | mPositionX += x*deltaTime; |
| 311 | mPositionY += y*deltaTime; |
||
| 841 | chris | 312 | |
| 843 | chris | 313 | // TODO: scale with amount of y |
| 844 | chris | 314 | if (y < -UPDOWN_THRESHOLD) |
| 845 | chris | 315 | { |
| 843 | chris | 316 | mMoveDirection = MoveDirection.UP; |
| 846 | chris | 317 | //mMoveDirectionCoeffTarget = -1.0f; |
| 318 | mMoveDirectionCoeffTarget = (y + UPDOWN_THRESHOLD) * 0.01f; |
||
| 845 | chris | 319 | } |
| 844 | chris | 320 | else if (y > UPDOWN_THRESHOLD) |
| 845 | chris | 321 | { |
| 843 | chris | 322 | mMoveDirection = MoveDirection.DOWN; |
| 846 | chris | 323 | mMoveDirectionCoeffTarget = (y - UPDOWN_THRESHOLD) * 0.01f; |
| 845 | chris | 324 | } |
| 843 | chris | 325 | else |
| 845 | chris | 326 | { |
| 843 | chris | 327 | mMoveDirection = MoveDirection.NONE; |
| 845 | chris | 328 | mMoveDirectionCoeffTarget = 0.0f; |
| 329 | } |
||
| 843 | chris | 330 | |
| 841 | chris | 331 | mPositionX = MathUtil.clamp(mPositionX, 0.0f, GameConsts.VIRTUAL_SCREEN_WIDTH); |
| 332 | mPositionY = MathUtil.clamp(mPositionY, 0.0f, GameConsts.VIRTUAL_SCREEN_HEIGHT); |
||
| 865 | chris | 333 | |
| 334 | mLastMoveX = x * deltaTime; |
||
| 335 | mLastMoveY = y * deltaTime; |
||
| 840 | chris | 336 | } |
| 844 | chris | 337 | |
| 845 | chris | 338 | public void resetNoUpDownMovement() |
| 844 | chris | 339 | { |
| 340 | mMoveDirection = MoveDirection.NONE; |
||
| 845 | chris | 341 | mMoveDirectionCoeffTarget = 0.0f; |
| 844 | chris | 342 | } |
| 851 | chris | 343 | |
| 886 | chris | 344 | public void shoot() |
| 345 | { |
||
| 974 | chris | 346 | switch (getGameLogic().getShipParameters().getWeaponType()) |
| 347 | { |
||
| 348 | case PLASMA_SHOT: |
||
| 349 | shootPlasma(); |
||
| 350 | break; |
||
| 351 | case BEAM_SHOT: |
||
| 352 | shootBeamShot(); |
||
| 353 | break; |
||
| 354 | case SPREAD_SHOT: |
||
| 355 | break; |
||
| 356 | case NAPALM_SHOT: |
||
| 357 | break; |
||
| 358 | } |
||
| 359 | |||
| 973 | chris | 360 | shootMissile(); |
| 974 | chris | 361 | shootBomb(); |
| 886 | chris | 362 | } |
| 363 | |||
| 851 | chris | 364 | public void shootPlasma() |
| 365 | { |
||
| 366 | getGameLogic().getPlasmaShots().spawnShot(mPositionX + SHIP_WIDTH/2, mPositionY); |
||
| 863 | chris | 367 | mMuzzleFlashTimer = MUZZLEFLASH_DURATION; |
| 851 | chris | 368 | } |
| 879 | chris | 369 | |
| 886 | chris | 370 | public void shootMissile() |
| 371 | { |
||
| 891 | chris | 372 | if (getGameLogic().getShipParameters().areMissilesEnabled()) |
| 373 | getGameLogic().getPowerUpMissile().launch(mPositionX + SHIP_WIDTH/3, mPositionY); |
||
| 886 | chris | 374 | } |
| 375 | |||
| 956 | chris | 376 | public void shootBomb() |
| 377 | { |
||
| 974 | chris | 378 | if (getGameLogic().getShipParameters().areBombsEnabled()) |
| 379 | getGameLogic().getPowerUpBomb().launch(mPositionX + SHIP_WIDTH/3, mPositionY); |
||
| 956 | chris | 380 | } |
| 381 | |||
| 967 | chris | 382 | public void shootBeamShot() |
| 383 | { |
||
| 968 | chris | 384 | if (mBeamShotTimer <= 0.0f) |
| 385 | { |
||
| 386 | getGameLogic().getBeamShots().spawnShot(mPositionX + SHIP_WIDTH/2, mPositionY); |
||
| 387 | mBeamShotTimer = BEAMSHOT_COOLDOWN_TIME; |
||
| 388 | } |
||
| 967 | chris | 389 | } |
| 390 | |||
| 879 | chris | 391 | public void boostEngine() |
| 392 | { |
||
| 393 | // boost for speed up powerup |
||
| 394 | mEngineBoostTimer = ENGINE_BOOST_DURATION; |
||
| 880 | chris | 395 | mEngineBoostSfx.play(); |
| 879 | chris | 396 | } |
| 977 | chris | 397 | |
| 997 | chris | 398 | public void processHit(ICollidable collidable) |
| 977 | chris | 399 | { |
| 400 | if (mDamageCoolDown <= 0.0f) |
||
| 401 | { |
||
| 402 | getGameLogic().getExplosions().spawn(mPositionX, mPositionY, 100); |
||
| 403 | mDamageCoolDown = DAMAGE_COOLDOWN_TIME; |
||
| 404 | } |
||
| 405 | } |
||
| 838 | chris | 406 | |
| 848 | chris | 407 | // Getters/Setters================================================================================== |
| 879 | chris | 408 | public float getPositionX() { return mPositionX; } |
| 409 | public float getPositionY() { return mPositionY; } |
||
| 848 | chris | 410 | |
| 977 | chris | 411 | public AABoundingBox getBounds() { return mSpriteInstance.param.getBoundingBox(); } |
| 412 | |||
| 413 | /** Get the shape of the projectile for testing. */ |
||
| 414 | public Shape getShape() { return mShipShape; } |
||
| 415 | |||
| 416 | /** Get the transformation of the shape for testing. */ |
||
| 417 | public Matrix4 getShapeTransform() { return mSpriteInstance.param.getTransform(); } |
||
| 418 | |||
| 838 | chris | 419 | } |
| 839 | chris | 420 | |
| 421 |