feat(editor): col·locació d'entitats amb snap per tipus i bloqueig de solapaments
This commit is contained in:
1 parent
94213f9fd6
commit
9b09ccb765
5 files changed
+165
-38
No files matched your search
@@ -395,30 +395,31 @@ void EntityManager::reload(const std::string& level_yaml_path) {
|
||||
loadFromLevel(level_yaml_path);
|
||||
}
|
||||
|
||||
auto EntityManager::addSpawn(const fkyaml::node& spawn) -> Entity* {
|
||||
if (!spawn.contains("type")) { return nullptr; }
|
||||
const auto TYPE = spawn["type"].get_value<std::string>();
|
||||
|
||||
SpriteInfo sprite;
|
||||
std::string anchor;
|
||||
auto entity = buildEntity(TYPE, sprite, anchor);
|
||||
if (entity == nullptr) { return nullptr; }
|
||||
Entity* observer = entity.get();
|
||||
|
||||
bool ok = false;
|
||||
if (TYPE == "sarcophagus") {
|
||||
ok = placeSarcophagus(*this, std::move(entity), sprite, spawn);
|
||||
} else if (TYPE == "door") {
|
||||
ok = placeDoor(*this, std::move(entity), sprite);
|
||||
} else {
|
||||
ok = placeGeneric(*this, std::move(entity), TYPE, sprite, anchor, spawn);
|
||||
}
|
||||
return ok ? observer : nullptr;
|
||||
}
|
||||
|
||||
void EntityManager::loadFromLevel(const std::string& level_yaml_path) {
|
||||
const auto SPAWNS = EntityLoader::readSpawns(level_yaml_path);
|
||||
int loaded = 0;
|
||||
|
||||
for (const auto& spawn : SPAWNS) {
|
||||
if (!spawn.contains("type")) { continue; }
|
||||
const auto TYPE = spawn["type"].get_value<std::string>();
|
||||
|
||||
SpriteInfo sprite;
|
||||
std::string anchor;
|
||||
auto entity = buildEntity(TYPE, sprite, anchor);
|
||||
if (entity == nullptr) { continue; }
|
||||
|
||||
bool ok = false;
|
||||
if (TYPE == "sarcophagus") {
|
||||
ok = placeSarcophagus(*this, std::move(entity), sprite, spawn);
|
||||
} else if (TYPE == "door") {
|
||||
ok = placeDoor(*this, std::move(entity), sprite);
|
||||
} else {
|
||||
ok = placeGeneric(*this, std::move(entity), TYPE, sprite, anchor, spawn);
|
||||
}
|
||||
const bool OK = ok;
|
||||
if (OK) { ++loaded; }
|
||||
}
|
||||
const int LOADED = static_cast<int>(std::ranges::count_if(SPAWNS,
|
||||
[this](const fkyaml::node& spawn) { return addSpawn(spawn) != nullptr; }));
|
||||
|
||||
// Broadcast inicial: marca com a "pintats" tots els tiles ocupats per
|
||||
// decals de sòl (Hole, i futurs pinchos plans, plaques, charcos...).
|
||||
@@ -446,6 +447,6 @@ void EntityManager::loadFromLevel(const std::string& level_yaml_path) {
|
||||
<< " tile_painted broadcast inicial (decals de sòl)\n";
|
||||
}
|
||||
|
||||
std::cout << "EntityManager: " << loaded << " entitats carregades des de "
|
||||
std::cout << "EntityManager: " << LOADED << " entitats carregades des de "
|
||||
<< level_yaml_path << '\n';
|
||||
}
|
||||
Reference in new issue
Block a user