Added support for parameter-less CallbackActions and CallbackEvents

This commit is contained in:
Kah Wei 2022-11-08 15:02:08 +08:00
parent 2ab8efb097
commit ee814fa61d
5 changed files with 219 additions and 36 deletions

View File

@ -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.

View File

@ -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;
} }

View File

@ -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>

View File

@ -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
{ {

View File

@ -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);