SETLINE.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. namespace OpenVIII.Fields.Scripts.Instructions
  2. {
  3. /// <summary>
  4. /// Sets the bounds of this line object (for its touchOn, touchOff, and across scripts).
  5. /// Lines are actually 3d hitboxes, not lines.
  6. /// </summary>
  7. internal sealed class SETLINE : JsmInstruction
  8. {
  9. #region Fields
  10. private readonly Coords3D _p1;
  11. private readonly Coords3D _p2;
  12. #endregion Fields
  13. #region Constructors
  14. public SETLINE(int x1, int y1, int z1, int x2, int y2, int z2)
  15. {
  16. _p1 = new Coords3D(x1, y1, z1);
  17. _p2 = new Coords3D(x2, y2, z2);
  18. }
  19. public SETLINE(int parameter, IStack<IJsmExpression> stack)
  20. : this(
  21. z2: ((IConstExpression)stack.Pop()).Int32(),
  22. y2: ((IConstExpression)stack.Pop()).Int32(),
  23. x2: ((IConstExpression)stack.Pop()).Int32(),
  24. z1: ((IConstExpression)stack.Pop()).Int32(),
  25. y1: ((IConstExpression)stack.Pop()).Int32(),
  26. x1: ((IConstExpression)stack.Pop()).Int32())
  27. {
  28. }
  29. #endregion Constructors
  30. #region Methods
  31. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  32. .Property(nameof(FieldObject.Model))
  33. .Method(nameof(FieldObjectModel.SetHitBox))
  34. .Argument("p1", _p1.ToString())
  35. .Argument("p2", _p2.ToString())
  36. .Comment(nameof(SETLINE));
  37. public override IAwaitable TestExecute(IServices services)
  38. {
  39. var currentObject = ServiceId.Field[services].Engine.CurrentObject;
  40. currentObject.Model.SetHitBox(_p1, _p2);
  41. return DummyAwaitable.Instance;
  42. }
  43. public override string ToString() => $"{nameof(SETLINE)}({nameof(_p1)}: {_p1}, {nameof(_p2)}: {_p2})";
  44. #endregion Methods
  45. }
  46. }