nightward/Assets/ThirdParty/TigerForge/EasyFileSave/EasyFileSaveExtension.cs

117 lines
3.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class EasyFileSaveExtension
{
// ----------------------------------------
// Add new extension inside this function.
// ----------------------------------------
public void Start()
{
// AddExtension method required parameters:
// - Name of this extension
// - CallBack function to execute when this extension save data
// - An array of unique keys, where each key corresponds to each saved value
AddExtension(
"BoxCollider",
BoxColliderExtension,
new string[] { "centerX", "centerY", "centerZ", "sizeX", "sizeY", "sizeZ", "enabled", "isTrigger", "contactOffset" }
);
}
// ----------------------------------------
// Add callBack functions here.
// ----------------------------------------
// This extension allow Easy File Save to easily save BoxCollider data.
void BoxColliderExtension()
{
// The boxCollider object data received by the AddCustom() method.
var data = GetData("BoxCollider");
// Casting of the object data to BoxCollider.
BoxCollider bc = (BoxCollider)data;
SetParameters(
"BoxCollider",
bc.center.x,
bc.center.y,
bc.center.z,
bc.size.x,
bc.size.y,
bc.size.z,
bc.enabled,
bc.isTrigger,
bc.contactOffset
);
}
// ******************************************************
// DON'T MODIFY ANYTHING UNDER THIS COMMENT:
// ******************************************************
#region " EXTENSIONS ENGINE "
public Dictionary<string, UnityAction> extensions = new Dictionary<string, UnityAction>();
public Dictionary<string, object> data = new Dictionary<string, object>();
public Dictionary<string, List<object>> pars = new Dictionary<string, List<object>>();
public Dictionary<string, List<string>> mapping = new Dictionary<string, List<string>>();
/// <summary>
/// Add a new extension to the Easy File Save system
/// </summary>
private void AddExtension(string name, UnityAction callBack, string[] map)
{
if (!extensions.ContainsKey(name))
{
extensions.Add(name, callBack);
data.Add(name, null);
pars.Add(name, null);
mapping.Add(name, new List<string>(map));
}
else
{
Debug.LogWarning("An extension with name '" + name + "' already exists.");
}
}
/// <summary>
/// Get the object data sent to this callback.
/// </summary>
private object GetData(string extensionName)
{
if (data.ContainsKey(extensionName)) return data[extensionName]; else return null;
}
/// <summary>
/// Collect the object data to save.
/// </summary>
private void SetParameters(string extensionName, params object[] parameters)
{
pars[extensionName] = new List<object>(parameters);
}
#endregion
}