Node.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Threading.Tasks;
  3. using Urho.Actions;
  4. namespace Urho
  5. {
  6. partial class Node
  7. {
  8. /// <summary>
  9. /// Runs a sequence of Actions so that it can be awaited.
  10. /// </summary>
  11. /// <param name="actions">An array of FiniteTimeAction objects.</param>
  12. public Task<ActionState> RunActionsAsync(params FiniteTimeAction[] actions)
  13. {
  14. if (actions.Length == 0)
  15. return Task.FromResult<ActionState>(null);
  16. var tcs = new TaskCompletionSource<ActionState>();
  17. var numActions = actions.Length;
  18. var asyncActions = new FiniteTimeAction[actions.Length + 1];
  19. Array.Copy(actions, asyncActions, numActions);
  20. ActionState state = null;
  21. asyncActions[numActions] = new CallFunc(() => tcs.TrySetResult(state));
  22. var asyncAction = asyncActions.Length > 1 ? new Sequence(asyncActions) : asyncActions[0];
  23. state = Application.Current.ActionManager.AddAction(asyncAction, this);
  24. return tcs.Task;
  25. }
  26. public void RunActions(params FiniteTimeAction[] actions)
  27. {
  28. var action = actions.Length > 1 ? new Sequence(actions) : actions[0];
  29. Application.Current.ActionManager.AddAction(action, this);
  30. }
  31. public void RemoveAction(ActionState state)
  32. {
  33. Application.Current.ActionManager.RemoveAction(state);
  34. }
  35. public void RemoveAction(BaseAction action)
  36. {
  37. Application.Current.ActionManager.RemoveAction(action, this);
  38. }
  39. public void RemoveAllActions()
  40. {
  41. Application.Current.ActionManager.RemoveAllActionsFromTarget(this);
  42. }
  43. public void PauseAllActions()
  44. {
  45. Application.Current.ActionManager.PauseTarget(this);
  46. }
  47. public void ResumeAllActions()
  48. {
  49. Application.Current.ActionManager.ResumeTarget(this);
  50. }
  51. }
  52. }