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 public List dialogueLines = new List(); public bool loopThroughLines; // 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 public List incorrectItemLines = new List(); public bool loopThroughIncorrectLines; public List forbiddenItemLines = new List(); public bool loopThroughForbiddenLines; } }