using System; using UnityEngine; using UnityEngine.Events; using OctoCore.Save.Data; namespace OctoCore.Components { public class OctoSaveEvent : MonoBehaviour { [SerializeField] private OctoData data; [SerializeField] private bool invertValue; [SerializeField] private UnityEvent onInitBool; [SerializeField] private UnityEvent onInitInt; [SerializeField] private UnityEvent onInitFloat; [SerializeField] private UnityEvent onInitString; [SerializeField] private UnityEvent onInitVector; [SerializeField] private UnityEvent onChangeBool; [SerializeField] private UnityEvent onChangeInt; [SerializeField] private UnityEvent onChangeFloat; [SerializeField] private UnityEvent onChangeString; [SerializeField] private UnityEvent onChangeVector; private Action onValueChangedBool; private Action onValueChangedInt; private Action onValueChangedFloat; private Action onValueChangedString; private Action onValueChangedVector; void OnEnable() { if (!OctoCore.Instance) return; if (data) { switch (data) { case global::OctoCore.Save.Data.OctoDataBool: OnValueInit(OctoCore.Instance.Save.GetBool(data.Id)); OctoCore.Instance.Save.Subscribe(data, onValueChangedBool = OnValueChanged); break; case global::OctoCore.Save.Data.OctoDataInt: OnValueInit(OctoCore.Instance.Save.GetInt(data.Id)); OctoCore.Instance.Save.Subscribe(data, onValueChangedInt = OnValueChanged); break; case global::OctoCore.Save.Data.OctoDataFloat: OnValueInit(OctoCore.Instance.Save.GetFloat(data.Id)); OctoCore.Instance.Save.Subscribe(data, onValueChangedFloat = OnValueChanged); break; case global::OctoCore.Save.Data.OctoDataString: OnValueInit(OctoCore.Instance.Save.GetString(data.Id)); OctoCore.Instance.Save.Subscribe(data, onValueChangedString = OnValueChanged); break; case global::OctoCore.Save.Data.OctoDataVector: OnValueInit(OctoCore.Instance.Save.GetVector(data.Id)); OctoCore.Instance.Save.Subscribe(data, onValueChangedVector = OnValueChanged); break; default: if (OctoCore.Instance.Development.Log) Debug.Log($"Unsupported data: {data.Id}"); break; } if (OctoCore.Instance.Development.Log && data) Debug.Log($"{name} subscribed on: {data.Id}"); } else if (OctoCore.Instance.Development.Log && data) { Debug.Log($"Data is null"); } } void OnDisable() { if (!OctoCore.Instance) return; if (data) { if (onValueChangedBool != null) { OctoCore.Instance.Save.Unsubscribe(data, onValueChangedBool); onValueChangedBool = null; } if (onValueChangedInt != null) { OctoCore.Instance.Save.Unsubscribe(data, onValueChangedInt); onValueChangedInt = null; } if (onValueChangedFloat != null) { OctoCore.Instance.Save.Unsubscribe(data, onValueChangedFloat); onValueChangedFloat = null; } if (onValueChangedString != null) { OctoCore.Instance.Save.Unsubscribe(data, onValueChangedString); onValueChangedString = null; } if (onValueChangedVector != null) { OctoCore.Instance.Save.Unsubscribe(data, onValueChangedVector); onValueChangedVector = null; } if (OctoCore.Instance.Development.Log && data) Debug.Log($"{name} unsubscribed on: {data.Id}"); } } void OnValueInit() { if (OctoCore.Instance.Development.Log && data) Debug.Log($"Value initialized on: {data.Id}"); } void OnValueInit(bool value) { onInitBool?.Invoke(invertValue ? !value : value); OnValueInit(); } void OnValueInit(int value) { onInitInt?.Invoke(value); OnValueChanged(); } void OnValueInit(float value) { onInitFloat?.Invoke(value); OnValueChanged(); } void OnValueInit(string value) { onInitString?.Invoke(value); OnValueChanged(); } void OnValueInit(Vector4 value) { onInitVector?.Invoke(value); OnValueInit(); } void OnValueChanged() { if (OctoCore.Instance.Development.Log && data) Debug.Log($"Value changed on: {data.Id}"); } void OnValueChanged(bool value) { onChangeBool?.Invoke(invertValue ? !value : value); OnValueChanged(); } void OnValueChanged(int value) { onChangeInt?.Invoke(value); OnValueChanged(); } void OnValueChanged(float value) { onChangeFloat?.Invoke(value); OnValueChanged(); } void OnValueChanged(string value) { onChangeString?.Invoke(value); OnValueChanged(); } void OnValueChanged(Vector4 value) { onChangeVector?.Invoke(value); OnValueChanged(); } } }