WAIT.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Pauses this script for some number of frames.
  6. /// </summary>
  7. internal sealed class WAIT : JsmInstruction
  8. {
  9. private IJsmExpression _frameNumber;
  10. public WAIT(IJsmExpression frameNumber)
  11. {
  12. _frameNumber = frameNumber;
  13. }
  14. public WAIT(Int32 parameter, IStack<IJsmExpression> stack)
  15. : this(
  16. frameNumber: stack.Pop())
  17. {
  18. }
  19. public override String ToString()
  20. {
  21. return $"{nameof(WAIT)}({nameof(_frameNumber)}: {_frameNumber})";
  22. }
  23. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  24. {
  25. sw.Format(formatterContext, services)
  26. .Await()
  27. .StaticType(nameof(IInteractionService))
  28. .Method(nameof(IInteractionService.Wait))
  29. .Argument("frameNumber", _frameNumber)
  30. .Comment(nameof(WAIT));
  31. }
  32. public override IAwaitable TestExecute(IServices services)
  33. {
  34. Int32 frameNumber = _frameNumber.Int32(services);
  35. return ServiceId.Interaction[services].Wait(frameNumber);
  36. }
  37. }
  38. }