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,14 @@
{
"name": "SerializableFunc.Runtime",
"rootNamespace": "",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e72a8e3728c787f4fafc146b590e6be5
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fe4625ec820a55848834d700960d1a9f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

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: