CANIME.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. namespace OpenVIII.Fields.Scripts.Instructions
  2. {
  3. /// <summary>
  4. /// <para>Play an animation.</para>
  5. /// <para>ANIME, CANIME, RANIME, RCANIME, ANIMEKEEP, CANIMEKEEP, RANIMEKEEP, RCANIMEKEEP</para>
  6. /// <para>R - Async (don't wait for the animation)</para>
  7. /// <para>C - Range (play frame range)</para>
  8. /// <para>KEEP - Freeze (don't return the base animation, freeze on the last frame)</para>
  9. /// </summary>
  10. /// <see cref="http://wiki.ffrtt.ru/index.php?title=FF8/Field/Script/Opcodes/02F_CANIME"/>
  11. public sealed class CANIME : Abstract.ANIMELOOP
  12. {
  13. #region Constructors
  14. public CANIME(int animationId, int firstFrame, int lastFrame) : base(animationId, firstFrame, lastFrame)
  15. {
  16. }
  17. public CANIME(int animationId, IStack<IJsmExpression> stack) : base(animationId, stack)
  18. {
  19. }
  20. #endregion Constructors
  21. #region Methods
  22. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  23. .Await()
  24. .Property(nameof(FieldObject.Animation))
  25. .Method(nameof(FieldObjectAnimation.Play))
  26. .Argument("animationId", _animationId)
  27. .Argument("firstFrame", _firstFrame)
  28. .Argument("lastFrame", _lastFrame)
  29. .Comment(nameof(CANIME));
  30. public override IAwaitable TestExecute(IServices services) =>
  31. // Sync call
  32. ServiceId.Field[services].Engine.CurrentObject.Animation.Play(_animationId, _firstFrame, _lastFrame, freeze: false);
  33. public override string ToString() => $"{nameof(CANIME)}({nameof(_animationId)}: {_animationId}, {nameof(_lastFrame)}: {_lastFrame}, {nameof(_firstFrame)}: {_firstFrame})";
  34. #endregion Methods
  35. }
  36. }