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.Image;
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.EData;
import rts.core.engine.layers.entities.effects.Explosion;
import rts.core.network.ig_udp_containers.EntityState;
import rts.utils.ResourceManager;
public class Builder extends Building {
private Animation construct;
private Animation normal;
private Image destroy;
private int moneyState; // Max 6 [0 - 6]
public Builder(Engine engine, int playerId, int teamId, int networkId) {
super(engine, EData.BUILDING_BUILDER, true, playerId, teamId, networkId);
SpriteSheet ss = ResourceManager.getSpriteSheet("builder_"+engine.getPlayer(playerId).getColor());
width = ss.getSprite(0, 0).getWidth();
height = ss.getSprite(0, 0).getHeight();
construct = new Animation();
construct.setLooping(false);
normal = new Animation(false);
normal.setLooping(false);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 8; j++) {
construct.addFrame(ss.getSprite(j, i), 150);
}
}
for (int i = 0; i < 8; i++) {
if (i > 2) {
normal.addFrame(ss.getSprite(i, 3), 150);
} else {
construct.addFrame(ss.getSprite(i, 3), 150);
}
}
normal.addFrame(ss.getSprite(0, 4), 150);
normal.addFrame(ss.getSprite(1, 4), 150);
destroy = ss.getSprite(2, 4);
calcViewLimit(width / 40, height / 40);
}
@Override
public void updateEntity(GameContainer container, int delta) throws SlickException {
super.updateEntity(container, delta);
if (engine.isPlayerEntity(playerId)) {
// Set the state money
if (engine.getPlayer().getMoney() >= engine.getPlayer().getMaxMoney())
moneyState = 6;
else
moneyState = (int) ((engine.getPlayer().getMoney() * 6) / engine.getPlayer().getMaxMoney());
}
}
@Override
public void setLocation(float x, float y) {
super.setLocation(x, y);
if (engine.isPlayerEntity(playerId)) {
engine.getGui().addEntityToBuildingList(type);
engine.getGui().increaseBuildLimit(0, 1);
engine.getGui().increaseBuildLimit(1, 1);
}
}
@Override
public void removeBuilding() {
if (engine.isPlayerEntity(playerId)) {
engine.getGui().decreaseBuildLimit(0, 1);
engine.getGui().decreaseBuildLimit(1, 1);
}
engine.removeEntity(this);
engine.addEntity(new Explosion(engine, Layer.SECOND_EFFECT, Explosion.BIG, x, y));
}
@Override
public void setPlayerId(int playerId) {
if (engine.isPlayerEntity(playerId)) {
engine.getGui().addEntityToBuildingList(type);
engine.getGui().increaseBuildLimit(0, 1);
engine.getGui().increaseBuildLimit(1, 1);
} else {
if (engine.isPlayerEntity(this.playerId) && this.playerId != playerId) {
engine.getGui().decreaseBuildLimit(0, 1);
engine.getGui().decreaseBuildLimit(1, 1);
engine.getGui().removeEntityFromBuildingList(type);
}
}
super.setPlayerId(playerId);
}
@Override
public void renderBuilding(GameContainer container, Graphics g) throws SlickException {
if (weak || dying) {
g.drawImage(destroy, x, y);
} else {
if (construct.isStopped()) {
g.drawImage(normal.getImage(moneyState), x, y);
} else
g.drawAnimation(construct, x, y);
}
}
@Override
public EntityState getState() {
state.moneyState = moneyState;
return super.getState();
}
@Override
public void setState(EntityState state) {
super.setState(state);
this.moneyState = state.moneyState;
}
}