FCOLADD.cs 2.6 KB

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