using System; using System.Collections.Generic; using UnityEngine; namespace Dialogue { [Serializable] public enum RuntimeDialogueNodeType { Dialogue, WaitOnPuzzleStep, WaitOnPickup, WaitOnSlot, WaitOnCombination, End } [Serializable] public class RuntimeDialogueGraph : ScriptableObject { public string entryNodeID; public string speakerName; public List allNodes = new List(); // Helper method to find a node by ID public RuntimeDialogueNode GetNodeByID(string id) { return allNodes.Find(n => n.nodeID == id); } } [Serializable] public class RuntimeDialogueNode { public string nodeID; public RuntimeDialogueNodeType nodeType; public string nextNodeID; // Basic dialogue - legacy text-only field [HideInInspector] public List dialogueLines = new List(); public bool loopThroughLines; // New mixed content field that supports both text and images public List dialogueContent = new List(); // Conditional nodes public string puzzleStepID; // For WaitOnPuzzleStep public string pickupItemID; // For WaitOnPickup public string slotItemID; // For WaitOnSlot public string combinationResultItemID; // For WaitOnCombination // For WaitOnSlot - different responses [HideInInspector] public List incorrectItemLines = new List(); public bool loopThroughIncorrectLines; public List incorrectItemContent = new List(); [HideInInspector] public List forbiddenItemLines = new List(); public bool loopThroughForbiddenLines; public List forbiddenItemContent = new List(); } }