TDD_NPCNonPos - ChristianDominguezVicente/TFM GitHub Wiki
NPC Non Possessable
A continuación, se explicará el script base de los NPC que no se pueden poseer, esta situado en /Assets/Scripts.
Awake
Esta función al iniciar el nivel se activa, donde conseguimos la referencia para algunas variables.
SetDialogue
Esta función sirve para establecer que DialogueData se va a usar.
Posses
Esta función gestiona la lógica de cuando un jugador interactúa con un NPC, dividiendose en dos caminos posibles:
-
Si el NPC está dentro de alguna cinemática y no ha empezado aún ejecutará el método PlayDialogue() en el CinematicDialogue asociado.
-
Si no, se ejecutarán la siguiente lógica que se explicará en los siguientes apartados, empezando por llamar al método SetDialogue() para establecer el siguiente diálogo.
-
NextPhrase: Si ha terminado de escribir la frase y no se ha preguntado nada al jugador, pasará a la siguiente frase.
-
CompletedPhrase: Si se esta escribiendo la frase y el jugador pulsa E/X, completará la frase.
EnablePossession
En primer lugar, desactiva los componentese del jugador, para posteriormente activar los componentes del NPC para que el jugador lo pueda controlar. Por último, cambia el seguimiento de la cámara al NPC.
NextPhrase
Esta función avanza el diálogo al siguiente nodo del guion, pudiendo ser una frase o una pregunta.
- Si el índice está fuera de rango: terminará el diálogo llamando a la función EndDialogue().
- Si se ha conseguido una referencia del blur: se activará el blur mediante la corrutina SetBlur(true).
- Si el nodo es una frase: empezará a escribir la siguiente frase activando la corrutina WritePhrase("con la frase correspondiente").
- Si el nodo es una pregunta: mostrará las respuestas correpondientes a la pregunta, llamando a la función ShowChoices("pregunta").
EndDialogue
Esta función termina del diálogo actual, limpiando el estado interno y restablece todas las variables relacionadas.
WritePhrase
Esta corutina escribe letra por letra una frase en pantalla. Se añadirá la frase al histórico.
- Recorre cada carácter de la frase: Dependiendo si esta activado el modo Skip o no, cambiará la velocidad de escritura.
- Actualiza el índice del diálogo si es una Frase: Pasa a la siguiente frase de la conversación.
CompletedPhrase
Esta función finaliza la escritura de una frase, mostrandola completa de inmediato, avanzando el índice del diálogo. Se añadirá la frase al histórico.
- Si el nodo es una Frase: Habiendo una corutina de escritura activa, se desactivará deteniendo la escritura y actualizando el índice al siguiente nodo.
ShowChoices
Esta función muestra una pregunta con sus respuestas para que el jugador responda, pausando la conversación. Se añadirá la frase al histórico.
SelectCurrentChoice
Esta función maneja la selección de una respuesta del jugador a una pregunta, avanzando al siguiente nodo del diálogo mediante NextPhrase(). Se añadirá la frase al histórico.
- Si el índice está fuera de rango: terminará el diálogo llamando a la función EndDialogue().
- Si es una Cinemática: Se registrará en el histórico si el jugador estaba poseyendo a un NPC o no al responder la pregunta.
- Si no es una Cinemática: Se registrará en el histórico que NPC estaba poseyendo.
AutoTalk
Esta función activa la conversación automática, sin que el jugador tenga que interactuar manualmente.
- Si se activa el modo Auto: Iniciará la corrotina AutoTalkCouroutine().
- Si se desactiva el modo Auto: Detendrá la corrotina AutoTalkCouroutine().
SkipTalk
Esta función activa omitir la conversación, pasará rápidamente el diálogo sin que el jugador haga nada.
- Si se activa el modo Skip: Iniciará la corrotina SkipTalkCouroutine().
- Si se desactiva el modo Skip: Detendrá la corrotina SkipTalkCouroutine().
Update
En esta función, la cual se ejecuta en cada frame, actualizará la rotación del NPC que esta poseyendo el jugador y del NPC con el que interactúa durante una conversación, pero no durante una cinemática.
Por otra parte, si el jugador no esta poseyendo al NPC, si este no esta en su posición original es que está volviendo a ella, por lo que se actualizarán las animación de movimiento mediante el parámetro Speed del Animator. Si ya está en la posición original, se pondrá a 0 el parámetro Speed, ejecutando la animación de Idle.
SetDialogueIndex
Esta función establece un nuevo índice para el diálogo al ser llamada.
StartCinematicDialogue
Esta función inicia un diálogo en una Cinemática, mostrando el diálogo correspondiente, bloqueando al jugador y NPCs durante la Cinemática. Empezará el sistema de diálogo como se explican en las demás funciones al llamar a NextPhrase().
StartListeningDialogue
Esta función inicia el escuchar un diálogo, mostrando el diálogo correspondiente, bloqueando al jugador y NPCs. Se utilizará el ScriptableObject con los diálogos correspondientes a escuchar la conversación. Empezará el sistema de diálogo como se explican en las demás funciones al llamar a NextPhrase().
SetBlur
En cualquier conversación se llamará a esta corrutina, la cual mediante una transición Mathf.Lerp(), se activará o desactivará el blur en la escena, haciendo que el jugador se centre más en los diálogos del juego.
SetTimeBtLetters
Función que permite modificar el tiempo entre letras desde los ajustes del menú.
RemoveBlur
Función que permite remover el blur durante una conversación.