Files
AppleHillsProduction/Assets/Scripts/Dialogue/RuntimeDialogueGraph.cs
2025-10-27 16:06:47 +01:00

67 lines
2.1 KiB
C#

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<RuntimeDialogueNode> allNodes = new List<RuntimeDialogueNode>();
// 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<string> dialogueLines = new List<string>();
public bool loopThroughLines;
// New mixed content field that supports both text and images
public List<DialogueContent> dialogueContent = new List<DialogueContent>();
// Conditional nodes
public string puzzleStepID; // For WaitOnPuzzleStep
public string pickupItemID; // For WaitOnPickup
public string slotItemID; // For WaitOnSlot
public string combinationResultItemID; // For WaitOnCombination
// Auto-play dialogue when condition is met (for item-related nodes)
public bool shouldAutoPlay;
// For WaitOnSlot - different responses
[HideInInspector]
public List<string> incorrectItemLines = new List<string>();
public bool loopThroughIncorrectLines;
public List<DialogueContent> incorrectItemContent = new List<DialogueContent>();
[HideInInspector]
public List<string> forbiddenItemLines = new List<string>();
public bool loopThroughForbiddenLines;
public List<DialogueContent> forbiddenItemContent = new List<DialogueContent>();
}
}