From 8a360df98af8cd66120f0d5dbd7cfe0ad8e99e5b Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 6 Oct 2025 14:50:32 +0100 Subject: [PATCH] feat: Hitbox drawing --- assets/house.png | Bin 0 -> 3377 bytes assets/saloon_int.png | Bin 7229 -> 8413 bytes code/first.c | 34 ++++++++++++++++++++++++++++++++-- code/game/core.h | 1 + code/game/impl/world.c | 16 +++++++++------- code/game/world.h | 2 ++ 6 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 assets/house.png diff --git a/assets/house.png b/assets/house.png new file mode 100644 index 0000000000000000000000000000000000000000..1afc6f0db46fac6e5e42700b9f13376e58b53032 GIT binary patch literal 3377 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 literal 7229 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 diff --git a/code/first.c b/code/first.c index 2c67567..6272ef7 100644 --- a/code/first.c +++ b/code/first.c @@ -134,7 +134,7 @@ int main(int argc, char **argv) world->player.pos.y = 0; world->player.bulletsLoaded = PLAYER_BULLET_COUNT; world->player.reloadTimer = 0; - world->player.currentArea = 0; + world->player.currentArea = WORLD_AREA_OUTSIDE; for(int i =0; i< 4200; i++) { world->map[i] = map[i]; } @@ -210,10 +210,15 @@ int main(int argc, char **argv) world->propTypes[11].assetHandle=D_ImageHandle(&game->draw, S("saloon_ext")); world->propTypes[11].scale=6.875f; world->propTypes[12].assetHandle=D_ImageHandle(&game->draw, S("saloon_int")); + world->propTypes[12].scale=6.875f; + world->propTypes[11].assetHandle=D_ImageHandle(&game->draw, S("house")); + world->propTypes[11].scale=6.875f; + world->propTypes[12].assetHandle=D_ImageHandle(&game->draw, S("house_int")); world->propTypes[12].scale=6.875f; } game->editor.enabled = true; game->editor.mode = G_EDITOR_MODE_TILE; + game->editor.currentLevel = WORLD_AREA_OUTSIDE; D_Animation animation; @@ -264,9 +269,23 @@ int main(int argc, char **argv) game->world->propCount++; break; } + case G_EDITOR_MODE_HITBOX: { + game->editor.dragStart = game->editor.cursor; + break; + } } + } else if(e.type==SDL_EVENT_MOUSE_BUTTON_UP && e.button.button == SDL_BUTTON_LEFT && game->editor.mode == G_EDITOR_MODE_HITBOX) { + // Add hitbox + V2f topLeft = V2F(Min(game->editor.cursor.x, game->editor.dragStart.x), Min(game->editor.cursor.y, game->editor.dragStart.y)); + game->world->hitboxes[game->world->hitboxCount].pos = topLeft; + game->world->hitboxes[game->world->hitboxCount].size = V2F( + Abs(game->editor.cursor.x-game->editor.dragStart.x), + Abs(game->editor.cursor.y-game->editor.dragStart.y) + ); + game->world->hitboxCount++; } } + if (e.type == SDL_EVENT_KEY_DOWN) { switch(e.key.key) { case SDLK_F10: { @@ -311,6 +330,13 @@ int main(int argc, char **argv) game->editor.mode = (game->editor.mode + 1) % 4; break; } + case SDLK_U: { + switch(game->editor.mode) { + case G_EDITOR_MODE_PROP: {game->world->propCount--;} + case G_EDITOR_MODE_HITBOX: {game->world->hitboxCount--;} + } + break; + } } } } @@ -334,7 +360,7 @@ int main(int argc, char **argv) VkCommandBuffer cmd = frame->cmd; VkClearValue clear_colour; - clear_colour.color.float32[0] = 1.0f; + clear_colour.color.float32[0] = 0.0f; clear_colour.color.float32[1] = 0.0f; clear_colour.color.float32[2] = 0.0f; clear_colour.color.float32[3] = 1.0f; @@ -379,6 +405,10 @@ int main(int argc, char **argv) break; } case G_EDITOR_MODE_HITBOX: { + for(int i = 0; i < game->world->hitboxCount; i++) { + V2f centre = AABB_Centre(game->world->hitboxes[i]); + D_Rect(&game->draw, centre.x, centre.y, .texture=0, .dim=game->world->hitboxes[i].size, .flags=D_RECT_IGNORE_ASPECT); + } break; } case G_EDITOR_MODE_POI: { diff --git a/code/game/core.h b/code/game/core.h index a589c54..028266e 100644 --- a/code/game/core.h +++ b/code/game/core.h @@ -30,6 +30,7 @@ struct G_Editor { S32 currentAsset; G_EDITOR_MODE mode; V2f cursor; + V2f dragStart; }; typedef struct G_State G_State; diff --git a/code/game/impl/world.c b/code/game/impl/world.c index 0385f92..63757c3 100644 --- a/code/game/impl/world.c +++ b/code/game/impl/world.c @@ -37,13 +37,15 @@ void ProcessEvents(SDL_Event *event, World *world) } void RenderWorld(World *world, D_Context *draw) { - for (int i = 0; i < 4800; i++) { - D_Rect( - draw, - (F32) (i % 96), (F32) (i / 96), - .texture = world->tileTypes[world->map[i]].tile, - .angle = (F32) world->tileTypes[world->map[i]].rotation, - ); + if(world->player.currentArea == WORLD_AREA_OUTSIDE) { + for (int i = 0; i < 4800; i++) { + D_Rect( + draw, + (F32) (i % 96), (F32) (i / 96), + .texture = world->tileTypes[world->map[i]].tile, + .angle = (F32) world->tileTypes[world->map[i]].rotation, + ); + } } for (int i = 0; i < world->propCount; i++) { if(world->props[i].area == world->player.currentArea) { diff --git a/code/game/world.h b/code/game/world.h index 9877bd5..a9969a9 100644 --- a/code/game/world.h +++ b/code/game/world.h @@ -50,6 +50,8 @@ struct World { World_PropType propTypes[64]; U32 propCount; World_Prop props[256]; + U32 hitboxCount; + AABB hitboxes[4096]; //// Player Player player;