Rev 1368 |
Rev 1580 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package com.gebauz.burutaru.game.entities.enemies;
import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.collision.Shape;
import com.gebauz.burutaru.game.GameLogic;
import com.gebauz.burutaru.game.entities.CollisionWorld;
import com.gebauz.burutaru.game.entities.CollisionWorld.CollisionInfo;
import com.gebauz.burutaru.game.entities.Entity;
import com.gebauz.burutaru.game.entities.effects.WeaponsImpact;
import com.gebauz.burutaru.game.entities.weapons.Projectile;
public class BasicShots
extends Entity
{
// Constants========================================================================================
public static final int MAX_SHOTS =
50;
public static final int BASICSHOT_DAMAGE =
2;
public static final float SHOT_SIZE =
8;
// Embedded Types===================================================================================
public class Instance
extends Projectile
{
private SpriteInstance mSpriteInstance =
null;
private Vector2 mMove =
new Vector2
();
private Vector2 mDirection =
new Vector2
();
public Instance
()
{
super(BASICSHOT_DAMAGE
);
mSpriteInstance = mSprite.
createSpriteInstanceForAll();
setAlive
(false);
}
public void spawn
(float x,
float y,
float dirX,
float dirY,
float speed
)
{
mSpriteInstance.
transform.
x = x
;
mSpriteInstance.
transform.
y = y
;
mSpriteInstance.
transform.
w = SHOT_SIZE
;
mSpriteInstance.
transform.
h = SHOT_SIZE
;
mSpriteInstance.
transform.
centerPivot();
mDirection.
set(dirX, dirY
);
mDirection.
setLength(speed
);
setAlive
(true);
}
public void update
(float deltaTime
)
{
mMove.
set(mDirection.
x * deltaTime, mDirection.
y * deltaTime
);
mSpriteInstance.
transform.
x += mMove.
x - getGameLogic
().
getLevel().
getCurrentScrollVelocity().
x;
mSpriteInstance.
transform.
y += mMove.
y - getGameLogic
().
getLevel().
getCurrentScrollVelocity().
y;
// check collision
if (getGameLogic
().
getCollisionWorld().
checkCollisionPoint(CollisionWorld.
FILTER_LEVEL_ELEMENTS | CollisionWorld.
FILTER_PLAYER_SHIP,
mSpriteInstance.
transform.
x, mSpriteInstance.
transform.
y, SHOT_SIZE/
2, mCollisionResult
))
{
if (mCollisionResult.
collidingShip !=
null)
mCollisionResult.
collidingShip.
damage(BASICSHOT_DAMAGE
);
getGameLogic
().
getWeaponsImpact().
spawnImpact(mSpriteInstance.
transform.
x, mSpriteInstance.
transform.
y, WeaponsImpact.
Type.
SIMPLE_IMPACT);
setAlive
(false);
}
// check collision with player ship
//if (getGameLogic().getShip().checkHit()
if (getGameLogic
().
isOutOfScreen(mSpriteInstance.
transform))
setAlive
(false);
}
public void render
()
{
mSpriteInstance.
render();
}
}
// Fields===========================================================================================
private Instance
[] mInstances =
new Instance
[MAX_SHOTS
];
private Sprite mSprite =
null;
private Shape mShape =
null;
private CollisionInfo mCollisionResult =
new CollisionInfo
();
// Methods==========================================================================================
public BasicShots
(GameLogic gameLogic
)
{
super(gameLogic
);
mSprite =
new Sprite
(getGraphics
(),
"data/textures/basicshot.png");
mShape =
new Shape(getGame
(),
"data/textures/basicshot.shape");
}
@
Override
public void initAsync
()
{
mSprite.
initAsync();
mShape.
initAsync();
}
@
Override
public void init
()
{
mSprite.
init();
mShape.
init();
for (int i =
0; i
< MAX_SHOTS
; i++
)
{
mInstances
[i
] =
new Instance
();
}
}
@
Override
public void exit
()
{
mSprite.
dispose();
}
@
Override
public void update
(float deltaTime
)
{
for (int i =
0; i
< MAX_SHOTS
; i++
)
{
if (mInstances
[i
].
isAlive())
mInstances
[i
].
update(deltaTime
);
}
}
@
Override
public void render
()
{
for (int i =
0; i
< MAX_SHOTS
; i++
)
{
if (mInstances
[i
].
isAlive())
mInstances
[i
].
render();
}
}
public void spawnShot
(float x,
float y,
float dirX,
float dirY,
float speed
)
{
for (int i =
0; i
< MAX_SHOTS
; i++
)
{
if (!mInstances
[i
].
isAlive())
{
mInstances
[i
].
spawn(x, y, dirX, dirY, speed
);
//mBeamShotSfx.play();
break;
}
}
}
// Getters/Setters==================================================================================
}