aboutsummaryrefslogtreecommitdiff
path: root/src/gen_tiles.c
blob: f7e030ec2be5a88dc545df1bc9e4a04b2c03de68 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "typedef.h"
#include "ppm.h"
#include "config.h"

#define TILE_TYPES  5
#define TILE_WIDTH  3
#define TILE_HEIGHT 3

// possible types: X T I
char symetry[TILE_TYPES] = "XTIIT";

char tile_names[TILE_TYPES][7] = {
    "blank", "t", "plus", "line", "corner"
};

small_t tiles[TILE_TYPES][TILE_WIDTH*TILE_HEIGHT] = {
    {
      0, 0, 0,
      0, 0, 0,
      0, 0, 0
    }, {
      0, 0, 0,
      1, 1, 1,
      0, 1, 0
    }, {
      0, 1, 0,
      1, 1, 1,
      0, 1, 0
    },{
      0, 0, 0,
      1, 1, 1,
      0, 0, 0
    }, {
      0, 1, 0,
      0, 1, 1,
      0, 0, 0
    }
};

small_t tiles_connections[TILE_TYPES][4] = {
    { 0, 0, 0, 0 },
    { 0, 1, 1, 1 },
    { 1, 1, 1, 1 },
    { 0, 1, 1, 0 },
    { 1, 1, 0, 0 },
};

void set_color(small_t *pixels, small_t *t, int x, int y, char k, char blank, char connection)
{
    pixels[(y * TILE_WIDTH + x)*3 + k] = (t[y * TILE_WIDTH + x] == 0) ? blank : connection;

}
FILE *fp;

void save(small_t *t, small_t *c, int n, int i)
{
#ifdef GENERATE_PPM_TILES
    char file_name[64] = {0};

    sprintf(file_name, "files/tiles/tile_%d.ppm", n);

    small_t *pixels = malloc(TILE_WIDTH * TILE_HEIGHT *3);
    for(int y = 0; y < TILE_HEIGHT; y++)
        for(int x = 0; x < TILE_WIDTH; x++) {
            set_color(pixels, t, x, y, 0, 255, 0);
            set_color(pixels, t, x, y, 1, 255, 0);
            set_color(pixels, t, x, y, 2, 255, 0);
        }

    save_as_ppm(file_name, pixels, TILE_WIDTH, TILE_HEIGHT, 1);
    free(pixels);
    printf("Saved file: %s\n", file_name);
#endif
#ifdef TILESET_NAME
    char command[128];
    sprintf(command, "cp files/tilesets/%s/%s.ppm files/tiles/tile_%d.ppm", TILESET_NAME, tile_names[i], n);
    system(command);
#endif

    small_t connections = 0;
    for(int ci = 0; ci < 4; ci++)
    {
        connections |= (c[ci] << (3-ci));
    }

    fwrite(&connections, sizeof(connections), 1, fp);
}

void gen()
{
    mkdir("files", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
    mkdir("files/tiles", S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);

    fp = fopen("files/tiles/tiles.dat", "wb");
    if(!fp) {
        fprintf(stderr, "ERROR: Could not open file files/tiles/tiles.dat");
        exit(EXIT_FAILURE);
    }

    size_t tiles_sz = sizeof(tiles_to_load)/sizeof(int);
    fwrite(&tiles_sz, sizeof(size_t), 1, fp);

    char syms[TILE_TYPES];
    size_t sym_sz = 0;

    for(size_t n = 0; n < tiles_sz; n++)
    {
        int i = tiles_to_load[n];
        save(tiles[i], tiles_connections[i], n, i);
        syms[sym_sz++] = symetry[i];
    }

    fwrite(syms, 1, sym_sz, fp);

    fclose(fp);
}


int main(void)
{
    gen();
    return 0;
}