// 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;
}
}
}