Browse Source

Refactored SavePointData classes

master
Christopher 8 years ago
parent
commit
c0b3256df1
  1. 94
      Assets/Fungus/Scripts/Components/SaveManager.cs
  2. 9
      Assets/Fungus/Scripts/SavePoints.meta
  3. 174
      Assets/Fungus/Scripts/SavePoints/FlowchartData.cs
  4. 12
      Assets/Fungus/Scripts/SavePoints/FlowchartData.cs.meta
  5. 21
      Assets/Fungus/Scripts/SavePoints/SavePointData.cs
  6. 0
      Assets/Fungus/Scripts/SavePoints/SavePointData.cs.meta
  7. 47
      Assets/Fungus/Scripts/Utils/SavePointData.cs

94
Assets/Fungus/Scripts/Components/SaveManager.cs

@ -60,99 +60,27 @@ namespace Fungus
var saveData = new SavePointData();
// Store the scene, flowchart and block to execute on resume
saveData.sceneName = SceneManager.GetActiveScene().name;
saveData.flowchartName = flowchart.name;
saveData.saveKey = saveKey;
saveData.SceneName = SceneManager.GetActiveScene().name;
saveData.SaveKey = saveKey;
for (int i = 0; i < flowchart.Variables.Count; i++)
{
var v = flowchart.Variables[i];
// Save string
var stringVariable = v as StringVariable;
if (stringVariable != null)
{
var d = new StringVar();
d.key = stringVariable.Key;
d.value = stringVariable.Value;
saveData.stringVars.Add(d);
}
// Save int
var intVariable = v as IntegerVariable;
if (intVariable != null)
{
var d = new IntVar();
d.key = intVariable.Key;
d.value = intVariable.Value;
saveData.intVars.Add(d);
}
// Save float
var floatVariable = v as FloatVariable;
if (floatVariable != null)
{
var d = new FloatVar();
d.key = floatVariable.Key;
d.value = floatVariable.Value;
saveData.floatVars.Add(d);
}
// Save bool
var boolVariable = v as BooleanVariable;
if (boolVariable != null)
{
var d = new BoolVar();
d.key = boolVariable.Key;
d.value = boolVariable.Value;
saveData.boolVars.Add(d);
}
}
var flowchartData = FlowchartData.Encode(flowchart);
saveData.FlowchartData.Add(flowchartData);
return JsonUtility.ToJson(saveData, true);
}
protected virtual void RestoreSavedGame(SavePointData saveData)
{
var go = GameObject.Find(saveData.flowchartName);
if (go == null)
{
return;
}
var flowchartData = saveData.FlowchartData[0];
var flowchart = go.GetComponent<Flowchart>();
if (flowchart == null)
{
return;
}
for (int i = 0; i < saveData.boolVars.Count; i++)
{
var boolVar = saveData.boolVars[i];
flowchart.SetBooleanVariable(boolVar.key, boolVar.value);
}
for (int i = 0; i < saveData.intVars.Count; i++)
{
var intVar = saveData.intVars[i];
flowchart.SetIntegerVariable(intVar.key, intVar.value);
}
for (int i = 0; i < saveData.floatVars.Count; i++)
{
var floatVar = saveData.floatVars[i];
flowchart.SetFloatVariable(floatVar.key, floatVar.value);
}
for (int i = 0; i < saveData.stringVars.Count; i++)
{
var stringVar = saveData.stringVars[i];
flowchart.SetStringVariable(stringVar.key, stringVar.value);
}
FlowchartData.Decode(flowchartData);
// Fire any matching SavePointLoaded event handler with matching save key.
var eventHandlers = Object.FindObjectsOfType<SavePointLoaded>();
for (int i = 0; i < eventHandlers.Length; i++)
{
var eventHandler = eventHandlers[i];
eventHandler.OnSavePointLoaded(saveData.saveKey);
eventHandler.OnSavePointLoaded(saveData.SaveKey);
}
// Execute any block with a Label matching the save key
@ -160,14 +88,14 @@ namespace Fungus
for (int i = 0; i < labels.Length; i++)
{
var label = labels[i];
if (string.Compare(label.Key, saveData.saveKey) == 0)
if (string.Compare(label.Key, saveData.SaveKey, true) == 0)
{
int index = label.CommandIndex;
var block = label.ParentBlock;
var fc = label.GetFlowchart();
fc.ExecuteBlock(block, index + 1);
}
}
}
}
protected virtual void StoreJSONData(string key, string jsonData)
@ -190,7 +118,7 @@ namespace Fungus
protected virtual void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
if (scene.name == tempSaveData.sceneName)
if (scene.name == tempSaveData.SceneName)
{
RestoreSavedGame(tempSaveData);
}
@ -244,7 +172,7 @@ namespace Fungus
tempSaveData = JsonUtility.FromJson<SavePointData>(jsonData);
SceneManager.sceneLoaded += OnSceneLoaded;
SceneManager.LoadScene(tempSaveData.sceneName);
SceneManager.LoadScene(tempSaveData.SceneName);
}
public virtual void Delete(int slot)

