package rts.core.engine.layers.entities.vehicles; import org.luaj.vm2.LuaValue; import org.luawars.LuaJScripting.LuaJGlobal; import rts.core.engine.Engine; import rts.core.engine.PlayerInput; import rts.core.engine.layers.entities.ActiveEntity; import rts.core.engine.layers.entities.EData; import rts.core.engine.layers.entities.buildings.BigHealer; import rts.core.engine.layers.entities.buildings.Builder; import rts.core.engine.layers.entities.buildings.Healer; public class BuilderMover extends Mover { public BuilderMover(Engine engine, int playerId, int teamId, int networkId) { super(engine, EData.MOVER_BUILDER, playerId, teamId, networkId); } @Override protected boolean specialTarget(ActiveEntity target) { if (super.specialTarget(target)) return true; if (target.getPlayerId() == engine.getPlayer().getId() && locationCorrect) { int tx = (int) x / engine.getTileW(); int ty = ((int) y / engine.getTileH()) - 2; boolean ok = true; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { if (engine.getMap().blocked(this, tx + i, ty + j)) { ok = false; break; } } } if (engine.getMap().blocked(this, tx + 1, ty + 2)) { ok = false; } if (ok) { remove(); if (engine.isNetwork()) { engine.getNetworkManager().sendCreateEntity(EData.BUILDING_BUILDER, playerId, teamId, x, y - 40); } else { Builder builder = new Builder(engine, playerId, teamId, networkId); builder.setLocation(x, y - 40); engine.addEntity(builder); } } } return true; } @Override protected void destroy() { // Must be override to stop the call to explosion } @Override public int getTargetCursor(ActiveEntity target, int mx, int my) { if (target != null) { if (engine.getMap().fogOn(mx / engine.getTileW(), my / engine.getTileH())) { return PlayerInput.CURSOR_MOVE; } else { if (engine.isPlayerEntity(target.getPlayerId()) && (target instanceof ITransport || target instanceof Healer || target instanceof BigHealer)) { return PlayerInput.CURSOR_SPECIAL_ACTION; } else { if (target.getPlayerId() == engine.getPlayer().getId() && target == this) { return PlayerInput.CURSOR_SPECIAL_ACTION; } } } } else { if (!engine.getMap().isBlocked(mx / engine.getTileW(), my / engine.getTileH())) return PlayerInput.CURSOR_MOVE; } return PlayerInput.CURSOR_NO_ACTION; } }