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.PlayerInput; 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.utils.ResourceManager; public class BigConstructor extends BuildingECreator { private Animation[] animations; public BigConstructor(Engine engine, int playerId, int teamId, int networkId) { super(engine, EData.BUILDING_BIG_CONSTRUCTOR, true, playerId, teamId, networkId); SpriteSheet ss = ResourceManager.getSpriteSheet("constructor_"+engine.getPlayer(playerId).getColor()); width = ss.getSprite(0, 0).getWidth() * 2; height = ss.getSprite(0, 0).getHeight() * 2; animations = new Animation[4]; for (int k = 0; k < 4; k++) { animations[k] = new Animation(); animations[k].setLooping(false); for (int i = 0; i < 4; i++) { for (int j = 0; j < 7; j++) { animations[k].addFrame(ss.getSprite(j, i), 50); } } animations[k].addFrame(ss.getSprite(0, 4), 50); animations[k].addFrame(ss.getSprite(1, 4), 50); } calcViewLimit(width / 40, height / 40); } @Override public void setLocation(float x, float y) { super.setLocation(x, y); if (engine.isPlayerEntity(playerId)) engine.getGui().increaseBuildLimit(2, 4); } @Override public int getTargetCursor(ActiveEntity target, int mx, int my) { if (target == null && !engine.getMap().isBlocked(engine.getMouseX()/engine.getTileW(), engine.getMouseY()/engine.getTileH())) return PlayerInput.CURSOR_SPECIAL_ACTION; else return PlayerInput.CURSOR_NO_ACTION; } @Override public void removeBuilding() { if (engine.isPlayerEntity(playerId)) engine.getGui().decreaseBuildLimit(2, 4); engine.removeEntity(this); engine.addEntity(new Explosion(engine, Layer.SECOND_EFFECT, Explosion.BIG, x, y)); } @Override public void renderBuilding(GameContainer container, Graphics g) throws SlickException { for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { g.drawAnimation(animations[i + j], x + i * engine.getTileW(), y + j * engine.getTileH()); } } } @Override public void setPlayerId(int playerId) { if (engine.isPlayerEntity(playerId)) { engine.getGui().increaseBuildLimit(2, 4); } else { if (engine.isPlayerEntity(this.playerId) && this.playerId != playerId) engine.getGui().decreaseBuildLimit(2, 4); } super.setPlayerId(playerId); } }