HOLD.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Sets whether the PC character can be moved/selected in the switch menu.
  6. /// </summary>
  7. internal sealed class HOLD : JsmInstruction
  8. {
  9. private IJsmExpression _characterId;
  10. private Boolean _isSwitchable;
  11. private Boolean _isSelectable;
  12. public HOLD(IJsmExpression characterId, Boolean isSwitchable, Boolean isSelectable)
  13. {
  14. _characterId = characterId;
  15. _isSwitchable = isSwitchable;
  16. _isSelectable = isSelectable;
  17. }
  18. public HOLD(Int32 parameter, IStack<IJsmExpression> stack)
  19. : this(
  20. isSelectable: ((Jsm.Expression.PSHN_L)stack.Pop()).Boolean(),
  21. isSwitchable: ((Jsm.Expression.PSHN_L)stack.Pop()).Boolean(),
  22. characterId: stack.Pop())
  23. {
  24. }
  25. public override String ToString()
  26. {
  27. return $"{nameof(HOLD)}({nameof(_characterId)}: {_characterId}, {nameof(_isSwitchable)}: {_isSwitchable}, {nameof(_isSelectable)}: {_isSelectable})";
  28. }
  29. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  30. {
  31. sw.Format(formatterContext, services)
  32. .StaticType(nameof(IPartyService))
  33. .Method(nameof(IPartyService.ChangeCharacterState))
  34. .Enum<Characters>(_characterId)
  35. .Argument("isSwitchable", _isSwitchable)
  36. .Argument("isSelectable", _isSelectable)
  37. .Comment(nameof(HOLD));
  38. }
  39. public override IAwaitable TestExecute(IServices services)
  40. {
  41. Characters characterId = (Characters)_characterId.Int32(services);
  42. ServiceId.Party[services].ChangeCharacterState(characterId, _isSwitchable, _isSelectable);
  43. return DummyAwaitable.Instance;
  44. }
  45. }
  46. }