9
Assets/Fungus/Scripts/SavePoints.meta

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 6bd8827dc9c254f3daa0a9b2672a7764
folderAsset: yes
timeCreated: 1479213577
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

174
Assets/Fungus/Scripts/SavePoints/FlowchartData.cs

@ -0,0 +1,174 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Fungus
{
[System.Serializable]
public class StringVar
{
[SerializeField] protected string key;
[SerializeField] protected string value;
#region Public methods
public string Key { get { return key; } set { key = value; } }
public string Value { get { return value; } set { this.value = value; } }
#endregion
}
[System.Serializable]
public class IntVar
{
[SerializeField] protected string key;
[SerializeField] protected int value;
#region Public methods
public string Key { get { return key; } set { key = value; } }
public int Value { get { return value; } set { this.value = value; } }
#endregion
}
[System.Serializable]
public class FloatVar
{
[SerializeField] protected string key;
[SerializeField] protected float value;
#region Public methods
public string Key { get { return key; } set { key = value; } }
public float Value { get { return value; } set { this.value = value; } }
#endregion
}
[System.Serializable]
public class BoolVar
{
[SerializeField] protected string key;
[SerializeField] protected bool value;
#region Public methods
public string Key { get { return key; } set { key = value; } }
public bool Value { get { return value; } set { this.value = value; } }
#endregion
}
[System.Serializable]
public class FlowchartData
{
[SerializeField] protected string flowchartName;
[SerializeField] protected List<StringVar> stringVars = new List<StringVar>();
[SerializeField] protected List<IntVar> intVars = new List<IntVar>();
[SerializeField] protected List<FloatVar> floatVars = new List<FloatVar>();
[SerializeField] protected List<BoolVar> boolVars = new List<BoolVar>();
#region Public methods
public string FlowchartName { get { return flowchartName; } set { flowchartName = value; } }
public List<StringVar> StringVars { get { return stringVars; } set { stringVars = value; } }
public List<IntVar> IntVars { get { return intVars; } set { intVars = value; } }
public List<FloatVar> FloatVars { get { return floatVars; } set { floatVars = value; } }
public List<BoolVar> BoolVars { get { return boolVars; } set { boolVars = value; } }
public static FlowchartData Encode(Flowchart flowchart)
{
var flowchartData = new FlowchartData();
flowchartData.FlowchartName = flowchart.name;
for (int i = 0; i < flowchart.Variables.Count; i++)
{
var v = flowchart.Variables[i];
// Save string
var stringVariable = v as StringVariable;
if (stringVariable != null)
{
var d = new StringVar();
d.Key = stringVariable.Key;
d.Value = stringVariable.Value;
flowchartData.StringVars.Add(d);
}
// Save int
var intVariable = v as IntegerVariable;
if (intVariable != null)
{
var d = new IntVar();
d.Key = intVariable.Key;
d.Value = intVariable.Value;
flowchartData.IntVars.Add(d);
}
// Save float
var floatVariable = v as FloatVariable;
if (floatVariable != null)
{
var d = new FloatVar();
d.Key = floatVariable.Key;
d.Value = floatVariable.Value;
flowchartData.FloatVars.Add(d);
}
// Save bool
var boolVariable = v as BooleanVariable;
if (boolVariable != null)
{
var d = new BoolVar();
d.Key = boolVariable.Key;
d.Value = boolVariable.Value;
flowchartData.BoolVars.Add(d);
}
}
return flowchartData;
}
public static void Decode(FlowchartData flowchartData)
{
var go = GameObject.Find(flowchartData.FlowchartName);
if (go == null)
{
Debug.LogError("Failed to find flowchart object specified in save data");
return;
}
var flowchart = go.GetComponent<Flowchart>();
if (flowchart == null)
{
Debug.LogError("Failed to find flowchart object specified in save data");
return;
}
for (int i = 0; i < flowchartData.BoolVars.Count; i++)
{
var boolVar = flowchartData.BoolVars[i];
flowchart.SetBooleanVariable(boolVar.Key, boolVar.Value);
}
for (int i = 0; i < flowchartData.IntVars.Count; i++)
{
var intVar = flowchartData.IntVars[i];
flowchart.SetIntegerVariable(intVar.Key, intVar.Value);
}
for (int i = 0; i < flowchartData.FloatVars.Count; i++)
{
var floatVar = flowchartData.FloatVars[i];
flowchart.SetFloatVariable(floatVar.Key, floatVar.Value);
}
for (int i = 0; i < flowchartData.StringVars.Count; i++)
{
var stringVar = flowchartData.StringVars[i];
flowchart.SetStringVariable(stringVar.Key, stringVar.Value);
}
}
#endregion
}
}

