117 lines
3.0 KiB
C#
117 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Unity.HLODSystem
|
|
{
|
|
[Serializable]
|
|
public class HLODUserData
|
|
{
|
|
[Serializable]
|
|
public class UserDataTable<T> : ISerializationCallbackReceiver
|
|
{
|
|
private Dictionary<string, int> m_idTable = new Dictionary<string, int>();
|
|
|
|
[SerializeField]
|
|
private List<string> m_keys = new List<string>();
|
|
[SerializeField]
|
|
private List<T> m_values = new List<T>();
|
|
|
|
public bool AddData(string key, T value)
|
|
{
|
|
if (m_idTable.ContainsKey(key))
|
|
return false;
|
|
|
|
m_keys.Add(key);
|
|
m_values.Add(value);
|
|
m_idTable[key] = m_values.Count - 1;
|
|
|
|
return true;
|
|
}
|
|
|
|
public T GetData(string key)
|
|
{
|
|
int index = 0;
|
|
if (m_idTable.TryGetValue(key, out index) == false)
|
|
throw new KeyNotFoundException("Key not found: " + key);
|
|
return m_values[index];
|
|
}
|
|
|
|
public bool TryGetData(string key, out T value)
|
|
{
|
|
int index = 0;
|
|
if (m_idTable.TryGetValue(key, out index) == false)
|
|
{
|
|
value = default(T);
|
|
return false;
|
|
}
|
|
|
|
value = m_values[index];
|
|
return true;
|
|
}
|
|
|
|
public bool HasAnyData()
|
|
{
|
|
return m_idTable.Count > 0;
|
|
}
|
|
|
|
public bool HasData(string key)
|
|
{
|
|
return m_idTable.ContainsKey(key);
|
|
}
|
|
|
|
public void OnBeforeSerialize()
|
|
{
|
|
}
|
|
|
|
public void OnAfterDeserialize()
|
|
{
|
|
m_idTable.Clear();
|
|
|
|
for (int i = 0; i < m_keys.Count; ++i)
|
|
{
|
|
m_idTable[m_keys[i]] = i;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool HasAnyData()
|
|
{
|
|
return m_intDatas.HasAnyData() ||
|
|
m_floatDatas.HasAnyData() ||
|
|
m_stringDatas.HasAnyData();
|
|
}
|
|
|
|
public UserDataTable<int> IntDatas
|
|
{
|
|
get
|
|
{
|
|
return m_intDatas;
|
|
}
|
|
}
|
|
|
|
public UserDataTable<float> FloatDatas
|
|
{
|
|
get
|
|
{
|
|
return m_floatDatas;
|
|
}
|
|
}
|
|
|
|
public UserDataTable<string> StringDatas
|
|
{
|
|
get
|
|
{
|
|
return m_stringDatas;
|
|
}
|
|
}
|
|
|
|
[SerializeField]
|
|
private UserDataTable<int> m_intDatas = new UserDataTable<int>();
|
|
[SerializeField]
|
|
private UserDataTable<float> m_floatDatas = new UserDataTable<float>();
|
|
[SerializeField]
|
|
private UserDataTable<string> m_stringDatas = new UserDataTable<string>();
|
|
|
|
}
|
|
} |