feat: Hitbox drawing

This commit is contained in:
2025-10-06 14:50:32 +01:00
parent 3a84947750
commit 8a360df98a
6 changed files with 44 additions and 9 deletions

View File

@@ -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: {