HOLD.cs 2.0 KB

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