Desprende y Ataca

Código para desprenderse de la formación y atacar al azar.

Comienzo con la enumeración «enum» de los posibles estados del objeto. Esto sigue aumentando dependiendo de la función necesaria.

public enum EnemyState {
    BERTHING,        // Comenzando.
    BERTHING_ANGLE,  // Moviéndose al ángulo.
    BERTHING_RADIUS, // Moviéndose al radio.
    BERTH,           // Está anclado.
    DROPPING,        // Bajando a la siguiente posición.
    ATTACKING,
    FLEEING,
    FLED
}

«Dropping» lo uso para mover el objeto cuando el espacio de abajo está disponible con este código:

if (berth.column != 0) {
  Berth lowerBerth = spacedock.berth[berth.row][berth.column - 1];
  if (!lowerBerth.reserved) {
    lowerBerth.reserved = true;
    berth.reserved = false;
    berth = lowerBerth;
    state = EnemyState.DROPPING;
   }
 }

130: Si no estoy en el ultimo espacio, busco el espacio de abajo en la linea 131.
132: Verifica si ese espacio de abajo esta ocupado. Si está libre, desocupo el actual y ocupo el nuevo en las lineas 133-134.

Esto hace que todos los objetos que ocupan esa columna bajen en el momento que un espacio mas bajo se hace disponible.

Desprende y ataca.

El estado de «Attacking» puede ocurrir de dos maneras. Un enemigo puede comenzar atacando («Berthing» -> «Attacking») o puede cambiar de anclado a atacar («Berth» -> «Attacking»).

Para comenzar el ataque solo llamo el método de attack() del objeto:

public void attack() {
  if (berth != null) berth.reserved = false;
  state = EnemyState.ATTACKING;
  attackRadius = spacedock.attackRadius;
  attackAngle = normalizeAngle(MathUtils.random(MathUtils.PI2));
}

205: Aseguro cancelar la reserva del espacio en la formación.
207: «AttackRadius» es más bajo o cercano al jugador que todos los espacios en la formación.
208: El ángulo de ataque se escoge al azar alrededor del planeta.

Y así se ve:

Únete a otros 35 suscriptores

Deja una respuesta

Anuncios


Anuncios