feat(editor): mode mà — selecció, mou, borra i marc d'entitats
This commit is contained in:
1 parent
9b09ccb765
commit
b4e36944d7
5 files changed
+182
-9
No files matched your search
@@ -87,6 +87,21 @@ void EntityManager::setDoor(Door* door) {
|
||||
}
|
||||
}
|
||||
|
||||
auto EntityManager::removeEntity(Entity* observer) -> bool {
|
||||
if (observer == nullptr) { return false; }
|
||||
const bool WAS_DOOR = (door_ == observer);
|
||||
const bool WAS_SARC = (observer->getName() == "sarcophagus");
|
||||
auto it = std::ranges::find_if(entities_, [observer](const auto& up) { return up.get() == observer; });
|
||||
if (it == entities_.end()) { return false; }
|
||||
entities_.erase(it);
|
||||
if (WAS_DOOR) { door_ = nullptr; }
|
||||
if (WAS_SARC && total_sarcs_ > 0) { --total_sarcs_; }
|
||||
// No tocar `opened_sarcs_` aquí: l'editor congela el joc i no pot
|
||||
// disparar-se cap esdeveniment derivat. Quan el GameScene faça el
|
||||
// reload posterior, els comptadors es re-deriven d'inici.
|
||||
return true;
|
||||
}
|
||||
|
||||
auto EntityManager::addSarcophagus(std::unique_ptr<Sarcophagus> sarc) -> Sarcophagus* {
|
||||
if (sarc == nullptr) { return nullptr; }
|
||||
sarc->setEventBus(&bus_);
|
||||
|
||||
@@ -44,6 +44,13 @@ class EntityManager {
|
||||
// una. Si ja n'hi ha una assignada, la substitueix (útil a tests).
|
||||
void setDoor(Door* door);
|
||||
|
||||
// Treu i destrueix l'entitat observada. Si era la porta o un sarc,
|
||||
// ajusta `door_` / `total_sarcs_` en conseqüència. Pensat per al
|
||||
// editor: no toca `opened_sarcs_` ni publica events — el joc està
|
||||
// congelat i, en sortir del editor, GameScene torna a fer reload(),
|
||||
// així que l'estat es deriva net.
|
||||
auto removeEntity(Entity* observer) -> bool;
|
||||
|
||||
// Marca una entitat com a sarcòfag — si no es passa per `add` amb
|
||||
// type=sarcophagus no es compta al total. Útil en combinació amb
|
||||
// `add` quan es fa addSarcophagus(unique_ptr<Sarcophagus>).
|
||||
|
||||
Reference in new issue
Block a user