package audioProject.entities;
import java.awt.Graphics2D;
import toritools.entity.Entity;
import toritools.entity.Level;
import toritools.entity.sprite.AbstractSprite.AbstractSpriteAdapter;
import toritools.math.Vector2;
import toritools.scripting.EntityScript.EntityScriptAdapter;
import toritools.scripting.ScriptUtils;
import audioProject.AudioProject;
public class GoodBullet extends Entity {
/**
* Build a good booooleeeeet
*
* @param position
* the starting position of bullet.
* @param spreadFactor
* the spread factor. 0 is no spread.
*/
public GoodBullet(final Vector2 position, final Vector2 delta) {
type = "GoodBullet";
layer = 1;
pos = position;
dim = new Vector2(10, 10);
addScript(new EntityScriptAdapter() {
float damage = 20;
boolean explodeDeath = false;
@Override
public void onUpdate(Entity self, float time, Level level) {
if (!ScriptUtils.isColliding(level, self)) {
level.despawnEntity(self);
}
self.setPos(self.getPos().add(delta.scale(time)));
for (Entity enemy : level.getEntitiesWithType("enemy")) {
if (ScriptUtils.isCollidingRad(self, enemy)) {
level.despawnEntity(self);
enemy.getVariableCase().setVar("health",
enemy.getVariableCase().getFloat("health") - damage + "");
explodeDeath = true;
break;
}
}
}
@Override
public void onDeath(Entity self, Level level, boolean isRoomExit) {
if (explodeDeath)
level.spawnEntity(new Explosion(self.getPos(), AudioProject.shipColor, self.getDim().x, 20));
}
});
setSprite(new AbstractSpriteAdapter() {
@Override
public void draw(Graphics2D g, Entity self) {
g.setColor(AudioProject.shipColor);
g.drawOval((int) self.getPos().x, (int) (self.getPos().y), (int) self.getDim().x, (int) self.getDim().y);
}
});
}
}