Esempio n. 1
0
  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);
        }
      }
    }
  }