package rts.core.engine.layers.entities.others; import org.newdawn.slick.Color; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Image; import org.newdawn.slick.SlickException; import rts.core.engine.Engine; import rts.core.engine.layers.Layer; import rts.core.engine.layers.entities.ActiveEntity; import rts.core.engine.layers.entities.BasicEntity; import rts.utils.ResourceManager; import rts.utils.Timer; public class BridgeReparator extends BasicEntity { private static final int REPAIR_INTERVAL = 50; private Image image; private Bridge bridge; private Timer timer; private boolean renderRepair; private int advancement; public BridgeReparator(Engine engine, Bridge bridge, int x, int y) { super(engine, Layer.FIRST_EFFECT); this.x = x; this.y = y; this.bridge = bridge; this.image = ResourceManager.getSpriteSheet("constructor").getSprite(1, 4); this.timer = new Timer(REPAIR_INTERVAL); } @Override public void render(GameContainer container, Graphics g) throws SlickException { g.drawImage(image, x, y); if (renderRepair) { g.setColor(Color.blue); g.fillRect(x, y - 10, (advancement * 20) / bridge.getMaxLife(), 4); g.setColor(Color.black); g.drawRect(x, y - 10, 20, 4); } } @Override public void update(GameContainer container, int delta) throws SlickException { if (bridge.isDestroy()) { ActiveEntity ae = engine.getEntityAt(null, x, y); if (ae != null) { renderRepair = true; timer.update(delta); if (timer.isTimeComplete()) { advancement++; if (advancement >= bridge.getMaxLife()) bridge.addLife(bridge.getMaxLife()); timer.resetTime(); } } else { advancement = 0; renderRepair = false; } } else renderRepair = false; } public void reset() { advancement = 0; } }