From 517fc9403874dfcf534ae2e9f7fc78a303c6498b Mon Sep 17 00:00:00 2001 From: John Landers Date: Mon, 15 Jan 2024 00:03:21 -0600 Subject: [PATCH] rotation is hard WIP --- src/rewrite/m_block.c | 3 +++ src/rewrite/m_block.h | 3 ++- src/rewrite/m_tetromino.c | 2 ++ src/rewrite/tc_input.c | 8 +------- src/rewrite/tc_main.c | 24 +++++++++++++----------- src/rewrite/tc_settings.h | 2 +- 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/rewrite/m_block.c b/src/rewrite/m_block.c index f20ab5c..24ad784 100644 --- a/src/rewrite/m_block.c +++ b/src/rewrite/m_block.c @@ -1,6 +1,7 @@ #include "m_block.h" #include +#include #include #include @@ -364,3 +365,5 @@ int M_B_Generate_Block_Id(void) { srand(time(NULL)); return rand(); } + +int M_B_Can_Spawn_Blocks(void) { return _can_spawn_tetromino_flag; } \ No newline at end of file diff --git a/src/rewrite/m_block.h b/src/rewrite/m_block.h index af9ef73..12b5367 100644 --- a/src/rewrite/m_block.h +++ b/src/rewrite/m_block.h @@ -15,7 +15,7 @@ int M_B_Try_Spawn_Blocks_With_Offset(point_offset_t *offsets); block_t *M_B_Get_Block_At_Point(point_t point); void M_B_Set_Block_Type(block_t *block, btype_t type); void M_B_Register_Updated_block(block_t *block); -int M_B_Can_Move_Blocks_Left(block_t **blocks); +int M_B_Can_Move_Blocks_Left(block_t **blocks); // I probably don't need ** int M_B_Can_Move_Block_Left(block_t block); block_t *M_B_Move_Block_Left(block_t *block); int M_B_Can_Move_Blocks_Right(block_t **blocks); @@ -28,5 +28,6 @@ block_t *M_B_Get_Block_At_Offset(block_t *block, point_offset_t offset); void M_B_On_Block_Spawn(void (*callback)(block_t **blocks)); int M_B_Point_Intersects_Static_Block(point_t point, int id); int M_B_Generate_Block_Id(void); +int M_B_Can_Spawn_Blocks(void); #endif /* M_BLOCK_H_ */ diff --git a/src/rewrite/m_tetromino.c b/src/rewrite/m_tetromino.c index e7bcf4f..f53b187 100644 --- a/src/rewrite/m_tetromino.c +++ b/src/rewrite/m_tetromino.c @@ -1,5 +1,6 @@ #include "m_tetromino.h" #include "m_block.h" +#include /* Blocks are gauranteed to be in order top left to bottom right */ block_t *_tetromino_blocks[BLOCKS_WITHIN_A_TETROMINO]; @@ -28,6 +29,7 @@ void M_T_Register_Falling_Blocks(block_t *blocks[BLOCKS_WITHIN_A_TETROMINO]) { void M_T_Move_Tetromino_Left(void) { int i; + printf("test"); if (registered_flag && M_B_Can_Move_Blocks_Left(_tetromino_blocks)) { for (i = 0; i < BLOCKS_WITHIN_A_TETROMINO; i++) { _tetromino_blocks[i] = M_B_Move_Block_Left(_tetromino_blocks[i]); diff --git a/src/rewrite/tc_input.c b/src/rewrite/tc_input.c index b4a3bd1..26973bc 100644 --- a/src/rewrite/tc_input.c +++ b/src/rewrite/tc_input.c @@ -1,5 +1,4 @@ #include "tc_input.h" - #include "m_tetromino.h" #include "raylib.h" @@ -8,13 +7,8 @@ void TC_Process_Input(void) { issues before but I figured out that I can just cast to a char to get the result I want :) - THIS IS NOT HOW RAYLIB IS INTENDED TO BE USED - - should look into what's going on + should look into what's going on though to understand better */ - if ((char)IsKeyPressed(KEY_SPACE)) { - /* Implement after rotation */ - } if ((char)IsKeyDown(KEY_A)) { M_T_Move_Tetromino_Left(); } else if ((char)IsKeyDown(KEY_D)) { diff --git a/src/rewrite/tc_main.c b/src/rewrite/tc_main.c index b053e5b..e56561c 100644 --- a/src/rewrite/tc_main.c +++ b/src/rewrite/tc_main.c @@ -48,19 +48,21 @@ void TC_Game_Loop(void) { int tick_rate = 0, n_updated_blocks = 0; block_t **updated_blocks = NULL; while (!TC_Close_Window()) { - R_Draw_Ui(); - if (tick_rate == 0) { - TC_Process_Input(); - M_T_Update_Tetromino(); - M_B_Update_Blocks(); - updated_blocks = M_B_Get_Blocks(&n_updated_blocks); - R_Draw_Blocks(updated_blocks, n_updated_blocks); - tick_rate = game_speed_setting; - } else { - tick_rate--; + while (M_B_Can_Spawn_Blocks()) { + R_Draw_Ui(); + if (tick_rate == 0) { + TC_Process_Input(); + M_T_Update_Tetromino(); + M_B_Update_Blocks(); + updated_blocks = M_B_Get_Blocks(&n_updated_blocks); + R_Draw_Blocks(updated_blocks, n_updated_blocks); + tick_rate = game_speed_setting; + } else { + tick_rate--; + } } + R_Draw_Game_Over(0); } - R_Draw_Game_Over(0); } void TC_Stop(void) { diff --git a/src/rewrite/tc_settings.h b/src/rewrite/tc_settings.h index 90aa1c9..eea080b 100644 --- a/src/rewrite/tc_settings.h +++ b/src/rewrite/tc_settings.h @@ -1,7 +1,7 @@ #ifndef TC_SETTINGS_H_ #define TC_SETTINGS_H_ -/* these settings could probably be more robust, probably doesn't matter until i +/* these settings could probably be more robust, probably doesn't matter unless i * need more*/ /* Maybe have a load defaults, then optionally update? */