using UnityEngine; using UnityEditor; using System; using System.Collections.Generic; namespace qtools.qhierarchy.pdata { [System.Serializable] class QSettingsObject: ScriptableObject { [SerializeField] private List settingStringNames = new List(); [SerializeField] private List settingStringValues = new List(); [SerializeField] private List settingFloatNames = new List(); [SerializeField] private List settingFloatValues = new List(); [SerializeField] private List settingIntNames = new List(); [SerializeField] private List settingIntValues = new List(); [SerializeField] private List settingBoolNames = new List(); [SerializeField] private List settingBoolValues = new List(); public void clear() { settingStringNames.Clear(); settingStringValues.Clear(); settingFloatNames.Clear(); settingFloatValues.Clear(); settingIntNames.Clear(); settingIntValues.Clear(); settingBoolNames.Clear(); settingBoolValues.Clear(); } public void set(string settingName, object value) { if (value is bool) { settingBoolValues[settingBoolNames.IndexOf(settingName)] = (bool)value; } else if (value is string) { settingStringValues[settingStringNames.IndexOf(settingName)] = (string)value; } else if (value is float) { settingFloatValues[settingFloatNames.IndexOf(settingName)] = (float)value; } else if (value is int) { settingIntValues[settingIntNames.IndexOf(settingName)] = (int)value; } EditorUtility.SetDirty(this); } public object get(string settingName, object defaultValue) { if (defaultValue is bool) { int id = settingBoolNames.IndexOf(settingName); if (id == -1) { settingBoolNames.Add(settingName); settingBoolValues.Add((bool)defaultValue); return defaultValue; } else return settingBoolValues[id]; } else if (defaultValue is string) { int id = settingStringNames.IndexOf(settingName); if (id == -1) { settingStringNames.Add(settingName); settingStringValues.Add((string)defaultValue); return defaultValue; } else return settingStringValues[id]; } else if (defaultValue is float) { int id = settingFloatNames.IndexOf(settingName); if (id == -1) { settingFloatNames.Add(settingName); settingFloatValues.Add((float)defaultValue); return defaultValue; } else return settingFloatValues[id]; } else if (defaultValue is int) { int id = settingIntNames.IndexOf(settingName); if (id == -1) { settingIntNames.Add(settingName); settingIntValues.Add((int)defaultValue); return defaultValue; } else return settingIntValues[id]; } return null; } public object get(string settingName) { if (typeof(T) == typeof(bool)) { int id = settingBoolNames.IndexOf(settingName); if (id == -1) return null; else return settingBoolValues[id]; } else if (typeof(T) == typeof(string)) { int id = settingStringNames.IndexOf(settingName); if (id == -1) return null; else return settingStringValues[id]; } else if (typeof(T) == typeof(float)) { int id = settingFloatNames.IndexOf(settingName); if (id == -1) return null; else return settingFloatValues[id]; } else if (typeof(T) == typeof(int)) { int id = settingIntNames.IndexOf(settingName); if (id == -1) return null; else return settingIntValues[id]; } return null; } } }