#include #include #include #include #include "typedef.h" #include "ppm.h" #include "config.h" #define TILE_WIDTH 3 #define TILE_HEIGHT 3 // possible types: X T I char symetry[TILES_CAP] = "XTIIT"; small_t tiles[TILES_CAP][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[TILES_CAP][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 *n, int i) { #ifdef GENERATE_PPM_TILES char file_name[64] = {0}; sprintf(file_name, "files/tiles/tile_%d.ppm", i); 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 small_t connections = 0; for(int c = 0; c < 4; c++) { connections |= (n[c] << (3-c)); } fwrite(&connections, sizeof(connections), 1, fp); } void gen_rotations() { 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"); size_t tiles_sz = sizeof(tiles_to_load)/sizeof(int); fwrite(&tiles_sz, sizeof(size_t), sizeof(size_t), fp); char syms[TILES_CAP]; 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); syms[sym_sz++] = symetry[i]; } fwrite(syms, 1, sym_sz, fp); fclose(fp); } int main(void) { gen_rotations(); return 0; }