#if GRAPH_DESIGNER /// --------------------------------------------- /// Behavior Designer /// Copyright (c) Opsive. All Rights Reserved. /// https://www.opsive.com /// --------------------------------------------- namespace Opsive.BehaviorDesigner.Runtime.Tasks { using Opsive.GraphDesigner.Runtime; using Opsive.GraphDesigner.Runtime.Variables; using Opsive.Shared.Utility; using System; using System.Reflection; using UnityEngine; /// /// The TaskDelegateBase task is an abstract class used for any action classes that use reflection to execute the action. /// [HideInFilterWindow] public abstract class TaskDelegateBase : Task, IAction { [Tooltip("The object that the delegate belongs to. Can be null for static variables.")] [SerializeField] [HideInInspector] protected SharedVariable m_Target; [Tooltip("The type of delegate that should be created.")] [SerializeField] [HideInInspector] protected string m_ReflectedType; [Tooltip("The type of parameters that the delegate uses.")] [SerializeField] [HideInInspector] protected string[] m_ParameterTypes; [Tooltip("The name of the method that should be called by the delegate.")] [SerializeField] [HideInInspector] protected string m_MethodName; public SharedVariable Target => m_Target; public string ReflectedType => m_ReflectedType; public string[] ParameterTypes => m_ParameterTypes; public string MethodName => m_MethodName; protected bool m_ConditionalTask; /// /// Binds the task to the specified method. /// /// The MethodInfo to bind the task to. internal void Bind(MethodInfo methodInfo) { m_ReflectedType = methodInfo.ReflectedType.FullName; var parameters = methodInfo.GetParameters(); if (parameters != null && parameters.Length > 0) { m_ParameterTypes = new string[parameters.Length]; for (int i = 0; i < parameters.Length; ++i) { m_ParameterTypes[i] = parameters[i].ParameterType.FullName; } } m_MethodName = methodInfo.Name; } /// /// Initializes the task. /// /// A reference to the owning BehaviorTree. /// Does the delegate belong to an IConditional task? /// The runtime index of the node. internal void Initialize(BehaviorTree behaviorTree, ushort runtimeIndex, bool conditionalTask) { m_ConditionalTask = conditionalTask; base.Initialize(behaviorTree, runtimeIndex); } /// /// Callback when the behavior tree is initialized. /// public override void OnAwake() { base.OnAwake(); CreateDelegate(); if (m_Target != null) { m_Target.OnValueChange += CreateDelegate; } } /// /// Creates the task delegate. /// protected virtual void CreateDelegate() { } /// /// Returns the target value. /// /// The target value. protected object GetTargetValue() { // The target will be null if no SharedVariable value has been assigned. var target = m_Target.GetValue(); if (target == null) { var targetType = m_ReflectedType.Replace("UnityEngine.", string.Empty); if (string.Equals(targetType, "GameObject")) { return m_GameObject; } var value = m_GameObject.GetComponent(targetType); if (value == null) { var splitType = m_ReflectedType.Split("."); value = m_GameObject.GetComponent(splitType[splitType.Length - 1]); if (value == null) { Debug.LogError($"Error: Unable to find the component {m_ReflectedType} on the {m_GameObject.name} GameObject."); } } return value; } return target; } /// /// Returns the method from the given type and name. /// /// The object type that the method belongs to. /// The name of the method. /// The types of parameters that the method uses. /// The method from the given type and name. protected static MethodInfo GetMethod(string reflectedType, string methodName, string[] parameterTypeNames) { var type = TypeUtility.GetType(reflectedType); if (type == null) { Debug.LogError($"Error: Unable to find the type {reflectedType}."); return null; } Type[] parameterTypes; if (parameterTypeNames != null) { parameterTypes = new Type[parameterTypeNames.Length]; for (int i = 0; i < parameterTypeNames.Length; ++i) { parameterTypes[i] = TypeUtility.GetType(parameterTypeNames[i]); if (parameterTypes[i] == null) { Debug.LogError($"Error: Unable to find the parameter type {parameterTypeNames[i]}."); return null; } } } else { parameterTypes = new Type[0]; } // Get the method based on the type and parameter types. var method = type.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static, null, parameterTypes, null); if (method == null) { Debug.LogError($"Error: Unable to find the method {methodName} on type {type}."); return null; } return method; } /// /// Specifies the type of reflection that should be used to save the task. /// /// The index of the sub-task. This is used for the task set allowing each contained task to have their own save type. public override MemberVisibility GetSaveReflectionType(int index) { return MemberVisibility.Public; } /// /// Returns a friendly name for the task. /// /// A friendly name for the task. public override string ToString() { return m_MethodName; } } /// /// Task which executes a delegate with no parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(System.Action)) as System.Action; } else { m_Delegate = method.CreateDelegate(typeof(System.Action), GetTargetValue()) as System.Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(); return TaskStatus.Success; } } /// /// Task which executes a delegate with no parameters but a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with one parameter. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with one parameter and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with two parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with two parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with three parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with three parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with four parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with four parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with five parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with five parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with six parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with six parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with seven parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with seven parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with eight parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The eigth parameter.")] [SerializeField] protected SharedVariable m_Parameter8; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with eight parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The eigth parameter.")] [SerializeField] protected SharedVariable m_Parameter8; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with nine parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The eigth parameter.")] [SerializeField] protected SharedVariable m_Parameter8; [Tooltip("The ninth parameter.")] [SerializeField] protected SharedVariable m_Parameter9; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with nine parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The eigth parameter.")] [SerializeField] protected SharedVariable m_Parameter8; [Tooltip("The ninth parameter.")] [SerializeField] protected SharedVariable m_Parameter9; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } /// /// Task which executes a delegate with ten parameters. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The eigth parameter.")] [SerializeField] protected SharedVariable m_Parameter8; [Tooltip("The ninth parameter.")] [SerializeField] protected SharedVariable m_Parameter9; [Tooltip("The tenth parameter.")] [SerializeField] protected SharedVariable m_Parameter10; private Action m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Action)) as Action; } else { m_Delegate = method.CreateDelegate(typeof(Action), GetTargetValue()) as Action; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value, m_Parameter10.Value); return TaskStatus.Success; } } /// /// Task which executes a delegate with ten parameters and a returned value. /// [NodeIcon("3bbdfa553da4d554e9d74f8d88915aac", "6437308e972f99f48953f20198fd4e94")] public class TaskValueDelegate : TaskDelegateBase { [Tooltip("The first parameter.")] [SerializeField] protected SharedVariable m_Parameter1; [Tooltip("The second parameter.")] [SerializeField] protected SharedVariable m_Parameter2; [Tooltip("The third parameter.")] [SerializeField] protected SharedVariable m_Parameter3; [Tooltip("The fourth parameter.")] [SerializeField] protected SharedVariable m_Parameter4; [Tooltip("The fifth parameter.")] [SerializeField] protected SharedVariable m_Parameter5; [Tooltip("The sixth parameter.")] [SerializeField] protected SharedVariable m_Parameter6; [Tooltip("The seventh parameter.")] [SerializeField] protected SharedVariable m_Parameter7; [Tooltip("The eigth parameter.")] [SerializeField] protected SharedVariable m_Parameter8; [Tooltip("The ninth parameter.")] [SerializeField] protected SharedVariable m_Parameter9; [Tooltip("The tenth parameter.")] [SerializeField] protected SharedVariable m_Parameter10; [Tooltip("The returned result.")] [SerializeField] [RequireShared] protected SharedVariable m_Result; private Func m_Delegate; /// /// Creates the task delegate. /// protected override void CreateDelegate() { var method = GetMethod(m_ReflectedType, m_MethodName, m_ParameterTypes); if (method == null) { return; } if (method.IsStatic) { m_Delegate = method.CreateDelegate(typeof(Func)) as Func; } else { m_Delegate = method.CreateDelegate(typeof(Func), GetTargetValue()) as Func; } } /// /// Invokes the delegate. /// /// The status of the task. public override TaskStatus OnUpdate() { m_Result.Value = m_Delegate(m_Parameter1.Value, m_Parameter2.Value, m_Parameter3.Value, m_Parameter4.Value, m_Parameter5.Value, m_Parameter6.Value, m_Parameter7.Value, m_Parameter8.Value, m_Parameter9.Value, m_Parameter10.Value); if (m_ConditionalTask) { return Convert.ToBoolean(m_Result.Value) ? TaskStatus.Success : TaskStatus.Failure; } return TaskStatus.Success; } } } #endif