12
Assets/Fungus/Scripts/SavePoints/FlowchartData.cs.meta

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 07443f90b887a47fb846500fe5ce3840
timeCreated: 1478698399
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

21
Assets/Fungus/Scripts/SavePoints/SavePointData.cs

@ -0,0 +1,21 @@
using System.Collections.Generic;
using UnityEngine;
namespace Fungus
{
[System.Serializable]
public class SavePointData
{
[SerializeField] protected string saveKey;
[SerializeField] protected string sceneName;
[SerializeField] protected List<FlowchartData> flowchartData = new List<FlowchartData>();
#region Public methods
public string SaveKey { get { return saveKey; } set { saveKey = value; } }
public string SceneName { get { return sceneName; } set { sceneName = value; } }
public List<FlowchartData> FlowchartData { get { return flowchartData; } set { flowchartData = value; } }
#endregion
}
}

0
Assets/Fungus/Scripts/Utils/SavePointData.cs.meta → Assets/Fungus/Scripts/SavePoints/SavePointData.cs.meta

47
Assets/Fungus/Scripts/Utils/SavePointData.cs

@ -1,47 +0,0 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Fungus
{
[System.Serializable]
public class StringVar
{
public string key;
public string value;
}
[System.Serializable]
public class IntVar
{
public string key;
public int value;
}
[System.Serializable]
public class FloatVar
{
public string key;
public float value;
}
[System.Serializable]
public class BoolVar
{
public string key;
public bool value;
}
[System.Serializable]
public class SavePointData
{
public string sceneName;
public string flowchartName;
public string saveKey;
public List<StringVar> stringVars = new List<StringVar>();
public List<IntVar> intVars = new List<IntVar>();
public List<FloatVar> floatVars = new List<FloatVar>();
public List<BoolVar> boolVars = new List<BoolVar>();
}
}
Loading…
Cancel
Save