DCOLADD.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Microsoft.Xna.Framework;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. internal sealed class DCOLADD : JsmInstruction
  5. {
  6. #region Fields
  7. private readonly IJsmExpression _b;
  8. private readonly IJsmExpression _g;
  9. private readonly IJsmExpression _r;
  10. #endregion Fields
  11. #region Constructors
  12. public DCOLADD(IJsmExpression r, IJsmExpression g, IJsmExpression b)
  13. {
  14. _r = r;
  15. _g = g;
  16. _b = b;
  17. }
  18. public DCOLADD(int parameter, IStack<IJsmExpression> stack)
  19. : this(
  20. b: stack.Pop(),
  21. g: stack.Pop(),
  22. r: stack.Pop())
  23. {
  24. }
  25. #endregion Constructors
  26. #region Methods
  27. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  28. .StaticType(nameof(IRenderingService))
  29. .Method(nameof(IRenderingService.AddScreenColor))
  30. .Argument("r", _r)
  31. .Argument("g", _g)
  32. .Argument("b", _b)
  33. .Comment(nameof(DCOLADD));
  34. public override IAwaitable TestExecute(IServices services)
  35. {
  36. ServiceId.Rendering[services].AddScreenColor(
  37. new Color(
  38. _r.Int32(services),
  39. _g.Int32(services),
  40. _b.Int32(services)));
  41. return DummyAwaitable.Instance;
  42. }
  43. public override string ToString() => $"{nameof(DCOLADD)}({nameof(_r)}: {_r}, {nameof(_g)}: {_g}, {nameof(_b)}: {_b})";
  44. #endregion Methods
  45. }
  46. }