Drone.java

Codificar esto fue divertido y sorprendente la diferencia y ventaja que hace tener dos drones ayudando.

La clase Player.java solo maneja diferentes tipos de naves y cada nave debe manejar los drones a su manera. El objeto Drone.java se inicia en la clase Player.java.

public final static int TOTAL_DRONES = 2;
private final Array<Drone> drones = new Array<>(false, TOTAL_DRONES);

También se encarga de dibujar los drones junto con la nave que este activa pero actualizar o manejar cada drone le toca a cada nave individual.

  @Override
  public void draw(Batch batch, float parentAlpha) {
    activeShip.draw(batch);
    for (Drone drone : drones) drone.draw(batch);
    }

Cada nave recibe los drones en su constructor y es responsable de manejarlos.

orbitingShip = new OrbitingShip(projectilePool, drones);
travelingShip = new TravelingShip(this, gameMap, drones);

OrbitingShip.java

 private static final float DRONE_RADIUS = 30;
 private static final float DRONE_ANGLE = .04f;
    private void dronesAct(float delta) {
      float currentDroneAngle = DRONE_ANGLE;
      for (int i = 0; i < drones.size; i++) {
        Drone drone = drones.get(i);
        drone.r = r;
        drone.destiny.set(
          (radius - radiusFlux - DRONE_RADIUS) * MathUtils.cos(currentAngle + currentDroneAngle),
          (radius - radiusFlux - DRONE_RADIUS) * MathUtils.sin(currentAngle + currentDroneAngle));
        currentDroneAngle = -DRONE_ANGLE;
        drone.act(delta);
      }
    }

Este código solo funciona por el límite de 2 drones. La variable currentDroneAngle empieza en 0.04f ángulos radianes para el primer drone y en la línea 105 lo cambia a negativo (-0.04f) para acomodarlos de manera paralela.

TravelingShip.java

    float offset = -30;

    for (int i = 0; i < drones.size; i++) {
      float droneX = getCenterX() + tmpB.x * offset;
      float droneY = getCenterY() + tmpB.y * offset;
      Drone drone = drones.get(i);
      drone.destiny.set(droneX, droneY);
      drone.r = r;
      drone.act(delta);
    }

Esta nave acomoda cada drone en columna adelante mientras navega. El movimiento no es instantáneo y detecta cuando está llegando a su destino para regresar los drones a la posición lista para OrbitingShip.

Y así se ve:

Únete a otros 35 suscriptores

Deja una respuesta

Anuncios


Anuncios