// This code is part of the Fungus library (https://github.com/snozbot/fungus) // It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) using UnityEngine; using System.Collections.Generic; using System; namespace Fungus { /// /// Storage for a collection of fungus variables that can then be accessed globally. /// public class GlobalVariables : MonoBehaviour { private Flowchart holder; Dictionary variables = new Dictionary(); void Awake() { holder = new GameObject("GlobalVariables").AddComponent(); holder.transform.parent = transform; } public Variable GetVariable(string variableKey) { Variable v = null; variables.TryGetValue(variableKey, out v); return v; } public VariableBase GetOrAddVariable(string variableKey, T defaultvalue, Type type) { Variable v = null; VariableBase vAsT = null; var res = variables.TryGetValue(variableKey, out v); if(res && v != null) { vAsT = v as VariableBase; if (vAsT != null) { return vAsT; } else { Debug.LogError("A fungus variable of name " + variableKey + " already exists, but of a different type"); } } else { //create the variable vAsT = holder.gameObject.AddComponent(type) as VariableBase; vAsT.Value = defaultvalue; vAsT.Key = variableKey; vAsT.Scope = VariableScope.Public; variables[variableKey] = vAsT; holder.Variables.Add(vAsT); } return vAsT; } } }