From 5a3b567fd14e394fc68d6c3d2644aa8414c9dbfa Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Tue, 8 Apr 2025 13:01:24 -0400 Subject: [PATCH] Solve a problem where if you give a name for cell and the name doesn't exist you get a crash during world query in GUECS. --- guecs.cpp | 25 +++++++++++++------------ guecs.hpp | 1 + 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/guecs.cpp b/guecs.cpp index 9b1aebe..5fb2029 100644 --- a/guecs.cpp +++ b/guecs.cpp @@ -80,23 +80,24 @@ namespace guecs { dbc::check(good, "LEL parsing failed."); for(auto& [name, cell] : $parser.cells) { - auto ent = entity(name); + auto ent = init_entity(name); $world.set(ent, cell); } } + DinkyECS::Entity UI::init_entity(std::string name) { + auto entity = $world.entity(); + // this lets you look up an entity by name + $name_ents.insert_or_assign(name, entity); + // this makes it easier to get the name during querying + $world.set(entity, {name}); + return entity; + } + DinkyECS::Entity UI::entity(std::string name) { - if($name_ents.contains(name)) { - // already exists so just return it - return $name_ents.at(name); - } else { - auto entity = $world.entity(); - // this lets you look up an entity by name - $name_ents.insert_or_assign(name, entity); - // this makes it easier to get the name during querying - $world.set(entity, {name}); - return entity; - } + dbc::check($name_ents.contains(name), + fmt::format("GUECS entity {} does not exist. Forgot to init_entity?", name)); + return $name_ents.at(name); } void UI::init() { diff --git a/guecs.hpp b/guecs.hpp index 841dc03..79262c5 100644 --- a/guecs.hpp +++ b/guecs.hpp @@ -114,6 +114,7 @@ namespace guecs { void position(int x, int y, int width, int height); void layout(std::string grid); + DinkyECS::Entity init_entity(std::string name); DinkyECS::Entity entity(std::string name); inline lel::CellMap& cells() {