GenericMissionSceneStructure.ts
Este archivo define la estructura genérica para manejar misiones. Esta estructura es adaptable a diferentes tipos de misiones, fases, y escenas, permitiendo una gran flexibilidad en la implementación.
Tipos y Estructuras
GenericSceneStructure<Exercise>
Esta estructura representa los detalles persistentes de una escena dentro de una misión.
phase: Exercise: La fase actual de la misión.level: Difficulty: El nivel de dificultad de la misión (puede sereasy,medium,hard).correctQuestions: number: El número de preguntas correctas contestadas en la escena.status: "inprogress" | "success" | "failed": El estado de la escena actual.incorrectInRow: number: Cantidad de respuestas incorrectas consecutivas.totalQuestions: number: El número total de preguntas en la escena.failedScene: boolean: Indica si la escena ha fallado.returnToUnderstanding: boolean: Indica si el jugador debe regresar a una fase anterior.coins: number: Monedas acumuladas en la escena.extraCoins: number: Monedas adicionales obtenidas.time: number: Tiempo transcurrido en la escena.correctInRow: number: Respuestas correctas consecutivas.timesCorrectInRow: number: Número de veces que el jugador ha alcanzado respuestas correctas consecutivas.showCorrectInRowAnimation: boolean: Indica si se debe mostrar la animación de respuestas correctas consecutivas.
ScenePhaseStructure
Esta estructura contiene los detalles de una fase de la misión, incluyendo las escenas y las instrucciones.
getGeneralInstruction?: (toggleInstructions: () => void) => React.ReactNode: Función opcional para obtener instrucciones generales.scenes: React.FC[]: Un array de componentes de escena.forcedIndex?: number: Un índice forzado para mostrar una escena específica.
GenericMissionSceneStructure
Define la estructura de la misión completa, agrupando las diferentes fases que la pueden componener.
- Fases disponibles (
Exercise):DIAGNOSTICPREVIOUS_KNOWLEDGEOBSERVATIONUNDERSTANDINGATTACHMENTEXPERIMENTAPPLICATION
MissionState<Exercise, MissionStructure>
El estado general de la misión.
isLoadingMissionData: boolean: Indica si los datos de la misión están cargando.missionId?: string: El ID de la misión.missionNameKey?: string: El nombre clave de la misión.planetNameKey?: string: El nombre clave del planeta.worldNameKey?: string: El nombre clave del mundo.missionName?: string: Nombre de la misión.currentPhase: Exercise: Fase actual de la misión.currentSceneIndex: number: Índice de la escena actual.showGeneralInstruction: boolean: Indica si se muestran las instrucciones generales.showSummary: boolean: Indica si se muestra el resumen de la misión.showSummaryResults: boolean: Indica si se muestran los resultados del resumen.showRouteCalculation: boolean: Indica si se está calculando la ruta de la misión.missionFinished: boolean: Indica si la misión ha terminado.visitedScenesIndexes: number[]: Índices de las escenas visitadas.sceneHistorical: GenericSceneStructure<Exercise>[]: Historial de escenas.scene: GenericSceneStructure<Exercise>: Detalles de la escena actual.missionConfig: MissionStructure: Configuración de la misión.levelConfig?: { easy: number; medium: number; hard: number }: Configuración de los niveles de dificultad.simulatedLevelSummary?: { wrong: number; correct: number; total: number; totalCoins: number }: Resumen simulado de los niveles.
Funciones Auxiliares
getSceneInitialState(phase: Exercise = Exercise.DIAGNOSTIC)
Inicializa el estado de una escena basada en una fase particular de la misión.
const getSceneInitialState = (phase: Exercise = Exercise.DIAGNOSTIC): GenericSceneStructure<Exercise> => ({
// Valores iniciales
phase: phase,
level: Difficulty.EASY,
coins: 0,
time: 0,
correctInRow: 0,
correctQuestions: 0,
incorrectInRow: 0,
totalQuestions: 0,
failedScene: false,
returnToUnderstanding: false,
status: "inprogress",
extraCoins: 0,
timesCorrectInRow: 0,
showCorrectInRowAnimation: false,
});