Merge pull request #183 from SHADE-DP/SP3-6-c-scripting
Added support for parameter-less CallbackEvent and CallbackAction in C#
This commit is contained in:
commit
80ab010b4b
|
@ -34,6 +34,99 @@ namespace SHADE
|
||||||
Object TargetObject { get; }
|
Object TargetObject { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a function call that can be serialised and put togetheer with scripts.
|
||||||
|
/// This variant accepts functions with 0 parameter.
|
||||||
|
/// </summary>
|
||||||
|
public class CallbackAction : ICallbackAction
|
||||||
|
{
|
||||||
|
#region Properties ------------------------------------------------------------
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public Object TargetObject { get; private set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public string TargetMethodName => targetMethod == null ? "" : targetMethod.Name;
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public bool IsRuntimeAction => targetAction != null;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Fields ------------------------------------------------------------------
|
||||||
|
private MethodInfo targetMethod;
|
||||||
|
private Action targetAction;
|
||||||
|
private Object[] parameters;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructors ------------------------------------------------------------
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs an empty Callback action.
|
||||||
|
/// </summary>
|
||||||
|
public CallbackAction() {}
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a CallbackAction that represents a call to the specified static
|
||||||
|
/// method.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method">Method to call.</param>
|
||||||
|
/// <exception cref="ArgumentException">
|
||||||
|
/// Thrown if a method that is not compatible with the target is specified. The method's
|
||||||
|
/// source type must match the target's type.
|
||||||
|
/// </exception>
|
||||||
|
public CallbackAction(MethodInfo method)
|
||||||
|
{
|
||||||
|
// No errors, assign
|
||||||
|
targetMethod = method;
|
||||||
|
|
||||||
|
// Create storage for parameters for calling
|
||||||
|
parameters = new Object[0];
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a CallbackAction that represents a call to a specified member
|
||||||
|
/// method on the specified target.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="target">Object to call the method on.</param>
|
||||||
|
/// <param name="method">Method to call.</param>
|
||||||
|
/// <exception cref="ArgumentException">
|
||||||
|
/// Thrown if a method that is not compatible with the target is specified. The method's
|
||||||
|
/// source type must match the target's type.
|
||||||
|
/// </exception>
|
||||||
|
public CallbackAction(Object target, MethodInfo method)
|
||||||
|
{
|
||||||
|
// Error Checks
|
||||||
|
if (method.DeclaringType != target.GetType())
|
||||||
|
throw new ArgumentException("[CallbackAction] Attempted register an action using an incompatible target object and method.");
|
||||||
|
|
||||||
|
// No errors, assign
|
||||||
|
TargetObject = target;
|
||||||
|
targetMethod = method;
|
||||||
|
|
||||||
|
// Create storage for parameters for calling
|
||||||
|
parameters = new Object[0];
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a Callback action based on an action.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action">Action that wraps a function to be called.</param>
|
||||||
|
public CallbackAction(Action action)
|
||||||
|
{
|
||||||
|
targetAction = action;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Usage Functions ---------------------------------------------------------
|
||||||
|
/// <summary>
|
||||||
|
/// Invokes the CallbackAction's stored method/action with the specified parameters.
|
||||||
|
/// </summary>
|
||||||
|
public void Invoke()
|
||||||
|
{
|
||||||
|
if (targetAction != null)
|
||||||
|
{
|
||||||
|
targetAction.Invoke();
|
||||||
|
}
|
||||||
|
else if (targetMethod != null)
|
||||||
|
{
|
||||||
|
_ = targetMethod.Invoke(TargetObject, parameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents a function call that can be serialised and put togetheer with scripts.
|
/// Represents a function call that can be serialised and put togetheer with scripts.
|
||||||
/// This variant accepts functions with 1 parameter.
|
/// This variant accepts functions with 1 parameter.
|
||||||
|
|
|
@ -50,12 +50,12 @@ namespace SHADE
|
||||||
Object TargetObject { get; }
|
Object TargetObject { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
<# for (int i = 1; i <= max; ++i) { #>
|
<# for (int i = 0; i <= max; ++i) { #>
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents a function call that can be serialised and put togetheer with scripts.
|
/// Represents a function call that can be serialised and put togetheer with scripts.
|
||||||
/// This variant accepts functions with <#=i#> parameter<# if (i > 1) {#>s<#} #>.
|
/// This variant accepts functions with <#=i#> parameter<# if (i > 1) {#>s<#} #>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> : ICallbackAction
|
public class CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> : ICallbackAction
|
||||||
{
|
{
|
||||||
#region Properties ------------------------------------------------------------
|
#region Properties ------------------------------------------------------------
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
@ -68,7 +68,7 @@ namespace SHADE
|
||||||
|
|
||||||
#region Fields ------------------------------------------------------------------
|
#region Fields ------------------------------------------------------------------
|
||||||
private MethodInfo targetMethod;
|
private MethodInfo targetMethod;
|
||||||
private Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> targetAction;
|
private Action<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> targetAction;
|
||||||
private Object[] parameters;
|
private Object[] parameters;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ namespace SHADE
|
||||||
/// Constructs a Callback action based on an action.
|
/// Constructs a Callback action based on an action.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">Action that wraps a function to be called.</param>
|
/// <param name="action">Action that wraps a function to be called.</param>
|
||||||
public CallbackAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action)
|
public CallbackAction(Action<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action)
|
||||||
{
|
{
|
||||||
targetAction = action;
|
targetAction = action;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,92 @@ namespace SHADE
|
||||||
IEnumerable<ICallbackAction> Actions { get; }
|
IEnumerable<ICallbackAction> Actions { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A container of CallbackActions that is correlated to a specific scenario as
|
||||||
|
/// specified by the user of this class.
|
||||||
|
/// This variant accepts CallbackEvents with 1 generic parameter.
|
||||||
|
/// </summary>
|
||||||
|
public class CallbackEvent : ICallbackEvent
|
||||||
|
{
|
||||||
|
#region Properties --------------------------------------------------------------
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public IEnumerable<ICallbackAction> Actions => actions;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Fields ------------------------------------------------------------------
|
||||||
|
private List<ICallbackAction> actions = new List<ICallbackAction>();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Usage Functions ---------------------------------------------------------
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void RegisterAction()
|
||||||
|
{
|
||||||
|
actions.Add(new CallbackAction());
|
||||||
|
}
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void RegisterAction(ICallbackAction action)
|
||||||
|
{
|
||||||
|
// Check if valid action
|
||||||
|
if (action.GetType() != typeof(CallbackAction))
|
||||||
|
{
|
||||||
|
Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
actions.Add(action);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a CallbackAction into the event.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action">CallbackAction to add.</param>
|
||||||
|
public void RegisterAction(CallbackAction action)
|
||||||
|
{
|
||||||
|
actions.Add(action);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
|
public void RegisterAction(Action action)
|
||||||
|
{
|
||||||
|
actions.Add(new CallbackAction(action));
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="target">Object to call the method on.</param>
|
||||||
|
/// <param name="method">Method to call.</param>
|
||||||
|
public void RegisterAction(Object target, MethodInfo method)
|
||||||
|
{
|
||||||
|
actions.Add(new CallbackAction(target, method));
|
||||||
|
}
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void DeregisterAction(ICallbackAction action)
|
||||||
|
{
|
||||||
|
if (!actions.Remove(action))
|
||||||
|
{
|
||||||
|
Debug.LogWarning("Attempted to deregister invalid action. Ignored.", this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Invokes all stored CallbackActions with the specified parameters.
|
||||||
|
/// </summary>
|
||||||
|
public void Invoke()
|
||||||
|
{
|
||||||
|
foreach (CallbackAction action in actions)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
action.Invoke();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.LogException(e, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A container of CallbackActions that is correlated to a specific scenario as
|
/// A container of CallbackActions that is correlated to a specific scenario as
|
||||||
/// specified by the user of this class.
|
/// specified by the user of this class.
|
||||||
|
@ -88,7 +174,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1> action)
|
public void RegisterAction(Action<T1> action)
|
||||||
|
@ -96,7 +182,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1>(action));
|
actions.Add(new CallbackAction<T1>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -174,7 +260,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2> action)
|
public void RegisterAction(Action<T1, T2> action)
|
||||||
|
@ -182,7 +268,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2>(action));
|
actions.Add(new CallbackAction<T1, T2>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -260,7 +346,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3> action)
|
public void RegisterAction(Action<T1, T2, T3> action)
|
||||||
|
@ -268,7 +354,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3>(action));
|
actions.Add(new CallbackAction<T1, T2, T3>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -346,7 +432,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4> action)
|
public void RegisterAction(Action<T1, T2, T3, T4> action)
|
||||||
|
@ -354,7 +440,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -432,7 +518,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4, T5> action)
|
public void RegisterAction(Action<T1, T2, T3, T4, T5> action)
|
||||||
|
@ -440,7 +526,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4, T5>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4, T5>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -518,7 +604,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6> action)
|
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6> action)
|
||||||
|
@ -526,7 +612,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -604,7 +690,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7> action)
|
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7> action)
|
||||||
|
@ -612,7 +698,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -690,7 +776,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7, T8> action)
|
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7, T8> action)
|
||||||
|
@ -698,7 +784,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7, T8>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7, T8>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -776,7 +862,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7, T8, T9> action)
|
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7, T8, T9> action)
|
||||||
|
@ -784,7 +870,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7, T8, T9>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7, T8, T9>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
@ -862,7 +948,7 @@ namespace SHADE
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> action)
|
public void RegisterAction(Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> action)
|
||||||
|
@ -870,7 +956,7 @@ namespace SHADE
|
||||||
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(action));
|
actions.Add(new CallbackAction<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
|
|
|
@ -61,13 +61,13 @@ namespace SHADE
|
||||||
IEnumerable<ICallbackAction> Actions { get; }
|
IEnumerable<ICallbackAction> Actions { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
<# for (int i = 1; i <= max; ++i) { #>
|
<# for (int i = 0; i <= max; ++i) { #>
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A container of CallbackActions that is correlated to a specific scenario as
|
/// A container of CallbackActions that is correlated to a specific scenario as
|
||||||
/// specified by the user of this class.
|
/// specified by the user of this class.
|
||||||
/// This variant accepts CallbackEvents with 1 generic parameter.
|
/// This variant accepts CallbackEvents with 1 generic parameter.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class CallbackEvent<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> : ICallbackEvent
|
public class CallbackEvent<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> : ICallbackEvent
|
||||||
{
|
{
|
||||||
#region Properties --------------------------------------------------------------
|
#region Properties --------------------------------------------------------------
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
@ -82,13 +82,13 @@ namespace SHADE
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void RegisterAction()
|
public void RegisterAction()
|
||||||
{
|
{
|
||||||
actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>());
|
actions.Add(new CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>());
|
||||||
}
|
}
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void RegisterAction(ICallbackAction action)
|
public void RegisterAction(ICallbackAction action)
|
||||||
{
|
{
|
||||||
// Check if valid action
|
// Check if valid action
|
||||||
if (action.GetType() != typeof(CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>))
|
if (action.GetType() != typeof(CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>))
|
||||||
{
|
{
|
||||||
Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this);
|
Debug.LogWarning("Attempted to register an invalid CallbackAction type. Ignoring.", this);
|
||||||
return;
|
return;
|
||||||
|
@ -100,26 +100,26 @@ namespace SHADE
|
||||||
/// Adds a CallbackAction into the event.
|
/// Adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">CallbackAction to add.</param>
|
/// <param name="action">CallbackAction to add.</param>
|
||||||
public void RegisterAction(CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action)
|
public void RegisterAction(CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action)
|
||||||
{
|
{
|
||||||
actions.Add(action);
|
actions.Add(action);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
/// <param name="action">System.Action to add as a CallbackAction.</param>
|
||||||
public void RegisterAction(Action<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action)
|
public void RegisterAction(Action<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action)
|
||||||
{
|
{
|
||||||
actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>(action));
|
actions.Add(new CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>(action));
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs and adds a CallbackACtion into the event.
|
/// Constructs and adds a CallbackAction into the event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="target">Object to call the method on.</param>
|
/// <param name="target">Object to call the method on.</param>
|
||||||
/// <param name="method">Method to call.</param>
|
/// <param name="method">Method to call.</param>
|
||||||
public void RegisterAction(Object target, MethodInfo method)
|
public void RegisterAction(Object target, MethodInfo method)
|
||||||
{
|
{
|
||||||
actions.Add(new CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>>(target, method));
|
actions.Add(new CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #>(target, method));
|
||||||
}
|
}
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void DeregisterAction(ICallbackAction action)
|
public void DeregisterAction(ICallbackAction action)
|
||||||
|
@ -132,9 +132,9 @@ namespace SHADE
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Invokes all stored CallbackActions with the specified parameters.
|
/// Invokes all stored CallbackActions with the specified parameters.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Invoke(<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#> t<#=t#><# if (t != i) { #>, <# } #><# } #>)
|
public void Invoke(<# if (i != 0) { for (int t = 1; t < i + 1; ++t) { #>T<#=t#> t<#=t#><# if (t != i) { #>, <# } #><# } } #>)
|
||||||
{
|
{
|
||||||
foreach (CallbackAction<<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>> action in actions)
|
foreach (CallbackAction<# if (i != 0) { #><<# for (int t = 1; t < i + 1; ++t) { #>T<#=t#><# if (t != i) { #>, <# } #><# } #>><# } #> action in actions)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,8 @@ public class RaccoonSpin : Script
|
||||||
private float RotateSpeed = 1.0f;
|
private float RotateSpeed = 1.0f;
|
||||||
private float rotation = 0.0f;
|
private float rotation = 0.0f;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
|
private CallbackEvent emptyEvent;
|
||||||
|
[SerializeField]
|
||||||
private CallbackEvent<int> testEvent;
|
private CallbackEvent<int> testEvent;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private CallbackEvent<int, double, Vector3> testEvent3 = new CallbackEvent<int, double, Vector3>();
|
private CallbackEvent<int, double, Vector3> testEvent3 = new CallbackEvent<int, double, Vector3>();
|
||||||
|
@ -17,6 +19,8 @@ public class RaccoonSpin : Script
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
|
emptyEvent = new CallbackEvent();
|
||||||
|
emptyEvent.RegisterAction(() => Debug.Log("Empty event action!"));
|
||||||
testEvent = new CallbackEvent<int>();
|
testEvent = new CallbackEvent<int>();
|
||||||
Action<int> action = (x) => Debug.Log($"{x}");
|
Action<int> action = (x) => Debug.Log($"{x}");
|
||||||
testEvent.RegisterAction(action);
|
testEvent.RegisterAction(action);
|
||||||
|
|
Loading…
Reference in New Issue