#include #include #include "pxl8_bsp.h" #include "pxl8_macros.h" #include "pxl8_world.h" struct pxl8_world { pxl8_bsp bsp; bool loaded; u32 wireframe_color; }; pxl8_world* pxl8_world_create(void) { pxl8_world* world = (pxl8_world*)calloc(1, sizeof(pxl8_world)); if (!world) { pxl8_error("Failed to allocate world"); return NULL; } world->loaded = false; world->wireframe_color = 15; return world; } void pxl8_world_destroy(pxl8_world* world) { if (!world) return; if (world->loaded) { pxl8_bsp_destroy(&world->bsp); } free(world); } pxl8_result pxl8_world_load(pxl8_world* world, const char* path) { if (!world || !path) return PXL8_ERROR_INVALID_ARGUMENT; if (world->loaded) { pxl8_bsp_destroy(&world->bsp); world->loaded = false; } memset(&world->bsp, 0, sizeof(pxl8_bsp)); pxl8_result result = pxl8_bsp_load(path, &world->bsp); if (result != PXL8_OK) { pxl8_error("Failed to load world: %s", path); return result; } world->loaded = true; pxl8_info("Loaded world: %s", path); return PXL8_OK; } void pxl8_world_render(pxl8_world* world, pxl8_gfx* gfx, pxl8_vec3 camera_pos) { if (!world || !gfx || !world->loaded) return; pxl8_bsp_render_wireframe(gfx, &world->bsp, camera_pos, world->wireframe_color); } void pxl8_world_unload(pxl8_world* world) { if (!world || !world->loaded) return; pxl8_bsp_destroy(&world->bsp); world->loaded = false; } bool pxl8_world_is_loaded(const pxl8_world* world) { return world && world->loaded; }