Switching to Linux to find a memory bug and I want to keep a record of what caused it.

master
Zed A. Shaw 5 days ago
parent be3eef7082
commit e51fb8627c
  1. 10
      gui/debug_ui.cpp
  2. 2
      gui/debug_ui.hpp
  3. 36
      levelmanager.cpp
  4. 2
      levelmanager.hpp
  5. 5
      raycaster.cpp
  6. 4
      worldbuilder.cpp
  7. 6
      worldbuilder.hpp

@ -39,10 +39,12 @@ namespace gui {
$gui.set<guecs::Sprite>(button, { sprite_name}); $gui.set<guecs::Sprite>(button, { sprite_name});
} }
void DebugUI::spawn(std::string enemy_key) { void DebugUI::spawn(const std::string& enemy_key) {
auto ent = $level_mgr.spawn_enemy(enemy_key); (void)enemy_key;
auto& level = $level_mgr.current(); dbc::log("THIS FUNCTION NEEDS A REWRITE");
level.world->send<Events::GUI>(Events::GUI::ENTITY_SPAWN, ent, {}); // auto ent = $level_mgr.spawn_enemy(enemy_key);
// auto& level = $level_mgr.current();
// level.world->send<Events::GUI>(Events::GUI::ENTITY_SPAWN, ent, {});
} }
void DebugUI::render(sf::RenderWindow& window) { void DebugUI::render(sf::RenderWindow& window) {

@ -19,7 +19,7 @@ namespace gui {
void render(sf::RenderWindow& window); void render(sf::RenderWindow& window);
bool mouse(float x, float y, bool hover); bool mouse(float x, float y, bool hover);
void debug(); 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); void add_spawn_button(std::string enemy_key, std::string sprite_name, std::string region);
Stats::TimeBullshit time_start(); Stats::TimeBullshit time_start();

@ -60,34 +60,10 @@ shared_ptr<gui::BossFightUI> LevelManager::create_bossfight(shared_ptr<DinkyECS:
return make_shared<gui::BossFightUI>(world, boss_id); return make_shared<gui::BossFightUI>(world, boss_id);
} }
DinkyECS::Entity LevelManager::spawn_enemy(std::string named) { DinkyECS::Entity LevelManager::spawn_enemy(const std::string& named) {
(void)named; (void)named;
auto& level = current(); dbc::log("THIS FUNCTION NEEDS A REWRITE");
return 0;
auto &config = level.world->get_the<GameConfig>();
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<Position>(entity_id);
auto player_pos = level.world->get<Position>(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;
} }
size_t LevelManager::create_level(shared_ptr<DinkyECS::World> prev_world) { size_t LevelManager::create_level(shared_ptr<DinkyECS::World> prev_world) {
@ -96,7 +72,9 @@ size_t LevelManager::create_level(shared_ptr<DinkyECS::World> prev_world) {
auto scaling = scale_level(); auto scaling = scale_level();
auto map = make_shared<Map>(scaling.map_width, scaling.map_height); auto map = make_shared<Map>(scaling.map_width, scaling.map_height);
WorldBuilder builder(*map); auto collision = std::make_shared<SpatialMap>();
WorldBuilder builder(*map, *collision);
builder.generate(*world); builder.generate(*world);
size_t index = $levels.size(); size_t index = $levels.size();
@ -104,7 +82,7 @@ size_t LevelManager::create_level(shared_ptr<DinkyECS::World> prev_world) {
auto player = world->get_the<Player>(); auto player = world->get_the<Player>();
$levels.emplace_back(index, player.entity, map, world, $levels.emplace_back(index, player.entity, map, world,
make_shared<LightRender>(map->tiles()), builder.$collision); make_shared<LightRender>(map->tiles()), collision);
dbc::check(index == $levels.size() - 1, "Level index is not the same as $levels.size() - 1, off by one error"); dbc::check(index == $levels.size() - 1, "Level index is not the same as $levels.size() - 1, off by one error");
return index; return index;

@ -41,5 +41,5 @@ class LevelManager {
GameLevel &get(size_t index); GameLevel &get(size_t index);
LevelScaling scale_level(); LevelScaling scale_level();
DinkyECS::Entity spawn_enemy(std::string named); DinkyECS::Entity spawn_enemy(const std::string& named);
}; };

@ -437,8 +437,9 @@ void Raycaster::update_level(GameLevel level) {
$level.world->query<components::Sprite>([&](const auto ent, auto& sprite) { $level.world->query<components::Sprite>([&](const auto ent, auto& sprite) {
// player doesn't need a sprite // player doesn't need a sprite
if($level.player == ent) return; if($level.player != ent) {
update_sprite(ent, sprite); update_sprite(ent, sprite);
}
}); });
} }

@ -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();) { 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)}; 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; pos_out = test;
return true; 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"]); components::configure_entity(world, item, entity_data["components"]);
} }
$collision->insert(pos, item, has_collision); $collision.insert(pos, item, has_collision);
return item; return item;
} }

@ -8,11 +8,11 @@
class WorldBuilder { class WorldBuilder {
public: public:
Map& $map; Map& $map;
std::shared_ptr<SpatialMap> $collision; SpatialMap& $collision;
WorldBuilder(Map &map) : WorldBuilder(Map &map, SpatialMap& collision) :
$map(map), $map(map),
$collision(std::make_shared<SpatialMap>()) $collision(collision)
{ } { }
void generate_map(); void generate_map();

Loading…
Cancel
Save