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.
316 lines
7.9 KiB
316 lines
7.9 KiB
|
6 years ago
|
using UnityEngine;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System;
|
||
|
|
using System.IO;
|
||
|
|
|
||
|
|
namespace UltraControls
|
||
|
|
{
|
||
|
|
using MapCtrl = Dictionary<string, Control>;
|
||
|
|
|
||
|
|
[ExecuteInEditMode]
|
||
|
|
[Serializable]
|
||
|
|
public class UltraSetter : MonoBehaviour/*, ISerializationCallbackReceiver*/
|
||
|
|
{
|
||
|
|
public delegate void OnFoundGetter(UltraSetter sender);
|
||
|
|
public event OnFoundGetter EventFoundGetter;
|
||
|
|
|
||
|
|
public Control[] controls
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
return m_controls;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public bool is_start
|
||
|
|
{
|
||
|
|
get { return m_is_started; }
|
||
|
|
set
|
||
|
|
{
|
||
|
|
m_is_started = value;
|
||
|
|
if (!m_is_started && m_handle != Handler.InvalidHandle)
|
||
|
|
{
|
||
|
|
mf_Destroy();
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public string ultracontros_name
|
||
|
|
{
|
||
|
|
get { return m_name; }
|
||
|
|
set
|
||
|
|
{
|
||
|
|
if (m_is_started && m_handle != Handler.InvalidHandle)
|
||
|
|
{
|
||
|
|
mf_Destroy();
|
||
|
|
}
|
||
|
|
|
||
|
|
m_name = value;
|
||
|
|
m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public string filepath_settings
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
if (m_filepath_settings == "")
|
||
|
|
{
|
||
|
|
return Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_relative_filepath_settings_default);
|
||
|
|
}
|
||
|
|
|
||
|
|
return m_filepath_settings;
|
||
|
|
}
|
||
|
|
|
||
|
|
set
|
||
|
|
{
|
||
|
|
m_filepath_settings = value;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//===============================================================
|
||
|
|
//MonoBehaviour
|
||
|
|
//===============================================================
|
||
|
|
void Awake()
|
||
|
|
{
|
||
|
|
m_map = new MapCtrl();
|
||
|
|
}
|
||
|
|
|
||
|
|
void Start()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void Update()
|
||
|
|
{
|
||
|
|
mf_Update();
|
||
|
|
}
|
||
|
|
|
||
|
|
void OnDisable()
|
||
|
|
{
|
||
|
|
mf_Destroy();
|
||
|
|
}
|
||
|
|
|
||
|
|
//void OnGUI()
|
||
|
|
//{
|
||
|
|
// Transform trans = gameObject.GetComponent<Transform>();
|
||
|
|
// Camera cam = Camera.current;
|
||
|
|
// if (cam == null)
|
||
|
|
// {
|
||
|
|
// return;
|
||
|
|
// }
|
||
|
|
//
|
||
|
|
// Vector3 pos = cam.WorldToScreenPoint(trans.position);
|
||
|
|
// GUI.Label(new Rect(pos.x, pos.y, 100, 20), "id=" + m_identifierInFile);
|
||
|
|
//}
|
||
|
|
|
||
|
|
void OnTransformParentChanged()
|
||
|
|
{
|
||
|
|
m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json");
|
||
|
|
}
|
||
|
|
|
||
|
|
//===============================================================
|
||
|
|
//ISerializationCallbackReceiver
|
||
|
|
//===============================================================
|
||
|
|
//public void OnBeforeSerialize()
|
||
|
|
//{
|
||
|
|
//
|
||
|
|
//}
|
||
|
|
//
|
||
|
|
//public void OnAfterDeserialize()
|
||
|
|
//{
|
||
|
|
//
|
||
|
|
//}
|
||
|
|
|
||
|
|
//===============================================================
|
||
|
|
//Other
|
||
|
|
//===============================================================
|
||
|
|
|
||
|
|
public bool SaveSettings()
|
||
|
|
{
|
||
|
|
string json_text = Utils.ToJson(m_controls);
|
||
|
|
File.WriteAllText(filepath_settings, json_text);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
public bool LoadSettings()
|
||
|
|
{
|
||
|
|
if (!File.Exists(filepath_settings))
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
var sr = File.OpenText(filepath_settings);
|
||
|
|
var json = sr.ReadToEnd();
|
||
|
|
Utils.FromJson(json, m_controls);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ParamSetter< T > GetParamSetter< T > (string name)
|
||
|
|
{
|
||
|
|
Control ctrl;
|
||
|
|
if (!m_map_ctrl.TryGetValue(name, out ctrl))
|
||
|
|
{
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return ctrl.CreateParamSetter<T>();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
#if UNITY_EDITOR
|
||
|
|
public bool UpdateIdentifierInFile()
|
||
|
|
{
|
||
|
|
if (m_identifierInFile > 0)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
long identifierInFile = Utils.GetLocalIdentifierInFileForObject(this);
|
||
|
|
if (identifierInFile != m_identifierInFile)
|
||
|
|
{
|
||
|
|
m_identifierInFile = identifierInFile;
|
||
|
|
if (m_identifierInFile > 0 && m_relative_filepath_settings_default == "")
|
||
|
|
{
|
||
|
|
m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json");
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void UpdateByUltraSetterEditor()
|
||
|
|
{
|
||
|
|
mf_Update();
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
//===============================================================
|
||
|
|
//Private member or function
|
||
|
|
//===============================================================
|
||
|
|
|
||
|
|
private uint m_handle = Handler.InvalidHandle;
|
||
|
|
private Control[] m_controls;
|
||
|
|
private MapCtrl m_map;
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private string m_name = "ResolumeArena";
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private bool m_is_started = false;
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private bool m_auto_load_after_finding_getter = true;
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private long m_identifierInFile = -1;
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private string m_filepath_settings = "";
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private string m_relative_filepath_settings_default = "";
|
||
|
|
|
||
|
|
private string mf_PleaseCallMyRealName()
|
||
|
|
{
|
||
|
|
string real_name = "UltraSetter";
|
||
|
|
|
||
|
|
Transform trans = this.transform;
|
||
|
|
|
||
|
|
while (trans != null)
|
||
|
|
{
|
||
|
|
real_name = trans.gameObject.name + "-" + real_name;
|
||
|
|
trans = trans.parent;
|
||
|
|
}
|
||
|
|
|
||
|
|
real_name = "[" + m_name + "]" + real_name;
|
||
|
|
if (m_identifierInFile >= 0)
|
||
|
|
{
|
||
|
|
real_name += "-" + m_identifierInFile;
|
||
|
|
}
|
||
|
|
return real_name;
|
||
|
|
}
|
||
|
|
|
||
|
|
private bool mf_HasHandle()
|
||
|
|
{
|
||
|
|
return m_handle != Handler.InvalidHandle && Handler.singleton.IsExisted(m_handle);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void mf_Destroy()
|
||
|
|
{
|
||
|
|
if (Handler.is_singleton_lived)
|
||
|
|
{
|
||
|
|
Handler.singleton.Destroy(m_handle);
|
||
|
|
}
|
||
|
|
|
||
|
|
m_handle = Handler.InvalidHandle;
|
||
|
|
m_controls = null;
|
||
|
|
|
||
|
|
if (m_map != null)
|
||
|
|
{
|
||
|
|
m_map.Clear();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private MapCtrl m_map_ctrl
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
if (m_map == null)
|
||
|
|
{
|
||
|
|
m_map = new MapCtrl();
|
||
|
|
}
|
||
|
|
|
||
|
|
return m_map;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private void mf_Update()
|
||
|
|
{
|
||
|
|
if (!m_is_started)
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!mf_HasHandle())
|
||
|
|
{
|
||
|
|
m_handle = Handler.singleton.Create(m_name, 32);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (m_controls == null)
|
||
|
|
{
|
||
|
|
m_controls = Handler.singleton.FindGetter(m_handle);
|
||
|
|
if (m_controls != null)
|
||
|
|
{
|
||
|
|
if (m_auto_load_after_finding_getter)
|
||
|
|
{
|
||
|
|
LoadSettings();
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach(Control ctrl in m_controls)
|
||
|
|
{
|
||
|
|
m_map_ctrl.Add(ctrl.name, ctrl);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (EventFoundGetter != null)
|
||
|
|
{
|
||
|
|
EventFoundGetter(this);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
Handler.singleton.SetControls(m_handle);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|