package rts.core.engine.layers.entities.buildings;
import org.newdawn.slick.Animation;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import rts.core.engine.Engine;
import rts.core.engine.layers.Layer;
import rts.core.engine.layers.entities.ActiveEntity;
import rts.core.engine.layers.entities.EData;
import rts.core.engine.layers.entities.effects.Explosion;
import rts.core.engine.layers.entities.vehicles.Mover;
import rts.utils.ResourceManager;
import rts.utils.Timer;
public class Healer extends Building {
private static final int HEAL_TIME = 1000;
private static final int LIFE_BONUS = 5;
private Animation animation;
private Timer timer;
private Mover mover;
public Healer(Engine engine, int playerId, int teamId, int networkId) {
super(engine, EData.BUILDING_HEALER, false, playerId, teamId, networkId);
SpriteSheet ss = ResourceManager.getSpriteSheet("healer_"+engine.getPlayer(playerId).getColor());
width = ss.getSprite(0, 0).getWidth();
height = ss.getSprite(0, 0).getHeight();
animation = new Animation();
for (int i = 0; i < 8; i++) {
animation.addFrame(ss.getSprite(i, 0), 150);
}
timer = new Timer(HEAL_TIME);
calcViewLimit(width / 40, height / 40);
}
@Override
public void removeBuilding() {
if (mover != null) {
mover.cancelHealer();
}
engine.removeEntity(this);
engine.addEntity(new Explosion(engine, Layer.SECOND_EFFECT, Explosion.NORMAL_2, x, y));
}
@Override
public void renderBuilding(GameContainer container, Graphics g) throws SlickException {
g.drawAnimation(animation, x, y);
}
@Override
public void updateEntity(GameContainer container, int delta) throws SlickException {
super.updateEntity(container, delta);
if (engine.isPlayerEntity(playerId)) {
timer.update(delta);
if (timer.isTimeComplete()) {
ActiveEntity ae = engine.getEntityAt(this, (int) x, (int) y);
if (ae != null && this.teamId == ae.getTeamId()) {
ae.addLife(LIFE_BONUS);
}
timer.resetTime();
}
if (mover != null) {
if (!mover.isAlive() || !mover.isGoingToHealer()) {
mover = null;
}
}
}
}
public void reserved(Mover m) {
this.mover = m;
}
public boolean isReserved() {
return mover != null;
}
}