Sistema de colisiones y sonidos en pasillos - xAlstrat/RPGForBlindness GitHub Wiki

Sistema de colisiones y sonidos de choque en pasillos

1. Collisiones

Cada vez que el jugador colisiona con una entidad del pasillo, un trigger debe cambiar el estado del juego, emitiendo un sonido, resetéando la partida, pasando al siguiente nivel, entrando al modo de batalle, etc. Todo esto es modelado utilizando una única clase RoomEntity.

RoomEntity define una interfaz de respuesta cuando el jugador colisiona con ella y una marca de eliminación para saber si la entidad debe ser removida o no cuando ésta interactue con el usuario.

EL juego contiene entidades que únicamente emiten sonidos, y otras entidades que además de esto, cambian el estado del juego. Todas extienden de SignalEntity que define una entidad indestructible que emite sonidos.

De estas últimas hay 5 tipos:

  • MonsterEntity: Destructible
  • DoorEntity: Indestructible.
  • GeometricEntity: Destructible.
  • TrapEntity: Indestructible.
  • TreasureEntity: Destructible.

Cada una de estas entidades es asociada automáticamente a las casillas del pasillo según lo indique LevelData en la información de cada nivel. Ver Creación de Niveles.

El tablero al iniciarse, crea automáticamente una entidad para cada objeto del juego, excluyendo murallas y pasillos comunes.

CollisionManager se encarga de activar los triggers de cada entidad cuando el jugador colisiona con uno de ellos. Además se encarga de eliminar dichas entidades del Room.

Los triggers de cada entidad se definen en la función handleCollision() de la entidad. EJ: TrapEntity.handleCollision() que se activa cuando un jugador toca una trampa.

Modo de uso:

Como la vida de las entidades es manejada por el CollisionManager, solo debemos especificar el cambio específico que realizará una entidad, si debe ser destruida o no al colisionar y el sonido que emitirá.

En este ejemplo, al chocar con un monstruo, este trasladará al jugador a otra escena:

public class TreasureEntity : SignalEntity
{
protected void Awake(){
	source  = "crashTreasure"; //Sonido en Resources/Sounds
}

public override void handleCollision(){
	base.handleCollision (); //For playing the sound
	Debug.Log("treasure collision");
}

public override bool destroyable(){
	return true; //It should be destroyed if triggers.
}
}