using System; using System.Linq.Expressions; using System.Reflection; using UnityEngine; public abstract class SerializableCallback : SerializableCallbackBase { public TReturn Invoke() { if (func == null) Cache(); if (_dynamic) { InvokableCallback call = func as InvokableCallback; return call.Invoke(); } else { return func.Invoke(Args); } } protected override void Cache() { if (_target == null || string.IsNullOrEmpty(_methodName)) { func = new InvokableCallback(null, null); } else { if (_dynamic) { func = new InvokableCallback(target, methodName); } else { func = GetPersistentMethod(); } } } } public abstract class SerializableCallback : SerializableCallbackBase { public TReturn Invoke(T0 arg0) { if (func == null) Cache(); if (_dynamic) { InvokableCallback call = func as InvokableCallback; return call.Invoke(arg0); } else { return func.Invoke(Args); } } protected override void Cache() { if (_target == null || string.IsNullOrEmpty(_methodName)) { func = new InvokableCallback(null, null); } else { if (_dynamic) { func = new InvokableCallback(target, methodName); } else { func = GetPersistentMethod(); } } } } public abstract class SerializableCallback : SerializableCallbackBase { public TReturn Invoke(T0 arg0, T1 arg1) { if (func == null) Cache(); if (_dynamic) { InvokableCallback call = func as InvokableCallback; return call.Invoke(arg0, arg1); } else { return func.Invoke(Args); } } protected override void Cache() { if (_target == null || string.IsNullOrEmpty(_methodName)) { func = new InvokableCallback(null, null); } else { if (_dynamic) { func = new InvokableCallback(target, methodName); } else { func = GetPersistentMethod(); } } } } public abstract class SerializableCallback : SerializableCallbackBase { public TReturn Invoke(T0 arg0, T1 arg1, T2 arg2) { if (func == null) Cache(); if (_dynamic) { InvokableCallback call = func as InvokableCallback; return call.Invoke(arg0, arg1, arg2); } else { return func.Invoke(Args); } } protected override void Cache() { if (_target == null || string.IsNullOrEmpty(_methodName)) { func = new InvokableCallback(null, null); } else { if (_dynamic) { func = new InvokableCallback(target, methodName); } else { func = GetPersistentMethod(); } } } } public abstract class SerializableCallback : SerializableCallbackBase { public TReturn Invoke(T0 arg0, T1 arg1, T2 arg2, T3 arg3) { if (func == null) Cache(); if (_dynamic) { InvokableCallback call = func as InvokableCallback; 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(null, null); } else { if (_dynamic) { func = new InvokableCallback(target, methodName); } else { func = GetPersistentMethod(); } } } }