AMES.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Microsoft.Xna.Framework;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Pop up a message window until WINCLOSE or MESSYNC is called.
  6. /// </summary>
  7. public sealed class AMES : JsmInstruction
  8. {
  9. #region Fields
  10. /// <summary>
  11. /// Message Channel
  12. /// </summary>
  13. private readonly int _channel;
  14. /// <summary>
  15. /// Field message ID
  16. /// </summary>
  17. private readonly int _messageId;
  18. /// <summary>
  19. /// position of window
  20. /// </summary>
  21. private readonly Point _pos;
  22. #endregion Fields
  23. #region Constructors
  24. public AMES(int channel, int messageId, int posX, int posY)
  25. {
  26. _channel = channel;
  27. _messageId = messageId;
  28. (_pos.X, _pos.Y) = (posX, posY);
  29. }
  30. public AMES(int parameter, IStack<IJsmExpression> stack)
  31. : this(
  32. posY: ((Jsm.Expression.PSHN_L)stack.Pop()).Int32(),
  33. posX: ((Jsm.Expression.PSHN_L)stack.Pop()).Int32(),
  34. messageId: ((Jsm.Expression.PSHN_L)stack.Pop()).Int32(),
  35. channel: ((Jsm.Expression.PSHN_L)stack.Pop()).Int32())
  36. {
  37. }
  38. #endregion Constructors
  39. #region Methods
  40. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  41. {
  42. FormatHelper.FormatMonologue(sw, formatterContext.GetMessage(_messageId));
  43. sw.Format(formatterContext, services)
  44. .StaticType(nameof(IMessageService))
  45. .Method(nameof(IMessageService.Show))
  46. .Argument("channel", _channel)
  47. .Argument("messageId", _messageId)
  48. .Argument("posX", _pos.X)
  49. .Argument("posY", _pos.Y)
  50. .Comment(nameof(AMES));
  51. }
  52. public override IAwaitable TestExecute(IServices services)
  53. {
  54. ServiceId.Message[services].Show(_channel, _messageId, _pos.X, _pos.Y);
  55. return DummyAwaitable.Instance;
  56. }
  57. public override string ToString() => $"{nameof(AMES)}({nameof(_channel)}: {_channel}, {nameof(_messageId)}: {_messageId}, {nameof(_pos)}: {_pos})";
  58. #endregion Methods
  59. }
  60. }