//$ Copyright 2015-22, Code Respawn Technologies Pvt Ltd - All Rights Reserved $// using System.Collections.Generic; using UnityEngine; namespace DungeonArchitect.Utils { [System.Serializable] public class KeyValueDataEntryBase { [SerializeField] public string key; public virtual object GetValue() { return null; } public virtual void SetValue(object value) { } } [System.Serializable] public class KeyValueDataEntryTyped : KeyValueDataEntryBase { [SerializeField] public T value; public override object GetValue() { return value; } public override void SetValue(object value) { this.value = (T)value; } } [System.Serializable] public class KeyValueDataEntryFloat : KeyValueDataEntryTyped { } [System.Serializable] public class KeyValueDataEntryInt : KeyValueDataEntryTyped { } [System.Serializable] public class KeyValueDataEntryString : KeyValueDataEntryTyped { } [System.Serializable] public class KeyValueDataEntryVector3 : KeyValueDataEntryTyped { } [System.Serializable] public class KeyValueDataEntryVector2 : KeyValueDataEntryTyped { } [System.Serializable] public class KeyValueData { [SerializeField] List dataFloat = new List(); [SerializeField] List dataInt = new List(); [SerializeField] List dataString = new List(); [SerializeField] List dataVector3 = new List(); [SerializeField] List dataVector2 = new List(); // Getters public bool GetFloat(string key, ref float value) { return GetValue(dataFloat, key, ref value); } public bool GetInt(string key, ref int value) { return GetValue(dataInt, key, ref value); } public bool GetString(string key, ref string value) { return GetValue(dataString, key, ref value); } public bool GetVector3(string key, ref Vector3 value) { return GetValue(dataVector3, key, ref value); } public bool GetVector2(string key, ref Vector2 value) { return GetValue(dataVector2, key, ref value); } // Setters public void Set(string key, float value) { SetValue(dataFloat, key, value); } public void Set(string key, int value) { SetValue(dataInt, key, value); } public void Set(string key, string value) { SetValue(dataString, key, value); } public void Set(string key, Vector3 value) { SetValue(dataVector3, key, value); } public void Set(string key, Vector2 value) { SetValue(dataVector2, key, value); } private void SetValue(List data, string key, object value) where T : KeyValueDataEntryBase, new() { foreach (var entry in data) { if (entry is T) { if (entry.key == key) { entry.SetValue(value); return; } } } var item = new T(); item.key = key; item.SetValue(value); data.Add(item); } private bool GetValue(List data, string key, ref TValue value) where TEntry : KeyValueDataEntryBase { foreach (var entry in data) { if (entry.key == key) { object objValue = entry.GetValue(); if (objValue is TValue) { value = (TValue)entry.GetValue(); return true; } else { return false; } } } return false; } } }