Easy Chapter Generator
EnglishEspañol

Observar la API sin modificarla

DebugDemo es un patrón de desarrollo para registrar Ready, ID actuales, transición y fallo tipado. Permite distinguir entre «la señal externa no llegó» y «se rechazó por ID o momento incorrecto».

El observador no debe completar, seleccionar ni cargar desde sus receptores de eventos. Así el diagnóstico no cambia el problema.

Señales y propiedades

OrigenRegistrarInterpretación
OnManagerReadyID y estados actualesSelección inicial intentada
ObjectiveCompletedChapter e índiceAntes de acciones finales
ChapterFailedChapter, Objective y ReasonFallo aceptado
OnBeforeSceneLoadIsTransitioningCarga aceptada inminente
Lectura puntualFlags e IDEstado, no historial

Utilizar el observador en una integración

  1. 1
    Añádelo a un GameObject exclusivo de Demo/desarrollo.
  2. 2
    Ejecuta la acción externa y registra el estado antes de recibir su notificación.
  3. 3
    Comprueba el resultado; si es false, compara ID esperado y actual.
  4. 4
    Prueba una repetición y una descarga de escena sin listeners duplicados.
  5. 5
    Desactiva el diagnóstico en producción.

Límites del diagnóstico

  • El log no prueba que las físicas o el complemento emitan; instrumenta también el origen.
  • La restauración no produce historial.
  • OnBeforeSceneLoad no incluye el destino.
  • OnCompleted puede observar la fila siguiente.
  • Registrar cada frame altera medidas y genera asignaciones.

El ejemplo compilado inferior muestra una suscripción limpia solo con API pública.

Crear un observador de diagnóstico con la API pública

Dónde colocarlo
Utilízalo únicamente en un GameObject de diagnóstico de la Demo o de desarrollo y exclúyelo de la distribución si no es necesario.
Cuándo llamarlo
Registra el estado Ready del Manager, las transiciones aceptadas y los fallos mientras el componente está habilitado.
Comportamiento
El observador nunca cambia la progresión. Registrar todos los eventos puede generar demasiado contenido y debe permanecer desactivado en una compilación final.
using System;
using System.Collections;
using System.Collections.Generic;
using OverFuture.ChapterObjectiveSystem.Chapters;
using OverFuture.ChapterObjectiveSystem.Events;
using OverFuture.ChapterObjectiveSystem.Objectives;
using OverFuture.ChapterObjectiveSystem.Persistence;
using OverFuture.ChapterObjectiveSystem.Progression;
using UnityEngine;

public sealed class DebugDemoObserverExample : MonoBehaviour
{
    private ChapterManager manager;

    private void OnEnable()
    {
        manager = ChapterManager.Instance;
        if (manager == null)
        {
            return;
        }

        manager.OnManagerReady.AddListener(LogState);
        manager.OnBeforeSceneLoad.AddListener(LogState);
        manager.ChapterFailed += LogFailure;
    }

    private void OnDisable()
    {
        if (manager == null)
        {
            return;
        }

        manager.OnManagerReady.RemoveListener(LogState);
        manager.OnBeforeSceneLoad.RemoveListener(LogState);
        manager.ChapterFailed -= LogFailure;
        manager = null;
    }

    private void LogState()
    {
        if (manager != null)
        {
            Debug.Log(
                $"Chapter={manager.CurrentChapterId}, " +
                $"Objective={manager.CurrentObjectiveId}, " +
                $"Transitioning={manager.IsTransitioning}",
                this);
        }
    }

    private void LogFailure(ChapterFailureInfo information)
    {
        Debug.Log($"Failure: {information.Reason}", this);
    }
}