summaryrefslogtreecommitdiff
path: root/src_build/domino_assets.c
blob: 7b6b6c67342a3bb60831b0e4630f3ea4d2958317 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <stdio.h>
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

#define NUM_DOMINO_X    6
#define NUM_DOMINO_Y    6
#define DOMINO_WIDTH   23
#define DOMINO_HEIGHT  12
#define EYE_SIZE       12
#define MARGIN_X        9
#define MARGIN_Y        4
#define START_X         1 + 2*(DOMINO_WIDTH + MARGIN_X)
#define START_Y         2

void print_domino(unsigned char *data, int width, int n, int posx, int posy) {
  printf("    {.width = %d, .height = %d, .bufsize = %d, .color = (struct color[%d]) {",
      DOMINO_WIDTH,
      DOMINO_HEIGHT,
      DOMINO_WIDTH * DOMINO_HEIGHT,
      DOMINO_WIDTH * DOMINO_HEIGHT
      );
  for (int y = 0; y < DOMINO_HEIGHT; y++) {
    for (int x = 0; x < DOMINO_WIDTH; x++) {
      printf("{");
      for (int i = 0; i < n; i++) {
        printf("%3d, ", data[(y + posy) * width * n + (x + posx) * n + i]);
      }
      printf("},");
    }
  }
  printf("}},\n");
}

int main(int argc, char **argv) {
  int x,y,n;
  if (argc != 2) return 1;

  unsigned char *data = stbi_load(argv[1], &x, &y, &n, 0);
  // n = n < 3 ? n : 3;


  printf("#include \"../game.h\"\n");
  printf("#define NUM_DOMINO_X     %d\n", NUM_DOMINO_X );
  printf("#define NUM_DOMINO_Y     %d\n", NUM_DOMINO_Y );
  printf("#define DOMINO_WIDTH     %d\n", DOMINO_WIDTH );
  printf("#define DOMINO_HEIGHT    %d\n", DOMINO_HEIGHT);
  printf("#define EYE_SIZE         %d\n", EYE_SIZE);
  printf("#define BYTES_PER_PIXEL  %d\n", n);

  printf("struct image domino[%d][%d] = {\n",
      NUM_DOMINO_X,
      NUM_DOMINO_Y
      );

  for (int domino_x = 0; domino_x < NUM_DOMINO_X; domino_x++) {
    printf("  {\n");
    for (int domino_y = 0; domino_y < NUM_DOMINO_Y; domino_y++) {
      print_domino(
          data, x, n,
          START_X + domino_x * (DOMINO_WIDTH  + MARGIN_X),
          START_Y + domino_y * (DOMINO_HEIGHT + MARGIN_Y)
          );
    }
    printf("  },\n");
  }

  printf("};\n");

  return 0;
}