refactoring of display fcts + added editor menu

This commit is contained in:
Alexandre 2024-08-20 11:20:46 +02:00
parent 2e80dfc901
commit 7fa8ddf0b2
45 changed files with 538 additions and 101 deletions

View File

@ -6,6 +6,7 @@
"sdl_image.h": "c",
"display.h": "c",
"base.h": "c",
"assembly.h": "c"
"assembly.h": "c",
"limits": "c"
}
}

Binary file not shown.

BIN
res/letters/letter-a.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-b.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-c.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-d.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-e.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-f.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-g.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-h.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-i.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-j.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-k.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-l.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-m.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-n.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-o.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-p.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-q.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-r.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-s.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-t.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-u.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-v.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-w.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-x.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-y.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/letter-z.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
res/letters/ranking-A.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
res/letters/ranking-B.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
res/letters/ranking-C.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
res/letters/ranking-D.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
res/letters/ranking-S.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
res/letters/ranking-X.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
res/letters/symbol-percent.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -18,6 +18,7 @@
#include "assembly.h"
cell* start ;
cell* current ;
int* item_costs ;
int* item_start ;
@ -30,6 +31,9 @@ cell** playerCells ;
player* players ;
imgs digits ;
imgs letters ;
void init_empty_board() {
start = malloc(sizeof(cell));
start->id = 0 ;
@ -47,6 +51,8 @@ void init_empty_board() {
start->next_4 = NULL;
start->meta = "start";
current = start ;
cell_count = malloc(sizeof(int)*n_cell_type);
cell_count[0] = 1;
for(int i = 1; i < n_cell_type; i++) {
@ -145,13 +151,261 @@ void init_shop(char* filename) {
fclose(ptr);
}
void init_everything() {
void import_digits(SDL_Renderer* renderer) {
imgs res;
res.arr = malloc(sizeof(SDL_Texture*)*10);
SDL_Texture* texture;
SDL_Surface* img;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-0.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[0] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-1.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[1] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-2.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[2] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-3.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[3] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-4.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[4] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-5.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[5] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-6.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[6] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-7.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[7] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-8.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[8] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-9.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[9] = texture;
res.len = 10 ;
digits = res;
}
void import_letters(SDL_Renderer* renderer) {
imgs res;
res.arr = malloc(sizeof(SDL_Texture*)*26);
SDL_Texture* texture;
SDL_Surface* img;
int cc = 0 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-a.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-b.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-c.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-d.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-e.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-f.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-g.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-h.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-i.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-j.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-k.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-l.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-m.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-n.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-o.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-p.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-q.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-r.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-s.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-t.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-u.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-v.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-w.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-x.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-y.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
cc += 1 ;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/letters/letter-z.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[cc] = texture;
res.len = 26 ;
letters = res;
}
void free_digits(imgs dgts) {
for(int i = 0; i < dgts.len; i++) {
SDL_DestroyTexture(dgts.arr[i]);
}
free(dgts.arr);
}
void init_everything(SDL_Renderer* renderer) {
printf("Initializing board...\n");
init_empty_board();
printf("Initializing players...\n");
init_players();
printf("Initializing items...\n");
init_shop("src/config.txt");
printf("Initializing digits...\n");
import_digits(renderer);
import_letters(renderer);
printf("Initialization complete!\n\n");
//print_items();
}
@ -177,6 +431,9 @@ void destroy_everything() {
free(item_is_special_type);
free(cell_count);
free_digits(digits);
free_digits(letters);
printf("Destruction complete!...\n\n");
}

View File

@ -7,7 +7,13 @@ void init_players();
void init_shop(char* filename);
void init_everything();
void import_digits(SDL_Renderer* renderer);
void import_letters(SDL_Renderer* renderer);
void free_digits(imgs dgts);
void init_everything(SDL_Renderer* renderer);
void destroy_everything();

View File

@ -14,8 +14,6 @@
#include "consts.h"
#include "base.h"
imgs digits ;
int ln_baseN(int n, int b) {
int r = 0;
while(n != 0) {
@ -71,82 +69,6 @@ double distance_pt(int x1, int x2, int y1, int y2) {
return sqrt(to_double(pw(x2 - x1, 2) + pw(y2 - y1, 2)));
}
void import_digits(SDL_Renderer* renderer) {
imgs res;
res.arr = malloc(sizeof(SDL_Texture*)*10);
SDL_Texture* texture;
SDL_Surface* img;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-0.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[0] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-1.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[1] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-2.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[2] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-3.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[3] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-4.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[4] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-5.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[5] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-6.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[6] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-7.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[7] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-8.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[8] = texture;
// -------------------------------------------------------- //
img = SDL_LoadBMP("./res/digits/digit-9.bmp");
texture = SDL_CreateTextureFromSurface(renderer, img);
SDL_FreeSurface(img);
res.arr[9] = texture;
digits = res;
}
void free_digits(imgs dgts) {
for(int i = 0; i < 10; i++) {
SDL_DestroyTexture(dgts.arr[i]);
}
free(dgts.arr);
}
bool is_star_allowed(int ctype) {
return ((CELLTYPE)ctype == BLUE) ;
}

View File

@ -19,10 +19,6 @@ int to_int(double n);
double distance_pt(int x1, int x2, int y1, int y2);
void import_digits(SDL_Renderer* renderer);
void free_digits(imgs dgts);
bool is_star_allowed(int ctype);
bool is_hidden_block_allowed(int ctype);

View File

@ -100,9 +100,14 @@ extern player* players ;
extern imgs digits ;
// len is always 10 for this
extern imgs letters ;
// len is always 26 for this
static int __width__ = 1200 ;
static int __height__ = 800 ;
static int tile_size = 50 ;
extern cell* current ;
#endif

View File

@ -41,6 +41,7 @@ void placeRectToRenderer(SDL_Renderer* renderer, int X, int Y, int W, int H, int
}
void drawLineWithThicc(SDL_Renderer* renderer, int width, int x1, int x2, int y1, int y2, int R, int G, int B, int A) {
// draws line with width (native SDL cannot do that)
double theta = 0.0;
double seglen = distance_pt(x1, x2, y1, y2);
while(theta < 1.0) {
@ -50,6 +51,8 @@ void drawLineWithThicc(SDL_Renderer* renderer, int width, int x1, int x2, int y1
}
void drawLineWithThiccGradient(SDL_Renderer* renderer, int start_width, int end_width, int x1, int x2, int y1, int y2, int R, int G, int B, int A) {
// draws line with width ;
// width goes from start_width to end_with in a linear way
double theta = 0.0;
double seglen = distance_pt(x1, x2, y1, y2);
while(theta < 1.0) {
@ -77,6 +80,20 @@ void drawDigitToRenderer(SDL_Renderer* renderer, imgs data, int digit, int X, in
SDL_RenderCopy(renderer, texture, NULL, &rect);
}
void drawCharToRenderer(SDL_Renderer* renderer, imgs data, char c, int X, int Y, int W, int H) {
if ((int)c >= 97 && (int)c <= 122) {
SDL_Rect rect;
rect.x = X;
rect.y = Y;
rect.w = W;
rect.h = H;
SDL_Texture* texture = data.arr[(int)c - 97];
SDL_RenderCopy(renderer, texture, NULL, &rect);
}
}
void drawNumberToRenderer(SDL_Renderer* renderer, imgs data, int n, int X, int Y, int W, int H, int Woffset) {
if(n == 0) {
drawDigitToRenderer(renderer, data, 0, X + W, Y, W, H);
@ -91,6 +108,39 @@ void drawNumberToRenderer(SDL_Renderer* renderer, imgs data, int n, int X, int Y
}
}
void drawStringToRenderer(SDL_Renderer* renderer, imgs data, char* s, int X, int Y, int W, int H) {
int k = 0 ;
while(s[k] != '\0') {
drawCharToRenderer(renderer, data, s[k], X + W*k, Y, W, H);
k += 1;
}
}
long cell_colors(cell* cl) {
switch (cl->type) {
case START:
return (long)(32) + (long)(256)*(long)(255) + (long)(256*256)*(long)(32);
case BLUE:
return (long)(32) + (long)(256)*(long)(32) + (long)(256*256)*(long)(255);
case RED:
return (long)(255) + (long)(256)*(long)(32) + (long)(256*256)*(long)(32);
case EVENT:
return (long)(32) + (long)(256)*(long)(128) + (long)(256*256)*(long)(32);
case VS:
return (long)(255) + (long)(256)*(long)(128) + (long)(256*256)*(long)(32);
case BOWSER:
return (long)(32) + (long)(256)*(long)(32) + (long)(256*256)*(long)(32);
case CHANCE_TIME:
return (long)(32) + (long)(256)*(long)(128) + (long)(256*256)*(long)(255);
case BOO:
return (long)(128) + (long)(256)*(long)(128) + (long)(256*256)*(long)(128);
case STAR:
return (long)(255) + (long)(256)*(long)(255) + (long)(256*256)*(long)(32);
case BANK:
return (long)(255) + (long)(256)*(long)(255) + (long)(256*256)*(long)(32);
}
}
void draw_cell(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax, cell* cl, int draw_id) {
if(cl != NULL && cl->id != draw_id && cl->coord_x - tile_size > xmin && cl->coord_x - tile_size < xmax && cl->coord_y > ymin && cl->coord_y < ymax) {
// draw lines
@ -100,15 +150,19 @@ void draw_cell(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax, c
if(cl->next_1 != NULL) {
drawLineWithThiccGradient(renderer, tile_size, 3, nxmin, to_int((to_double(cl->next_1->coord_x) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)), nymin, to_int((to_double(cl->next_1->coord_y) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)), 255, 255, 0, SDL_ALPHA_OPAQUE);
drawDigitToRenderer(renderer, digits, 1, to_int((to_double((cl->coord_x + cl->next_1->coord_x)/2) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)) - 75/6, to_int((to_double((cl->coord_y + cl->next_1->coord_y)/2) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)) - 105/6, 75/3, 105/3);
};
if(cl->next_2 != NULL) {
drawLineWithThiccGradient(renderer, tile_size, 3, nxmin, to_int((to_double(cl->next_2->coord_x) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)), nymin, to_int((to_double(cl->next_2->coord_y) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)), 255, 255, 0, SDL_ALPHA_OPAQUE);
drawDigitToRenderer(renderer, digits, 2, to_int((to_double((cl->coord_x + cl->next_2->coord_x)/2) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)) - 75/6, to_int((to_double((cl->coord_y + cl->next_2->coord_y)/2) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)) - 105/6, 75/3, 105/3);
};
if(cl->next_3 != NULL) {
drawLineWithThiccGradient(renderer, tile_size, 3, nxmin, to_int((to_double(cl->next_3->coord_x) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)), nymin, to_int((to_double(cl->next_3->coord_y) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)), 255, 255, 0, SDL_ALPHA_OPAQUE);
drawDigitToRenderer(renderer, digits, 3, to_int((to_double((cl->coord_x + cl->next_3->coord_x)/2) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)) - 75/6, to_int((to_double((cl->coord_y + cl->next_3->coord_y)/2) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)) - 105/6, 75/3, 105/3);
};
if(cl->next_4 != NULL) {
drawLineWithThiccGradient(renderer, tile_size, 3, nxmin, to_int((to_double(cl->next_4->coord_x) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)), nymin, to_int((to_double(cl->next_4->coord_y) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)), 255, 255, 0, SDL_ALPHA_OPAQUE);
drawDigitToRenderer(renderer, digits, 4, to_int((to_double((cl->coord_x + cl->next_4->coord_x)/2) - to_double(xmin)) * to_double(__width__)) / (to_double(xmax) - to_double(xmin)) - 75/6, to_int((to_double((cl->coord_y + cl->next_4->coord_y)/2) - to_double(ymin)) * to_double(__height__)) / (to_double(ymax) - to_double(ymin)) - 105/6, 75/3, 105/3);
};
// recursive calls
@ -123,7 +177,13 @@ void draw_cell(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax, c
draw_cell(renderer, xmin, xmax, ymin, ymax, cl->next_4, draw_id);
// draw current cell
placeRectToRenderer(renderer, nxmin-tile_size/2, nymin-tile_size/2, tile_size, tile_size, 255, 255, 255, SDL_ALPHA_OPAQUE);
long packed_colors = cell_colors(cl);
if(cl == current) {
placeRectToRenderer(renderer, nxmin-tile_size/2-10, nymin-tile_size/2-10, tile_size+20, tile_size+20, 255, 255, 255, SDL_ALPHA_OPAQUE);
};
placeRectToRenderer(renderer, nxmin-tile_size/2, nymin-tile_size/2, tile_size, tile_size, (int)(packed_colors%256), (int)((packed_colors/256)%256), (int)((packed_colors/256/256)%256), SDL_ALPHA_OPAQUE);
} else if(cl != NULL) {
cl->id = draw_id;
}
@ -134,10 +194,6 @@ void draw_board(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax,
fprintf(stderr, "ERROR : cannot draw NULL cell\n");
exit(1);
} else {
resetRenderer(renderer);
draw_cell(renderer, xmin, xmax, ymin, ymax, one_cell, (one_cell->id +1)%727);
updateRenderer(renderer);
}
}

View File

@ -15,8 +15,14 @@ void drawLineWithThiccGradient(SDL_Renderer* renderer, int start_width, int end_
void drawDigitToRenderer(SDL_Renderer* renderer, imgs data, int digit, int X, int Y, int W, int H);
void drawCharToRenderer(SDL_Renderer* renderer, imgs data, char c, int X, int Y, int W, int H);
void drawNumberToRenderer(SDL_Renderer* renderer, imgs data, int n, int X, int Y, int W, int H, int Woffset);
void drawStringToRenderer(SDL_Renderer* renderer, imgs data, char* s, int X, int Y, int W, int H);
long cell_colors(cell* cl);
void draw_cell(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax, cell* cl, int draw_id);
void draw_board(SDL_Renderer* renderer, int xmin, int xmax, int ymin, int ymax, cell* one_cell);

View File

@ -13,6 +13,7 @@
#include "consts.h"
#include "base.h"
#include "display.h"
#include "edit.h"
void link_cells(cell* parent, cell* child) {
@ -94,6 +95,20 @@ void append_cell(int cell_type, int X, int Y, cell* parent) {
cell_count[cell_type] += 1;
}
void append_cell_orthogonal(int cell_type, char dir, cell* parent) {
if(dir == 'N' || dir == 'n') {
append_cell(cell_type, parent->coord_x, parent->coord_y + tile_size * 2, parent);
} else if(dir == 'E' || dir == 'e') {
append_cell(cell_type, parent->coord_x + tile_size * 2, parent->coord_y, parent);
} else if(dir == 'W' || dir == 'w') {
append_cell(cell_type, parent->coord_x - tile_size * 2, parent->coord_y, parent);
} else if(dir == 'S' || dir == 's') {
append_cell(cell_type, parent->coord_x, parent->coord_y - tile_size * 2, parent);
} else {
fprintf(stderr, "ERROR : invalid direction (%d)", dir);
}
}
void destroy_cell(cell* cl) {
unlink_cells(cl, cl->next_1);
unlink_cells(cl, cl->next_2);
@ -108,4 +123,178 @@ void destroy_cell(cell* cl) {
cell_count[(int)cl->type] -= 1;
free(cl);
}
bool isAdding = false ;
int editBuffer = 0 ;
int phase = 0 ;
int editCellType = 0 ;
int editDirection = 0 ;
void playerEditActions(bool* finished) {
SDL_Event event;
while(SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_1:
if(!isAdding && current->next_1 != NULL) {
current = current->next_1;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 1;
};
break;
case SDLK_2:
if(!isAdding && current->next_2 != NULL) {
current = current->next_2;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 2;
};
break;
case SDLK_3:
if(!isAdding && current->next_3 != NULL) {
current = current->next_3;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 3;
};
break;
case SDLK_4:
if(!isAdding && current->next_4 != NULL) {
current = current->next_4;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 4;
};
break;
case SDLK_0:
if(!isAdding && current->prev_1 != NULL) {
current = current->prev_1;
} else if (isAdding) {
editBuffer *= 10;
};
break;
case SDLK_9:
if(!isAdding && current->prev_2 != NULL) {
current = current->prev_2;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 9;
};
break;
case SDLK_8:
if(!isAdding && current->prev_3 != NULL) {
current = current->prev_3;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 8;
};
break;
case SDLK_7:
if(!isAdding && current->prev_4 != NULL) {
current = current->prev_4;
} else if (isAdding) {
editBuffer *= 10;
editBuffer += 7;
};
break;
case SDLK_6:
if (isAdding) {
editBuffer *= 10;
editBuffer += 6;
};
break;
case SDLK_5:
if (isAdding) {
editBuffer *= 10;
editBuffer += 5;
};
break;
case SDLK_MINUS:
if (isAdding) {
editBuffer = editBuffer / 10;
};
break;
case SDLK_SPACE:
if(isAdding) {
if(phase == 0) {
editCellType = editBuffer%n_cell_type;
} else if(phase == 1) {
editDirection = editBuffer%4;
phase = -1;
isAdding = false;
char dir ;
if(editDirection == 0) {
dir = 's';
} else if(editDirection == 1) {
dir = 'e';
} else if(editDirection == 2) {
dir = 'n';
} else if(editDirection == 3) {
dir = 'w';
};
append_cell_orthogonal(editCellType, dir, current);
printf("exit adding...\n");
};
phase += 1;
editBuffer = 0;
};
break;
case SDLK_p:
isAdding = true ;
phase = 0 ;
printf("now adding...\n");
break;
case SDLK_TAB:
*finished = true;
break;
}
}
}
}
void draw_types(SDL_Renderer* renderer) {
drawStringToRenderer(renderer, letters, "start", __width__ - 6 * 75/2, 50, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "blue", __width__ - 5 * 75/2, 100, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "red", __width__ - 4 * 75/2, 150, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "event", __width__ - 6 * 75/2, 200, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "vs", __width__ - 3 * 75/2, 250, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "bowser", __width__ - 7 * 75/2, 300, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "chance", __width__ - 7 * 75/2, 350, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "boo", __width__ - 4 * 75/2, 400, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "star", __width__ - 5 * 75/2, 450, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "bank", __width__ - 5 * 75/2, 500, 75/2, 105/2);
}
void draw_directions(SDL_Renderer* renderer) {
drawStringToRenderer(renderer, letters, "north", __width__ - 6 * 75/2, 50, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "east", __width__ - 5 * 75/2, 100, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "south", __width__ - 6 * 75/2, 150, 75/2, 105/2);
drawStringToRenderer(renderer, letters, "west", __width__ - 5 * 75/2, 200, 75/2, 105/2);
}
void edit_main(SDL_Renderer* renderer) {
bool finished = false;
while(!finished) {
resetRenderer(renderer);
draw_board(renderer, current->coord_x - tile_size * 7, current->coord_x + tile_size * 7, current->coord_y - tile_size * 7, current->coord_y + tile_size * 7, current);
if(isAdding) {
if(phase == 0) {
drawStringToRenderer(renderer, letters, "choose type", 50, 50, 75/2, 105/2);
draw_types(renderer);
} else {
drawStringToRenderer(renderer, letters, "choose direction", 50, 50, 75/2, 105/2);
draw_directions(renderer);
};
drawNumberToRenderer(renderer, digits, editBuffer, 50, 150, 75/2, 105/2, 0);
};
updateRenderer(renderer);
playerEditActions(&finished);
usleep(20000);
}
}

View File

@ -9,4 +9,12 @@ void append_cell(int cell_type, int X, int Y, cell* parent);
void destroy_cell(cell* cl);
void playerEditActions(bool* finished);
void draw_types(SDL_Renderer* renderer);
void draw_directions(SDL_Renderer* renderer);
void edit_main(SDL_Renderer* renderer);
#endif

View File

@ -42,18 +42,9 @@ int main(int argc, char** argv) {
/* -------------------------------------------------------- */
init_everything();
init_everything(rend);
draw_board(rend, -250, 250, -250, 250, start);
sleep(1);
append_cell(1, 75, 75, start);
draw_board(rend, -250, 250, -250, 250, start);
sleep(1);
append_cell(1, 75, 0, start->next_1);
draw_board(rend, -250, 250, -250, 250, start);
sleep(1);
edit_main(rend);
destroy_everything();