From e51fb8627c073605c34fd37b3388603aa3a919fa Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Wed, 30 Jul 2025 22:34:26 -0400 Subject: [PATCH] Switching to Linux to find a memory bug and I want to keep a record of what caused it. --- gui/debug_ui.cpp | 10 ++++++---- gui/debug_ui.hpp | 2 +- levelmanager.cpp | 36 +++++++----------------------------- levelmanager.hpp | 2 +- raycaster.cpp | 5 +++-- worldbuilder.cpp | 4 ++-- worldbuilder.hpp | 6 +++--- 7 files changed, 23 insertions(+), 42 deletions(-) diff --git a/gui/debug_ui.cpp b/gui/debug_ui.cpp index 33bf7c6..5472f34 100644 --- a/gui/debug_ui.cpp +++ b/gui/debug_ui.cpp @@ -39,10 +39,12 @@ namespace gui { $gui.set(button, { sprite_name}); } - void DebugUI::spawn(std::string enemy_key) { - auto ent = $level_mgr.spawn_enemy(enemy_key); - auto& level = $level_mgr.current(); - level.world->send(Events::GUI::ENTITY_SPAWN, ent, {}); + void DebugUI::spawn(const std::string& enemy_key) { + (void)enemy_key; + dbc::log("THIS FUNCTION NEEDS A REWRITE"); + // auto ent = $level_mgr.spawn_enemy(enemy_key); + // auto& level = $level_mgr.current(); + // level.world->send(Events::GUI::ENTITY_SPAWN, ent, {}); } void DebugUI::render(sf::RenderWindow& window) { diff --git a/gui/debug_ui.hpp b/gui/debug_ui.hpp index cdc158a..f8eb029 100644 --- a/gui/debug_ui.hpp +++ b/gui/debug_ui.hpp @@ -19,7 +19,7 @@ namespace gui { void render(sf::RenderWindow& window); bool mouse(float x, float y, bool hover); void debug(); - void spawn(std::string enemy_key); + void spawn(const std::string& enemy_key); void add_spawn_button(std::string enemy_key, std::string sprite_name, std::string region); Stats::TimeBullshit time_start(); diff --git a/levelmanager.cpp b/levelmanager.cpp index a9745f1..4c29770 100644 --- a/levelmanager.cpp +++ b/levelmanager.cpp @@ -60,34 +60,10 @@ shared_ptr LevelManager::create_bossfight(shared_ptr(world, boss_id); } -DinkyECS::Entity LevelManager::spawn_enemy(std::string named) { +DinkyECS::Entity LevelManager::spawn_enemy(const std::string& named) { (void)named; - auto& level = current(); - - auto &config = level.world->get_the(); - auto entity_data = config.enemies[named]; - - WorldBuilder builder(*level.map); - - auto entity_id = builder.configure_entity_in_room(*level.world, entity_data, 0); - - auto& entity_pos = level.world->get(entity_id); - auto player_pos = level.world->get(level.player); - - for(matrix::box it{level.map->walls(), - player_pos.location.x, player_pos.location.y, 1}; it.next();) - { - if(level.map->can_move({it.x, it.y})) { - // this is where we move it closer to the player - entity_pos.location.x = it.x; - entity_pos.location.y = it.y; - break; - } - } - - level.collision->insert(entity_pos.location, entity_id, true); - - return entity_id; + dbc::log("THIS FUNCTION NEEDS A REWRITE"); + return 0; } size_t LevelManager::create_level(shared_ptr prev_world) { @@ -96,7 +72,9 @@ size_t LevelManager::create_level(shared_ptr prev_world) { auto scaling = scale_level(); auto map = make_shared(scaling.map_width, scaling.map_height); - WorldBuilder builder(*map); + auto collision = std::make_shared(); + + WorldBuilder builder(*map, *collision); builder.generate(*world); size_t index = $levels.size(); @@ -104,7 +82,7 @@ size_t LevelManager::create_level(shared_ptr prev_world) { auto player = world->get_the(); $levels.emplace_back(index, player.entity, map, world, - make_shared(map->tiles()), builder.$collision); + make_shared(map->tiles()), collision); dbc::check(index == $levels.size() - 1, "Level index is not the same as $levels.size() - 1, off by one error"); return index; diff --git a/levelmanager.hpp b/levelmanager.hpp index eaa0aa6..e5befa3 100644 --- a/levelmanager.hpp +++ b/levelmanager.hpp @@ -41,5 +41,5 @@ class LevelManager { GameLevel &get(size_t index); LevelScaling scale_level(); - DinkyECS::Entity spawn_enemy(std::string named); + DinkyECS::Entity spawn_enemy(const std::string& named); }; diff --git a/raycaster.cpp b/raycaster.cpp index 03eb69b..ffa093b 100644 --- a/raycaster.cpp +++ b/raycaster.cpp @@ -437,8 +437,9 @@ void Raycaster::update_level(GameLevel level) { $level.world->query([&](const auto ent, auto& sprite) { // player doesn't need a sprite - if($level.player == ent) return; - update_sprite(ent, sprite); + if($level.player != ent) { + update_sprite(ent, sprite); + } }); } diff --git a/worldbuilder.cpp b/worldbuilder.cpp index 84b98ec..37f552e 100644 --- a/worldbuilder.cpp +++ b/worldbuilder.cpp @@ -69,7 +69,7 @@ bool WorldBuilder::find_open_spot(Point& pos_out) { for(matrix::rando_box it{$map.walls(), pos_out.x, pos_out.y, i}; it.next();) { Point test{size_t(it.x), size_t(it.y)}; - if($map.can_move(test) && !$collision->occupied(test)) { + if($map.can_move(test) && !$collision.occupied(test)) { pos_out = test; return true; } @@ -104,7 +104,7 @@ DinkyECS::Entity WorldBuilder::configure_entity_in_map(DinkyECS::World &world, j components::configure_entity(world, item, entity_data["components"]); } - $collision->insert(pos, item, has_collision); + $collision.insert(pos, item, has_collision); return item; } diff --git a/worldbuilder.hpp b/worldbuilder.hpp index 34aeaf3..83023aa 100644 --- a/worldbuilder.hpp +++ b/worldbuilder.hpp @@ -8,11 +8,11 @@ class WorldBuilder { public: Map& $map; - std::shared_ptr $collision; + SpatialMap& $collision; - WorldBuilder(Map &map) : + WorldBuilder(Map &map, SpatialMap& collision) : $map(map), - $collision(std::make_shared()) + $collision(collision) { } void generate_map();