SET3.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Place this entity's model at XCoord, YCoord, ZCoord standing on the given walkmesh triangle.
  6. /// </summary>
  7. internal sealed class SET3 : JsmInstruction
  8. {
  9. private Int32 _walkmeshTriangleId;
  10. private Int32 _x;
  11. private Int32 _y;
  12. private Int32 _z;
  13. public SET3(Int32 walkmeshTriangleId, Int32 x, Int32 y, Int32 z)
  14. {
  15. _walkmeshTriangleId = walkmeshTriangleId;
  16. _x = x;
  17. _y = y;
  18. _z = z;
  19. }
  20. public SET3(Int32 walkmeshTriangleId, IStack<IJsmExpression> stack)
  21. : this(walkmeshTriangleId,
  22. z: ((IConstExpression)stack.Pop()).Int32(),
  23. y: ((IConstExpression)stack.Pop()).Int32(),
  24. x: ((IConstExpression)stack.Pop()).Int32())
  25. {
  26. }
  27. public override String ToString()
  28. {
  29. return $"{nameof(SET3)}({nameof(_walkmeshTriangleId)}: {_walkmeshTriangleId}, {nameof(_x)}: {_x}, {nameof(_y)}: {_y}, {nameof(_z)}: {_z})";
  30. }
  31. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  32. {
  33. sw.Format(formatterContext, services)
  34. .Property(nameof(FieldObject.Model))
  35. .Method(nameof(FieldObjectModel.SetPosition))
  36. .Argument("walkmeshTriangleId", _walkmeshTriangleId)
  37. .Argument("x", _x)
  38. .Argument("y", _y)
  39. .Argument("z", _z)
  40. .Comment(nameof(SET3));
  41. }
  42. public override IAwaitable TestExecute(IServices services)
  43. {
  44. FieldObject currentObject = ServiceId.Field[services].Engine.CurrentObject;
  45. currentObject.Model.SetPosition(new WalkmeshCoords(_walkmeshTriangleId, _x, _y, _z));
  46. return DummyAwaitable.Instance;
  47. }
  48. }
  49. }