Easy Chapter Generator
EnglishEspañol

Caso práctico: esperar el final de un diálogo

Objetivo: avanzar solo cuando un sistema externo confirme que la conversación ha terminado. Mantén la API del proveedor en un puente del proyecto. Al recibir la notificación definitiva, exige un objetivo activo, compara el ID esperado y llama a TryCompleteObjective.

  1. 1
    Crea una fila para la conversación y conserva su ID.
  2. 2
    Inicia el diálogo desde On Objective Start.
  3. 3
    Cuando llegue la confirmación definitiva —no al iniciar una línea ni al cerrar un efecto visual— llama al puente.
  4. 4
    Muestra el resultado de progresión solo si devuelve true y elimina la suscripción al deshabilitar.

Variante: si el sistema expone un UnityEvent sin parámetros, enlázalo a Objective.CompleteFromEvent.

Caso práctico: liberar la espera de una animación

Activa Wait For External Animation. Inicia la animación desde el momento anterior y llama una vez a Chapter.SignalExternalAnimationCompleted() desde el último Animation Event. La señal libera las acciones de inicio; no completa la fila. El Chapter consume el indicador y detiene la espera si la fila se completa por otra vía.

Variantes y límites

La confirmación llega cuando ya hay otra fila

La comparación de ID devuelve false y protege la nueva posición.

La animación señala demasiado pronto

Puede liberar otra espera; emite desde la animación asociada a la fila actual.

Skip y finalización emiten dos avisos

Unifícalos en el puente y reenvía solo el resultado definitivo.

Hay varias condiciones simultáneas

Usa ramas de MultiActionObjective; si son tareas consecutivas, crea filas separadas.

Los ejemplos compilados no dependen de ninguna marca de diálogo o animación.

Completar desde un sistema de diálogo externo

Dónde colocarlo
Mantén este puente en el ensamblado de integración de diálogos del proyecto, no en el núcleo de Easy Chapter Generator.
Cuándo llamarlo
Llama a NotifyDialogueFinished desde la notificación que confirme el final del diálogo.
Comportamiento
El puente necesita el ID exacto del objetivo esperado y no depende de la API de ningún proveedor de diálogos.
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 DialogueIntegrationExample : MonoBehaviour
{
    public bool NotifyDialogueFinished(string expectedObjectiveId)
    {
        ChapterManager manager = ChapterManager.Instance;
        Chapter chapter = manager != null ? manager.CurrentChapter : null;
        return chapter != null && manager.HasActiveObjective &&
               string.Equals(
                   manager.CurrentObjectiveId,
                   expectedObjectiveId,
                   StringComparison.Ordinal) &&
               chapter.TryCompleteObjective(expectedObjectiveId);
    }
}

Liberar la espera de una animación externa

Dónde colocarlo
Coloca este puente en el controlador del Animator o en el receptor del Animation Event.
Cuándo llamarlo
Llama una sola vez a NotifyAnimationFinished cuando termine la animación externa configurada.
Comportamiento
La señal libera la espera del Chapter actual; no completa el objetivo y no tiene efecto si no existe un objetivo activo.
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 ExternalAnimationGateExample : MonoBehaviour
{
    public bool NotifyAnimationFinished()
    {
        ChapterManager manager = ChapterManager.Instance;
        Chapter chapter = manager != null ? manager.CurrentChapter : null;
        if (chapter == null || !manager.HasActiveObjective)
        {
            return false;
        }

        chapter.SignalExternalAnimationCompleted();
        return true;
    }
}