Initial Commit

This commit is contained in:
Anton Zhernosek
2023-05-23 14:07:24 +02:00
committed by GitHub
parent 772a603c6f
commit 697d6fe98a
33 changed files with 2771 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
using System;
using System.Linq;
using System.Reflection;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Utilities.SerializableData.SerializableFunc
{
[System.Serializable]
public class SerializableFunc<TReturn>
{
[SerializeField] protected Object targetObject;
[SerializeField] protected string methodName;
private Func<TReturn> func;
public Func<TReturn> Func { get { return GetReturnedFunc(); } }
public TReturn Invoke()
{
Func<TReturn> func = GetReturnedFunc();
if (func != null) return func();
return default;
}
#region Protected Interface
protected Func<TReturn> GetReturnedFunc()
{
if (func == null)
{
if (targetObject == null) return null;
if (string.IsNullOrWhiteSpace(methodName)) return null;
MethodInfo info = targetObject
.GetType()
.GetMethods(BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)
.FirstOrDefault(x => IsTargetMethodInfo(x));
if (info == null) return null;
func = (Func<TReturn>)Delegate.CreateDelegate(typeof(Func<TReturn>), targetObject, methodName);
}
return func;
}
#endregion
#region Utility Functions
private bool IsTargetMethodInfo(MethodInfo x)
{
return string.Equals(x.Name, methodName, StringComparison.InvariantCultureIgnoreCase)
&& x.ReturnType == typeof(TReturn)
&& x.GetParameters().Length == 0;
}
#endregion
#region Operators
public static implicit operator Func<TReturn>(SerializableFunc<TReturn> serializableFunc)
{
if (serializableFunc == null) return null;
return serializableFunc.GetReturnedFunc();
}
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 638c2cd796656454f8e97e9ef2cc6ae9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: