TDD_DM - ChristianDominguezVicente/TFM GitHub Wiki
Diagrama Modular
En este apartado se describirán los módulos más importantes del sistema, en los cuales se darán ejemplos de algunas tareas que pueden realizar estos módulos mediante diagramas de secuencia.
En primer lugar, el módulo más importante del sistema es el ThirdPersonController, prácticamente todo lo del juego se relaciona con el jugador. Uno de los mejores ejemplos de cómo funciona este módulo es por ejemplo cuando el jugador interactúa con varios GameObjects:
Figura 1: Interactuar (Diagrama de Secuencia)
En esta tarea se puede ver los diferentes caminos y comprobaciones que hace ThirdPersonController antes de poder interactuar con un GameObject. En primer lugar, estará detectando en el método Update() si se pulsa el input asociado a Interact en StarterAssetsInputs. Si es así continuará a las siguientes comprobaciones:
- Si el jugador ya estuviera en una cinemática, habrá dos opciones. Al estar en una cinemática, el diálogo estará activado,
- La primera opción responder a una pregunta o más concretamente la función SelectCurrentChoice() del NPCPossessable/NPCNonPossessable correspondiente.
- Si es una frase, pasará a la siguiente frase mediante NextPhrase() una vez escrita completamente la frase, o completará la frase que se está escribiendo lentamente mediante la función CompletedPhrase().
- Si el jugador está pidiendo una pista, pasará la misma situación que con las frases:
- Al ser una frase, pasará a la siguiente frase mediante NextPhrase() una vez escrita completamente la frase, o completará la frase que se está escribiendo lentamente mediante la función CompletedPhrase().
- Si no está ni en una cinemática ni está pidiendo una pista el jugador, interactúa con un ObjetoInteractuable con su correspondiente acción asociada en la función Interact(), o con un NPCPossessable, el cual tendrá tres caminos posibles a través de la función Possess():
- Si el jugador no está poseyendo a un NPCPossessable, registrará en el PossessionManager que NPCPossessable está poseyendo a través de StartPossession(this, maxPossessTime). Se activará la posesión a través de EnablePossession() en el NPCPossessable correspondiente desde el PossessionManager.
- Al ser una frase, pasará a la siguiente frase mediante NextPhrase() una vez escrita completamente la frase, o completará la frase que se está escribiendo lentamente mediante la función CompletedPhrase().
- En el caso de los NPCNonPossessable, pasará a la siguiente frase mediante NextPhrase() una vez escrita completamente la frase, o completará la frase que se está escribiendo lentamente mediante la función CompletedPhrase().
Dentro del módulo ThirdPersonController, también se relaciona con DialogueHistory, el cual es el histórico de conversaciones que guarda el jugador cuando activa el sistema de diálogo tanto con un NPCPossessable/NPCNonPossessable o el HintManager, por lo que se va a explicar la tarea de cómo se activa el histórico para mostrar cómo funciona DialogueHistory:
Figura 2: History (Diagrama de Secuencia)
En esta tarea se puede ver los diferentes caminos y comprobaciones que hace ThirdPersonController antes de activar el histórico. En primer lugar, estará detectando en el método Update() si se pulsa el input asociado a History en StarterAssetsInputs.
Después de esto, habrá varias comprobaciones para diferentes situaciones dependiendo de si el jugador está en una Cinemática, pidiendo una pista o en una conversación normal, pedirá a DialogueHistory mediante GetHistory() todos los diálogos que ha tenido el jugador y mostrarlo en pantalla.
En ThirdPersonController, otra de las relaciones importantes es el modo de diálogo automático o skipeable, el cual se puede relacionar con NPCPossessable/NPCNonPossessable,, CinematicDialogue y HintManager. En este caso se hará un diagrama de secuencia sobre el modo automático, siendo muy parecido al modo skip:
Figura 3: Auto (Diagrama de Secuencia)
En esta tarea se puede ver los diferentes caminos y comprobaciones que hace ThirdPersonController antes de activar el modo automático. En primer lugar, estará detectando en el método Update() si se pulsa el input asociado a Auto en StarterAssetsInputs.
Posteriormente, independientemente del modo en el que este el jugador, activará siempre un método llamado Autotalk(), activando una corrutina llamada AutoTalkCoroutine() que irá reproduciendo la conversación automáticamente.
Otra de las tareas que se realiza en ThirdPersonController, es cuando se actualizan los inputs relacionados con la UI mediante ChoicesUI, como a la hora de seleccionar una respuesta:
Figura 4: UI_Move (Diagrama de Secuencia)
En este caso, se puede ver los diferentes caminos y comprobaciones que hace ThirdPersonController antes de activar el histórico. En primer lugar, estará detectando en el método Update() si se pulsa el input asociado a UI_Move en StarterAssetsInputs.
Después de esto, habrá varias comprobaciones para diferentes situaciones dependiendo de si el jugador está en una Cinemática, pidiendo una pista o respondiendo una pregunta, detectando los inputs correspondientes para pasar a la siguiente respuesta mediante MoveSelection(direction), actualizándolo en UI mediante UpdatePanel().