DIR.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Make this entity face "Angle" in degrees.
  6. /// </summary>
  7. internal sealed class DIR : JsmInstruction
  8. {
  9. private IJsmExpression _angle;
  10. public DIR(IJsmExpression angle)
  11. {
  12. _angle = angle;
  13. }
  14. public DIR(Int32 parameter, IStack<IJsmExpression> stack)
  15. : this(
  16. angle: stack.Pop())
  17. {
  18. }
  19. public override String ToString()
  20. {
  21. return $"{nameof(DIR)}({nameof(_angle)}: {_angle})";
  22. }
  23. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  24. {
  25. sw.Format(formatterContext, services)
  26. .Property(nameof(FieldObject.Model))
  27. .Method(nameof(FieldObjectModel.SetDirection))
  28. .Argument("angle256", _angle)
  29. .Comment(nameof(SET3));
  30. }
  31. public override IAwaitable TestExecute(IServices services)
  32. {
  33. FieldObject currentObject = ServiceId.Field[services].Engine.CurrentObject;
  34. currentObject.Model.SetDirection(Degrees.FromAngle256(_angle.Int32(services)));
  35. return DummyAwaitable.Instance;
  36. }
  37. }
  38. }