MSPEED.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Sets this entity's movement speed.
  6. /// </summary>
  7. internal sealed class MSPEED : JsmInstruction
  8. {
  9. private IJsmExpression _speed;
  10. public MSPEED(IJsmExpression speed)
  11. {
  12. _speed = speed;
  13. }
  14. public MSPEED(Int32 parameter, IStack<IJsmExpression> stack)
  15. : this(
  16. speed: stack.Pop())
  17. {
  18. }
  19. public override String ToString()
  20. {
  21. return $"{nameof(MSPEED)}({nameof(_speed)}: {_speed})";
  22. }
  23. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  24. {
  25. sw.Format(formatterContext, services)
  26. .Property(nameof(FieldObject.Model))
  27. .Property(nameof(FieldObjectInteraction.MovementSpeed))
  28. .Assign(_speed)
  29. .Comment(nameof(MSPEED));
  30. }
  31. public override IAwaitable TestExecute(IServices services)
  32. {
  33. FieldObject currentObject = ServiceId.Field[services].Engine.CurrentObject;
  34. currentObject.Interaction.MovementSpeed = _speed.Int32(services);
  35. return DummyAwaitable.Instance;
  36. }
  37. }
  38. }