An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB

// 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
{
/// <summary>
/// Storage for a collection of fungus variables that can then be accessed globally.
/// </summary>
public class GlobalVariables : MonoBehaviour
{
private Flowchart holder;
Dictionary<string, Variable> variables = new Dictionary<string, Variable>();
void Awake()
{
holder = new GameObject("GlobalVariables").AddComponent<Flowchart>();
holder.transform.parent = transform;
}
public Variable GetVariable(string variableKey)
{
Variable v = null;
variables.TryGetValue(variableKey, out v);
return v;
}
public VariableBase<T> GetOrAddVariable<T>(string variableKey, T defaultvalue, Type type)
{
Variable v = null;
VariableBase<T> vAsT = null;
var res = variables.TryGetValue(variableKey, out v);
if(res && v != null)
{
vAsT = v as VariableBase<T>;
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<T>;
vAsT.Value = defaultvalue;
vAsT.Key = variableKey;
vAsT.Scope = VariableScope.Public;
variables[variableKey] = vAsT;
holder.Variables.Add(vAsT);
}
return vAsT;
}
}
}