TimelineStateSwitch.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #if CHRONOS_PLAYMAKER
  2. using HutongGames.PlayMaker;
  3. namespace Chronos.PlayMaker
  4. {
  5. [ActionCategory("Chronos")]
  6. [Tooltip("Sends events based on the current state of a timeline.")]
  7. [HelpUrl("http://ludiq.io/chronos/documentation#Timeline.state")]
  8. public class TimelineStateSwitch : ChronosComponentAction<Timeline>
  9. {
  10. [RequiredField]
  11. [CheckForComponent(typeof(Timeline))]
  12. public FsmOwnerDefault gameObject;
  13. public FsmEvent accelerated;
  14. public FsmEvent normal;
  15. public FsmEvent slowed;
  16. public FsmEvent paused;
  17. public FsmEvent reversed;
  18. public bool everyFrame;
  19. public override void Reset()
  20. {
  21. gameObject = null;
  22. accelerated = null;
  23. normal = null;
  24. slowed = null;
  25. paused = null;
  26. reversed = null;
  27. everyFrame = false;
  28. }
  29. public override void OnEnter()
  30. {
  31. DoAction();
  32. if (!everyFrame)
  33. {
  34. Finish();
  35. }
  36. }
  37. public override void OnUpdate()
  38. {
  39. DoAction();
  40. }
  41. private void DoAction()
  42. {
  43. if (!UpdateCache(Fsm.GetOwnerDefaultTarget(gameObject))) return;
  44. switch (timeline.state)
  45. {
  46. case TimeState.Accelerated:
  47. Fsm.Event(accelerated);
  48. break;
  49. case TimeState.Normal:
  50. Fsm.Event(normal);
  51. break;
  52. case TimeState.Slowed:
  53. Fsm.Event(slowed);
  54. break;
  55. case TimeState.Paused:
  56. Fsm.Event(paused);
  57. break;
  58. case TimeState.Reversed:
  59. Fsm.Event(reversed);
  60. break;
  61. }
  62. }
  63. }
  64. }
  65. #endif