Card.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "Card.h"
  2. #include "RenderBuffer.h"
  3. #include "../assets.h"
  4. static Sprite letters[] = {
  5. Sprite(sprite_2, BlackOnly),
  6. Sprite(sprite_3, BlackOnly),
  7. Sprite(sprite_4, BlackOnly),
  8. Sprite(sprite_5, BlackOnly),
  9. Sprite(sprite_6, BlackOnly),
  10. Sprite(sprite_7, BlackOnly),
  11. Sprite(sprite_8, BlackOnly),
  12. Sprite(sprite_9, BlackOnly),
  13. Sprite(sprite_10, BlackOnly),
  14. Sprite(sprite_J, BlackOnly),
  15. Sprite(sprite_Q, BlackOnly),
  16. Sprite(sprite_K, BlackOnly),
  17. Sprite(sprite_A, BlackOnly),
  18. };
  19. static Sprite suits[] = {
  20. Sprite(sprite_hearths, BlackOnly),
  21. Sprite(sprite_diamonds, BlackOnly),
  22. Sprite(sprite_spades, BlackOnly),
  23. Sprite(sprite_clubs, BlackOnly)
  24. };
  25. static Sprite backSide = Sprite(sprite_pattern_big, BlackOnly);
  26. void Card::Render(uint8_t x, uint8_t y, bool selected, RenderBuffer *buffer, uint8_t size_limit) {
  27. uint8_t height = y + fmin(size_limit, 22);
  28. if (exposed) {
  29. buffer->draw_rbox(x, y, x + 16, height, White);
  30. buffer->draw_rbox_frame(x, y, x + 16, height, Black);
  31. buffer->draw(&(letters[value]), (Vector) {(float) x + 5, (float) y + 6}, 0);
  32. buffer->draw(&(suits[suit]), (Vector) {(float) x + 12, (float) y + 6}, 0);
  33. if (size_limit > 8) {
  34. buffer->draw(&(letters[value]), (Vector) {(float) x + 12, (float) y + 17}, M_PI);
  35. buffer->draw(&(suits[suit]), (Vector) {(float) x + 5, (float) y + 17}, M_PI);
  36. }
  37. if (selected) {
  38. buffer->draw_box(x + 1, y + 1, x + 16, height, Flip);
  39. }
  40. } else {
  41. RenderBack(x, y, selected, buffer, size_limit);
  42. }
  43. }
  44. void Card::RenderEmptyCard(uint8_t x, uint8_t y, RenderBuffer *buffer) {
  45. buffer->draw_rbox(x, y, x + 17, y + 23, Black);
  46. buffer->draw_rbox_frame(x + 2, y + 2, x + 14, y + 20, White);
  47. }
  48. void Card::RenderBack(uint8_t x, uint8_t y, bool selected, RenderBuffer *buffer, uint8_t size_limit) {
  49. uint8_t height = y + fmin(size_limit, 22);
  50. buffer->draw_box(x + 1, y + 1, x + 16, height, White);
  51. buffer->draw_rbox_frame(x, y, x + 16, height, Black);
  52. buffer->draw(&backSide, (Vector) {(float) x + 9, (float) y + 12}, 15, fmin(size_limit, 22), 0);
  53. if (selected) {
  54. buffer->draw_box(x + 1, y + 1, x + 16, height, Flip);
  55. }
  56. }