reflection.ino 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. #include "reflection_assets.h"
  5. void setup()
  6. {
  7. Serial.begin(1000000); // JCB
  8. GD.begin();
  9. LOAD_ASSETS();
  10. }
  11. static void showit()
  12. {
  13. GD.ColorMask(1,1,1,1);
  14. GD.BlendFunc(DST_ALPHA, ZERO);
  15. GD.Begin(RECTS);
  16. GD.Vertex2ii(0, 0);
  17. GD.Vertex2ii(480, 272);
  18. GD.swap();
  19. }
  20. #define MASK_ALPHA() GD.BlendFunc(ZERO, SRC_ALPHA) //' A{
  21. void loop()
  22. {
  23. int x = 240 - GAMEDUINO_WIDTH / 2;
  24. GD.BitmapHandle(GRADIENT_HANDLE);
  25. GD.BitmapSize(NEAREST, REPEAT, BORDER, 480, 272);
  26. GD.Clear();
  27. GD.ColorMask(1, 1, 1, 0); // don't touch A yet
  28. GD.cmd_gradient(0, 40, 0x505060,
  29. 0, 272, 0xc0c080);
  30. GD.Begin(BITMAPS); // top bitmap
  31. GD.Vertex2ii(x, 80, GAMEDUINO_HANDLE);
  32. GD.ColorMask(0, 0, 0, 1);
  33. GD.BlendFunc(ONE, ZERO);
  34. GD.Vertex2ii(0, 180, GRADIENT_HANDLE);
  35. // invert the image
  36. GD.cmd_translate(0, F16(GAMEDUINO_HEIGHT / 2));
  37. GD.cmd_scale(F16(1), F16(-1));
  38. GD.cmd_translate(0, -F16(GAMEDUINO_HEIGHT / 2));
  39. GD.cmd_setmatrix();
  40. MASK_ALPHA(); // mask with gradient
  41. GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
  42. GD.ColorMask(1, 1, 1, 0); // draw the reflection
  43. GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
  44. GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
  45. GD.swap();
  46. // JCB{
  47. return;
  48. for (int i = 0; i < 100; i++) {
  49. GD.Clear();
  50. GD.ColorMask(0,0,0,1);
  51. GD.BlendFunc(ONE, ZERO);
  52. GD.Begin(BITMAPS);
  53. GD.Vertex2ii(0, 180, GRADIENT_HANDLE);
  54. showit();
  55. GD.Clear();
  56. GD.ColorMask(0,0,0,1);
  57. GD.BlendFunc(ONE, ZERO);
  58. GD.Begin(BITMAPS);
  59. GD.Vertex2ii(0, 190, GRADIENT_HANDLE);
  60. MASK_ALPHA(); // mask with gradient
  61. GD.cmd_translate(0, F16(GAMEDUINO_HEIGHT / 2));
  62. GD.cmd_scale(F16(1), F16(-1));
  63. GD.cmd_translate(0, -F16(GAMEDUINO_HEIGHT / 2));
  64. GD.cmd_setmatrix();
  65. GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
  66. showit();
  67. GD.Clear();
  68. GD.ColorMask(0,0,0,1);
  69. GD.BlendFunc(ONE, ZERO);
  70. GD.Begin(BITMAPS);
  71. GD.cmd_translate(0, F16(GAMEDUINO_HEIGHT / 2));
  72. GD.cmd_scale(F16(1), F16(-1));
  73. GD.cmd_translate(0, -F16(GAMEDUINO_HEIGHT / 2));
  74. GD.cmd_setmatrix();
  75. GD.Vertex2ii(x, 190, GAMEDUINO_HANDLE);
  76. showit();
  77. } // }JCB
  78. } //' }A