public void update(double dt) { CrewUpdateEvent event = new CrewUpdateEvent(dt, this); if (homeShip != null) { FTLGame.instance().getShip(homeShip).EVENT_BUS.post(event); } if (state == CrewStates.WALKING) { pathfinder.update(dt, this); posX = pathfinder.getX(); posY = pathfinder.getY(); if (pathfinder.state == 0) { state = CrewStates.IDLE; } } else if (state == CrewStates.REPAIRING) { AbstractShipSystem system = room.getSystem(); if (system != null) { system.repair(dt, this); if (system.getDamage() == 0) { state = CrewStates.IDLE; } } } else if (state == CrewStates.MANNING) { AbstractShipSystem system = room.getSystem(); if (system.getDamage() > 0) { system.unmann(); state = CrewStates.REPAIRING; } else if (!system.isPowered()) { system.unmann(); state = CrewStates.IDLE; } } else if (state == CrewStates.FIGHTING) { // TODO: Fight } else if (state == CrewStates.IDLE) { AbstractShipSystem system = room.getSystem(); // System.out.println(name + " " + system.isPowered()); if (system != null && system.getDamage() > 0) { state = CrewStates.REPAIRING; } else if (system != null && system.canMann() && !system.isManned() && system.isPowered()) { int stationX = system.getStationX(); int stationY = system.getStationY(); if (stationX + getRoom().getX() == getX() && stationY + getRoom().getY() == getY()) { system.mann(this); state = CrewStates.MANNING; } else { if (!room.getTile(stationX, stationY).getProperties().containsValue("crew")) move(getRoom(), stationX, stationY); } } } }
public void move(Room target, int x, int y) { System.out.println("state " + state); boolean removeFromTile = false; if (this.state != CrewStates.WALKING) { removeFromTile = true; } Tile tile = target.getTile(x, y); if (tile.getProperties().containsValue("crew")) return; Tile targetTile = pathfinder.setPath(this, target, x, y); if (targetTile != null) { if (removeFromTile) { System.out.println("removing"); room.getTile((int) getX() - getRoom().getX(), (int) getY() - getRoom().getY()) .getProperties() .removeProperty("crew"); } if (state == CrewStates.MANNING) { room.getSystem().unmann(); } state = CrewStates.WALKING; } }
public void remove() { if (state == CrewStates.WALKING) { pathfinder.cancel(this); } else { room.getTile((int) getX() - getRoom().getX(), (int) getY() - getRoom().getY()) .getProperties() .removeProperty("crew"); } }
public void move(Room target) { boolean removeFromTile = false; if (this.state != CrewStates.WALKING) { removeFromTile = true; } Tile targetTile = pathfinder.setPath(this, target); if (targetTile != null) { if (removeFromTile) { System.out.println("removing"); room.getTile((int) getX() - getRoom().getX(), (int) getY() - getRoom().getY()) .getProperties() .removeProperty("crew"); } if (state == CrewStates.MANNING) { room.getSystem().unmann(); } state = CrewStates.WALKING; } }
public int getTargetY() { return pathfinder.targetY(); }
public boolean isMoving() { return pathfinder.getState() != pathfinder.IDLE; }