HALT.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. namespace OpenVIII.Fields.Scripts.Instructions
  2. {
  3. /// <summary>
  4. /// Exits the current script and all scripts that are waiting on it. To end only the current script, use RET instead.
  5. /// </summary>
  6. /// <see cref="http://wiki.ffrtt.ru/index.php?title=FF8/Field/Script/Opcodes/01C_HALT"/>
  7. public sealed class HALT : JsmInstruction
  8. {
  9. #region Fields
  10. /// <summary>
  11. /// Always 0.
  12. /// </summary>
  13. private readonly int _parameter;
  14. #endregion Fields
  15. #region Constructors
  16. public HALT(int parameter) => _parameter = parameter;
  17. public HALT(int parameter, IStack<IJsmExpression> stack)
  18. : this(parameter)
  19. {
  20. }
  21. #endregion Constructors
  22. #region Methods
  23. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  24. .Property(nameof(FieldObject.Scripts))
  25. .Method(nameof(FieldObjectScripts.CancelAll))
  26. .Comment(nameof(HALT));
  27. public override IAwaitable TestExecute(IServices services)
  28. {
  29. var currentObject = ServiceId.Field[services].Engine.CurrentObject;
  30. currentObject.Scripts.CancelAll();
  31. return BreakAwaitable.Instance;
  32. }
  33. public override string ToString() => $"{nameof(HALT)}({nameof(_parameter)}: {_parameter})";
  34. #endregion Methods
  35. }
  36. }