Beispiel #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);
        }
      }
    }
  }
  public void render(SpriteBatch batch, Door door, int shipOffsetX, int shipOffsetY) {
    Texture texture = TextureRegistry.getTexture("doors");

    if (spriteState < 4
        && (door.open || door.forceOpen || (door.getLink() != null && door.getLink().open))) {
      spriteState++;
      if (spriteState > 4) spriteState = 4;
    }
    if (spriteState > 0
        && !(door.open || door.forceOpen || (door.getLink() != null && door.getLink().open))) {
      spriteState--;
      if (spriteState < 0) spriteState = 0;
    }

    int u = spriteState;
    int v = 0;

    v = door.room1.getShip().getSystem("doors").getPower() - 1;

    TextureRegion region = new TextureRegion(texture, u * 35, v * 35, 35, 35);

    int mouseX = Gdx.input.getX() - shipOffsetX;
    int mouseY = (Gdx.graphics.getHeight() - Gdx.input.getY()) - shipOffsetY;

    boolean hover = false;
    int shrinkH = 5;
    int shrinkV = 10;
    float doorAlpha = 0.75f;

    if (FTLGame.instance().getPlayer() != null
        && FTLGame.instance().getPlayer().getName().equals(door.room1.getShip().getName())) {
      if (door.direction == Direction.RIGHT || door.direction == Direction.LEFT)
        if (mouseX > door.getX() * 35 - 35 / 2 + shrinkV
            && mouseX < door.getX() * 35 + 35 / 2 - shrinkV
            && mouseY > door.getY() * 35 + shrinkH
            && mouseY < door.getY() * 35 + 35 - shrinkH) hover = true;
      if (door.direction == Direction.UP || door.direction == Direction.DOWN)
        if (mouseX > door.getX() * 35 + shrinkH
            && mouseX < door.getX() * 35 + 35 - shrinkH
            && mouseY > door.getY() * 35 - 35 / 2 + shrinkV
            && mouseY < door.getY() * 35 + 35 / 2 - shrinkV) hover = true;
    }

    if (FTLView.inputHandler.selected != null) hover = false;

    Texture doorHighlight = TextureRegistry.getTexture("door_highlight");
    if (door.direction == Direction.LEFT) {
      if (hover) {
        batch.setColor(1, 1, 1, doorAlpha);
        batch.draw(
            doorHighlight,
            shipOffsetX + (float) (door.getX() - 0.5) * 35 + 1,
            shipOffsetY + (float) (door.getY()) * 35);
        batch.setColor(1, 1, 1, 1);
      }
      batch.draw(
          region,
          shipOffsetX + (float) (door.getX() - 0.5) * 35 + 1,
          shipOffsetY + (float) (door.getY()) * 35);
    }
    if (door.direction == Direction.RIGHT) {
      if (hover) {
        batch.setColor(1, 1, 1, doorAlpha);
        if (door.getLink() == null)
          batch.draw(
              doorHighlight,
              shipOffsetX + (float) (door.getX() - 0.5) * 35 + 1,
              shipOffsetY + (float) (door.getY()) * 35);
        batch.setColor(1, 1, 1, 1);
      }
      batch.draw(
          region,
          shipOffsetX + (float) (door.getX() - 0.5) * 35 + 1,
          shipOffsetY + (float) (door.getY()) * 35);
    }
    if (door.direction == Direction.DOWN) {
      if (hover) {
        batch.setColor(1, 1, 1, doorAlpha);
        batch.draw(
            new TextureRegion(doorHighlight),
            shipOffsetX + (float) (door.getX()) * 35 - 1,
            shipOffsetY + (float) (door.getY() - 0.5) * 35 + 1,
            36 / 2,
            36 / 2,
            35,
            35,
            1,
            1,
            90);
        batch.setColor(1, 1, 1, 1);
      }
      batch.draw(
          region,
          shipOffsetX + (float) (door.getX()) * 35 - 1,
          shipOffsetY + (float) (door.getY() - 0.5) * 35 + 1,
          36 / 2,
          36 / 2,
          35,
          35,
          1,
          1,
          90);
    }
    if (door.direction == Direction.UP) {
      if (hover) {
        batch.setColor(1, 1, 1, doorAlpha);
        if (door.getLink() == null)
          batch.draw(
              new TextureRegion(doorHighlight),
              shipOffsetX + (float) (door.getX()) * 35 - 1,
              shipOffsetY + (float) (door.getY() - 0.5) * 35 + 1,
              36 / 2,
              36 / 2,
              35,
              35,
              1,
              1,
              90);
        batch.setColor(1, 1, 1, 1);
      }
      batch.draw(
          region,
          shipOffsetX + (float) (door.getX()) * 35 - 1,
          shipOffsetY + (float) (door.getY() - 0.5) * 35 + 1,
          36 / 2,
          36 / 2,
          35,
          35,
          1,
          1,
          90);
    }
  }
Beispiel #3
0
 public void setPlayer(boolean value) {
   if (value == true) FTLGame.instance().setPlayer(this);
   isPlayer = value;
 }