#if UNITY_EDITOR using System.Collections.Generic; using TMPro; using UnityEngine; using UnityUtilities.SerializableDataHelpers; public class SerializableFuncDebugger : MonoBehaviour { [Header("UI References")] [SerializeField] private TextMeshProUGUI displayedText; [Header("Debug Controls")] [SerializeField] private KeyCode boolFuncInvocationKeyCode = KeyCode.Q; [SerializeField] private KeyCode stringFuncInvocationKeyCode = KeyCode.W; [SerializeField] private KeyCode vector3FuncFuncInvocationKeyCode = KeyCode.E; [SerializeField] private KeyCode quaternionFuncFuncInvocationKeyCode = KeyCode.R; [SerializeField] private KeyCode floatFuncInvocationKeyCode = KeyCode.T; [SerializeField] private KeyCode listFuncInvocationKeyCode = KeyCode.Y; [Header("Test Funcs")] [SerializeField] private SerializableFunc boolFunc; [SerializeField] private SerializableFunc stringFunc; [SerializeField] private SerializableFunc vector3Func; [SerializeField] private SerializableFunc quaternionFunc; [SerializeField] private SerializableFunc floatFunc; [SerializeField] private SerializableFunc> listFunc; [SerializeField] private SerializableFunc arrayFunc; [SerializeField] private SerializableFunc array2DFunc; [SerializeField] private SerializableFunc internalClassFunc; [SerializeField] private SerializableFunc> genericInternalClassFunc; [SerializeField] private SerializableFunc>> genericInternalClassFunc2; [Header("Test Objects")] [SerializeField] private List stringsList; private void Update() { TryInvokeBoolFunc(); TryInvokeStringFunc(); TryInvokeVector3Func(); TryInvokeQuaternionFunc(); TryInvokeFloatFunc(); TryInvokeListFunc(); } #region Public Calls public void CallBoolFunc() { bool result = boolFunc.Invoke(); DisplayCalledFuncResult(result); } public void CallStringFunc() { string result = stringFunc.Invoke(); DisplayCalledFuncResult(result); } public void CallVector3Func() { Vector3 result = vector3Func.Invoke(); DisplayCalledFuncResult(result); } public void CallQuaternionFunc() { Quaternion result = quaternionFunc.Invoke(); DisplayCalledFuncResult(result); } public void CallFloatFunc() { float result = floatFunc.Invoke(); DisplayCalledFuncResult(result); } public void CallListFunc() { List result = listFunc.Invoke(); PrintListDataToConsole(result); } #endregion #region Public Data Returns public List GetSampleList() { return stringsList; } #endregion #region Private Calls private void TryInvokeBoolFunc() { if (!Input.GetKeyDown(boolFuncInvocationKeyCode)) return; CallBoolFunc(); } private void TryInvokeStringFunc() { if (!Input.GetKeyDown(stringFuncInvocationKeyCode)) return; CallStringFunc(); } private void TryInvokeVector3Func() { if (!Input.GetKeyDown(vector3FuncFuncInvocationKeyCode)) return; CallVector3Func(); } private void TryInvokeQuaternionFunc() { if (!Input.GetKeyDown(quaternionFuncFuncInvocationKeyCode)) return; CallQuaternionFunc(); } private void TryInvokeFloatFunc() { if (!Input.GetKeyDown(floatFuncInvocationKeyCode)) return; CallFloatFunc(); } private void TryInvokeListFunc() { if (!Input.GetKeyDown(listFuncInvocationKeyCode)) return; CallListFunc(); } #endregion private void DisplayCalledFuncResult(object result) { string resultString = $"Res: {result}"; if (displayedText != null) { displayedText.text = resultString; } else { Debug.Log(resultString); } } private void PrintListDataToConsole(List list) { if (list == null) { Debug.Log("The list is null"); } else { Debug.Log($"The list has {list.Count} elements"); foreach (string item in list) { Debug.Log(item); } } } private class InternalClass { } private class GenericInternalClass { } } #endif