summaryrefslogtreecommitdiff
path: root/ActiveRagdoll/Assets/ThirdParty/SerializableCallback/Runtime/SerializableCallback.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ActiveRagdoll/Assets/ThirdParty/SerializableCallback/Runtime/SerializableCallback.cs')
-rw-r--r--ActiveRagdoll/Assets/ThirdParty/SerializableCallback/Runtime/SerializableCallback.cs124
1 files changed, 124 insertions, 0 deletions
diff --git a/ActiveRagdoll/Assets/ThirdParty/SerializableCallback/Runtime/SerializableCallback.cs b/ActiveRagdoll/Assets/ThirdParty/SerializableCallback/Runtime/SerializableCallback.cs
new file mode 100644
index 0000000..e58fa3b
--- /dev/null
+++ b/ActiveRagdoll/Assets/ThirdParty/SerializableCallback/Runtime/SerializableCallback.cs
@@ -0,0 +1,124 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+using UnityEngine;
+
+public abstract class SerializableCallback<TReturn> : SerializableCallbackBase<TReturn> {
+ public TReturn Invoke() {
+ if (func == null) Cache();
+ if (_dynamic) {
+ InvokableCallback<TReturn> call = func as InvokableCallback<TReturn>;
+ return call.Invoke();
+ } else {
+ return func.Invoke(Args);
+ }
+ }
+
+ protected override void Cache() {
+ if (_target == null || string.IsNullOrEmpty(_methodName)) {
+ func = new InvokableCallback<TReturn>(null, null);
+ } else {
+ if (_dynamic) {
+ func = new InvokableCallback<TReturn>(target, methodName);
+ } else {
+ func = GetPersistentMethod();
+ }
+ }
+ }
+}
+
+public abstract class SerializableCallback<T0, TReturn> : SerializableCallbackBase<TReturn> {
+ public TReturn Invoke(T0 arg0) {
+ if (func == null) Cache();
+ if (_dynamic) {
+ InvokableCallback<T0, TReturn> call = func as InvokableCallback<T0, TReturn>;
+ return call.Invoke(arg0);
+ } else {
+ return func.Invoke(Args);
+ }
+ }
+
+ protected override void Cache() {
+ if (_target == null || string.IsNullOrEmpty(_methodName)) {
+ func = new InvokableCallback<T0, TReturn>(null, null);
+ } else {
+ if (_dynamic) {
+ func = new InvokableCallback<T0, TReturn>(target, methodName);
+ } else {
+ func = GetPersistentMethod();
+ }
+ }
+ }
+}
+
+public abstract class SerializableCallback<T0, T1, TReturn> : SerializableCallbackBase<TReturn> {
+ public TReturn Invoke(T0 arg0, T1 arg1) {
+ if (func == null) Cache();
+ if (_dynamic) {
+ InvokableCallback<T0, T1, TReturn> call = func as InvokableCallback<T0, T1, TReturn>;
+ return call.Invoke(arg0, arg1);
+ } else {
+ return func.Invoke(Args);
+ }
+ }
+
+ protected override void Cache() {
+ if (_target == null || string.IsNullOrEmpty(_methodName)) {
+ func = new InvokableCallback<T0, T1, TReturn>(null, null);
+ } else {
+ if (_dynamic) {
+ func = new InvokableCallback<T0, T1, TReturn>(target, methodName);
+ } else {
+ func = GetPersistentMethod();
+ }
+ }
+ }
+}
+
+public abstract class SerializableCallback<T0, T1, T2, TReturn> : SerializableCallbackBase<TReturn> {
+ public TReturn Invoke(T0 arg0, T1 arg1, T2 arg2) {
+ if (func == null) Cache();
+ if (_dynamic) {
+ InvokableCallback<T0, T1, T2, TReturn> call = func as InvokableCallback<T0, T1, T2, TReturn>;
+ return call.Invoke(arg0, arg1, arg2);
+ } else {
+ return func.Invoke(Args);
+ }
+ }
+
+ protected override void Cache() {
+ if (_target == null || string.IsNullOrEmpty(_methodName)) {
+ func = new InvokableCallback<T0, T1, T2, TReturn>(null, null);
+ } else {
+ if (_dynamic) {
+ func = new InvokableCallback<T0, T1, T2, TReturn>(target, methodName);
+ } else {
+ func = GetPersistentMethod();
+ }
+ }
+ }
+}
+
+public abstract class SerializableCallback<T0, T1, T2, T3, TReturn> : SerializableCallbackBase<TReturn> {
+ public TReturn Invoke(T0 arg0, T1 arg1, T2 arg2, T3 arg3) {
+ if (func == null) Cache();
+ if (_dynamic) {
+ InvokableCallback<T0, T1, T2, T3, TReturn> call = func as InvokableCallback<T0, T1, T2, T3, TReturn>;
+ return call.Invoke(arg0, arg1, arg2, arg3);
+ } else {
+ return func.Invoke(Args);
+ }
+ }
+
+ protected override void Cache() {
+ if (_target == null || string.IsNullOrEmpty(_methodName)) {
+ func = new InvokableCallback<T0, T1, T2, T3, TReturn>(null, null);
+ } else {
+ if (_dynamic) {
+ func = new InvokableCallback<T0, T1, T2, T3, TReturn>(target, methodName);
+ } else {
+ func = GetPersistentMethod();
+ }
+ }
+ }
+} \ No newline at end of file