summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2019-10-29 23:14:29 -0400
committerAndrew Opalach <andrew@akon.city> 2019-10-29 23:14:29 -0400
commiteb9142d314203273f2609164fc52c4e0ab25f2a7 (patch)
tree0a50d78cdc81538a181c29acc9665cbd2a3f11e1
parent396d4a3d3b211143835266bfd2ee431e051cf34c (diff)
downloadcetris-eb9142d314203273f2609164fc52c4e0ab25f2a7.tar.gz
cetris-eb9142d314203273f2609164fc52c4e0ab25f2a7.tar.bz2
cetris-eb9142d314203273f2609164fc52c4e0ab25f2a7.zip
reuse the same textures for each part
-rw-r--r--frontends/sdl/cetris_sdl.h7
-rw-r--r--frontends/sdl/sdl_ui.c39
m---------ini0
3 files changed, 30 insertions, 16 deletions
diff --git a/frontends/sdl/cetris_sdl.h b/frontends/sdl/cetris_sdl.h
index 2ad0a7b..02f7a13 100644
--- a/frontends/sdl/cetris_sdl.h
+++ b/frontends/sdl/cetris_sdl.h
@@ -42,3 +42,10 @@ typedef struct {
color_scheme_t scheme;
float count_down;
} game_board_t;
+
+typedef struct {
+ SDL_Texture *main;
+ SDL_Texture *queue;
+ SDL_Texture *hold;
+} solo_game;
+
diff --git a/frontends/sdl/sdl_ui.c b/frontends/sdl/sdl_ui.c
index 855bfee..ce2690e 100644
--- a/frontends/sdl/sdl_ui.c
+++ b/frontends/sdl/sdl_ui.c
@@ -103,9 +103,9 @@ void draw_block(int x, int y, int width, int height, SDL_Color c, SDL_Color off)
SDL_RenderDrawRect(render, &b);
}
-void draw_board(game_board_t* board, int x, int y, int w, int h) {
- SDL_Texture *m = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h + 5);
+void draw_board(SDL_Texture *m, game_board_t* board, int x, int y, int w, int h) {
SDL_SetRenderTarget(render, m);
+ SDL_RenderClear(render);
SDL_Rect background = {0, 0, w, h + 5};
@@ -187,16 +187,16 @@ void draw_board(game_board_t* board, int x, int y, int w, int h) {
SDL_Rect dest = {x, y, w, h};
//SDL_RenderCopyEx(render, m, NULL, &dest, 0, NULL, SDL_FLIP_NONE);
SDL_RenderCopy(render, m, NULL, &dest);
-
- SDL_DestroyTexture(m);
}
-void draw_held_piece(game_board_t* board, int x, int y, int w, int h) {
+void draw_held_piece(SDL_Texture *m, game_board_t* board, int x, int y, int w, int h) {
if (w < 8) return;
if (h < 8) return;
- SDL_Texture *m = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h);
SDL_SetRenderTarget(render, m);
+ SDL_RenderClear(render);
+
+ SDL_RenderClear(render);
int block_width = (w - 4) / 4;
int block_height = (h - 4) / 4;
@@ -242,17 +242,16 @@ void draw_held_piece(game_board_t* board, int x, int y, int w, int h) {
SDL_Rect dest = {x, y, w, h};
//SDL_RenderCopyEx(render, m, NULL, &dest, 0, NULL, SDL_FLIP_NONE);
SDL_RenderCopy(render, m, NULL, &dest);
-
- SDL_DestroyTexture(m);
}
-void draw_piece_queue(game_board_t* board, int x, int y, int w, int h) {
+void draw_piece_queue(SDL_Texture *m, game_board_t* board, int x, int y, int w, int h) {
if (w < 8) return;
if (h < 32) return;
- SDL_Texture *m = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h);
SDL_SetRenderTarget(render, m);
+ SDL_RenderClear(render);
+
int block_width = ((w - 4) / 4);
int block_height = ((h - 5) / 5) / 3;
@@ -307,7 +306,6 @@ void draw_piece_queue(game_board_t* board, int x, int y, int w, int h) {
//SDL_RenderCopyEx(render, m, NULL, &dest, 0, NULL, SDL_FLIP_NONE);
SDL_RenderCopy(render, m, NULL, &dest);
- SDL_DestroyTexture(m);
}
void draw_timer(game_board_t *board, int x, int y) {
@@ -328,20 +326,26 @@ void draw_timer(game_board_t *board, int x, int y) {
free(buf);
}
-void draw() {
+void draw(solo_game *s) {
SDL_SetRenderDrawColor(render, main_board.scheme.main.r,
main_board.scheme.main.g, main_board.scheme.main.b, main_board.scheme.main.a);
SDL_RenderClear(render);
- draw_board(&main_board, (W / 2) - 125, (H / 2) - 250, 250, 500);
- draw_held_piece(&main_board, (W / 2) - 230, (H / 2) - 250, 100, 100);
- draw_piece_queue(&main_board, (W / 2) + 130, (H / 2) - 250, 100, 450);
+ draw_board(s->main, &main_board, (W / 2) - 125, (H / 2) - 250, 250, 500);
+ draw_held_piece(s->hold, &main_board, (W / 2) - 230, (H / 2) - 250, 100, 100);
+ draw_piece_queue(s->queue, &main_board, (W / 2) + 130, (H / 2) - 250, 100, 450);
draw_timer(&main_board, 20, 20);
SDL_RenderPresent(render);
}
+void load_solo(solo_game* s) {
+ s->main = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 250, 505);
+ s->queue = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 100, 450);
+ s->hold = SDL_CreateTexture(render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 100, 100);
+}
+
int main(void) {
setup_sdl();
@@ -390,6 +394,9 @@ int main(void) {
main_board.scheme = light_mode;
}
+ solo_game screen;
+ load_solo(&screen);
+
main_board.count_down = 3;
init_game(&g, &config);
main_board.game = &g;
@@ -445,7 +452,7 @@ int main(void) {
}
}
- draw();
+ draw(&screen);
if (main_board.count_down < 0 && g.waiting) {
cetris_start_game(&g);
diff --git a/ini b/ini
-Subproject 3401f2ed3153c6093c2f434e205cf6e7775a02d
+Subproject 9b15f721fd53b1beb8364f8763e2207963ac4fd