TDD_DA - ChristianDominguezVicente/TFM GitHub Wiki

Diseño Arquitectónico

En este juego, la clase principal es ThirdPersonController, la cual se relaciona con la mayoría de las otras clases, siendo la clase que llevará el jugador en todo momento. Principalmente, se relaciona con NPCPossessable y NPCNonPossessable, en una relación 1 a 0..1, debido a que solamente puede poseer/interactuar con _NPC _a la vez, tanto para poseerlo, escucharlo o hablar con él.

Por otra parte, esta clase siempre va acompañada de BasicRigidBodyPush, la cual controla la física del personaje, y StarterAssetsInput, el cual gestiona el sistema de Inputs. Estas dos clases se relacionan con ThirdPersonController en 1 a 1, debido a que se necesitan para funcionar correctamente. InputDetector detecta los Inputs de StarterAssetsInput, para cambiar dinámicamente la UI dependiendo de si está usando gamepad o teclado y ratón, siendo una relación 1 a 1.

Para gestionar el sistema de posesión de este juego, se utiliza la clase PossessionManager, la cual dependiendo de si el jugador está poseyendo a un NPC, notificará a las otras clases relacionadas que ya está poseyéndolo. En el caso de PlayerInteractUI y PlayerListenUI, dependiendo si está poseyendo o no un NPC el jugador, mostrará una UI diferente, en una relación 1 a 1.

Respecto a la clase HintManager, es el sistema que da pistas al jugador de cómo resolver los puzles del nivel. Este se comunicará con más clases, como PossessionManager, pausando el tiempo de posesión si el jugador está poseyendo un NPC mientras está recibiendo las pistas, siendo una relación 1 a 1.

En el caso de ChoiceUI, es la clase que muestra por pantalla las diferentes Responses que el jugador puede dar, tanto a un NPCPossessable/NPCNonPossessable como al HintManager, representado por el personaje Emnesis, siendo casi todas sus relaciones 0..1 a 0..*, ya que puede haber preguntas o no dependiendo del nivel.

Los diálogos se estructuran en un ScriptableObject llamado DialogueData, el cual estará relacionado con el HintManager y NPCPossessable/NPCNonPossessable. Necesitando 1 y 2 respectivamente para sus correspondientes diálogos. Por otra parte, DialogueData se compone de DialogueNodes, que a su vez de este hay dos clases que heredan, DialoguePhrase y DialogueQuestion, componiéndose este último de Responses.

DialogueHistory es la clase que gestiona el histórico de conversación que ha tenido el jugador con HintManager y NPCPossessable/NPCNonPossessable.

Por último, un jugador puede activar entrando TriggerCinematic un CinematicDialogue con NPCPossessable/NPCNonPossessable. Este CinematicDialogue está compuesto de DialogueEntry. También, el jugador podrá interactuar con ObjectInteractuables y Stairs, siendo ObjectInteractuables los distintos objetos que hay repartidos por él nivel para resolver el puzle, y Stairs un trigger para poder acceder a la parte de arriba de la casa en la que se sitúa el juego.

Diseño Arquitectónico

Figura 1: Modelo de Dominio (Diagrama de Clases)