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);
        }
      }
    }
  }
Esempio n. 2
0
  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;
    }
  }
Esempio n. 3
0
 public void remove() {
   if (state == CrewStates.WALKING) {
     pathfinder.cancel(this);
   } else {
     room.getTile((int) getX() - getRoom().getX(), (int) getY() - getRoom().getY())
         .getProperties()
         .removeProperty("crew");
   }
 }
Esempio n. 4
0
  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;
    }
  }
Esempio n. 5
0
 public int getTargetY() {
   return pathfinder.targetY();
 }
Esempio n. 6
0
 public boolean isMoving() {
   return pathfinder.getState() != pathfinder.IDLE;
 }