using UnityEngine; using OctoCore.Save.Data; namespace OctoCore.Dialogue { /// /// Condition for dialogue choices. /// Supports OctoDataBool, OctoDataInt, and OctoDataFloat. /// [System.Serializable] public class OctoDialogueCondition { /// /// Source data to evaluate (OctoDataBool, OctoDataInt, or OctoDataFloat). /// [Tooltip("Source data to evaluate")] public OctoData Source; /// /// Operation to perform. /// [Tooltip("Operation to perform")] public OctoDialogueOperation Operation = OctoDialogueOperation.Equal; /// /// Value to compare against. /// For bool: 0 = false, 1 = true /// For int/float: direct comparison /// [Tooltip("Value to compare against (bool: 0=false, 1=true)")] public float Value; /// /// Evaluate if the condition is met. /// public bool Evaluate() { if (Source == null) return true; // No condition = always true float sourceValue = GetSourceValue(); switch (Operation) { case OctoDialogueOperation.Equal: return Mathf.Approximately(sourceValue, Value); case OctoDialogueOperation.NotEqual: return !Mathf.Approximately(sourceValue, Value); case OctoDialogueOperation.GreaterThan: return sourceValue > Value; case OctoDialogueOperation.GreaterOrEqual: return sourceValue >= Value; case OctoDialogueOperation.LessThan: return sourceValue < Value; case OctoDialogueOperation.LessOrEqual: return sourceValue <= Value; default: return true; } } private float GetSourceValue() { if (!OctoCore.Instance) return 0f; if (Source is OctoDataBool dataBool) { return OctoCore.Instance.Save.Get(dataBool) ? 1f : 0f; } else if (Source is OctoDataInt dataInt) { return OctoCore.Instance.Save.Get(dataInt); } else if (Source is OctoDataFloat dataFloat) { return OctoCore.Instance.Save.Get(dataFloat); } Debug.LogWarning("[OctoDialogueCondition] Unsupported data type: " + Source.GetType().Name); return 0f; } } }