RND.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. /// <summary>
  5. /// Pushes a random number into temp variable 0 in the range [0-255].
  6. /// </summary>
  7. internal sealed class RND : JsmInstruction
  8. {
  9. public static ScriptResultId ResultVariable { get; } = new ScriptResultId(0);
  10. public RND()
  11. {
  12. }
  13. public RND(Int32 parameter, IStack<IJsmExpression> stack)
  14. : this()
  15. {
  16. }
  17. public override String ToString()
  18. {
  19. return $"{nameof(RND)}()";
  20. }
  21. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services)
  22. {
  23. sw.AppendLine($"R{ResultVariable.ResultId} = {nameof(Rnd)}.{nameof(Rnd.NextByte)}();");
  24. }
  25. public override IAwaitable TestExecute(IServices services)
  26. {
  27. ServiceId.Interaction[services][ResultVariable] = Rnd.NextByte();
  28. return DummyAwaitable.Instance;
  29. }
  30. }
  31. }