FCOLADD.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Microsoft.Xna.Framework;
  2. namespace OpenVIII.Fields.Scripts.Instructions
  3. {
  4. internal sealed class FCOLADD : JsmInstruction
  5. {
  6. #region Fields
  7. private readonly IJsmExpression _b1;
  8. private readonly IJsmExpression _b2;
  9. private readonly IJsmExpression _g1;
  10. private readonly IJsmExpression _g2;
  11. private readonly IJsmExpression _r1;
  12. private readonly IJsmExpression _r2;
  13. private readonly IJsmExpression _transitionDuration;
  14. #endregion Fields
  15. #region Constructors
  16. public FCOLADD(IJsmExpression r1, IJsmExpression g1, IJsmExpression b1, IJsmExpression r2, IJsmExpression g2, IJsmExpression b2, IJsmExpression transitionDuration)
  17. {
  18. _r1 = r1;
  19. _g1 = g1;
  20. _b1 = b1;
  21. _r2 = r2;
  22. _g2 = g2;
  23. _b2 = b2;
  24. _transitionDuration = transitionDuration;
  25. }
  26. public FCOLADD(int parameter, IStack<IJsmExpression> stack)
  27. : this(
  28. transitionDuration: stack.Pop(),
  29. b2: stack.Pop(),
  30. g2: stack.Pop(),
  31. r2: stack.Pop(),
  32. b1: stack.Pop(),
  33. g1: stack.Pop(),
  34. r1: stack.Pop())
  35. {
  36. }
  37. #endregion Constructors
  38. #region Methods
  39. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  40. .StaticType(nameof(IRenderingService))
  41. .Method(nameof(IRenderingService.AddScreenColor))
  42. .Argument("r1", _r1)
  43. .Argument("g1", _g1)
  44. .Argument("b1", _b1)
  45. .Argument("r2", _r2)
  46. .Argument("g2", _g2)
  47. .Argument("b2", _b2)
  48. .Argument("transitionDuration", _transitionDuration)
  49. .Comment(nameof(FCOLADD));
  50. public override IAwaitable TestExecute(IServices services)
  51. {
  52. ServiceId.Rendering[services].AddScreenColorTransition(
  53. new Color(
  54. _r1.Int32(services),
  55. _g1.Int32(services),
  56. _b1.Int32(services)),
  57. new Color(
  58. _r2.Int32(services),
  59. _g2.Int32(services),
  60. _b2.Int32(services)),
  61. _transitionDuration.Int32(services));
  62. return DummyAwaitable.Instance;
  63. }
  64. public override string ToString() => $"{nameof(FCOLADD)}({nameof(_r1)}: {_r1}, {nameof(_g1)}: {_g1}, {nameof(_b1)}: {_b1}, {nameof(_r2)}: {_r2}, {nameof(_g2)}: {_g2}, {nameof(_b2)}: {_b2}, {nameof(_transitionDuration)}: {_transitionDuration})";
  65. #endregion Methods
  66. }
  67. }