Node.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 RemoveAllActions()
  27. {
  28. Application.Current.ActionManager.RemoveAllActionsFromTarget(this);
  29. }
  30. public void PauseAllActions()
  31. {
  32. Application.Current.ActionManager.PauseTarget(this);
  33. }
  34. public void ResumeAllActions()
  35. {
  36. Application.Current.ActionManager.ResumeTarget(this);
  37. }
  38. }
  39. }