diff --git a/server/src/board/tile/rail/blockrailtile.cpp b/server/src/board/tile/rail/blockrailtile.cpp index 8f59571e..cfe9c7c6 100644 --- a/server/src/board/tile/rail/blockrailtile.cpp +++ b/server/src/board/tile/rail/blockrailtile.cpp @@ -33,6 +33,7 @@ #include "../../../train/traintracking.hpp" #include "../../../utils/displayname.hpp" #include "../../../zone/blockzonelist.hpp" +#include "../../../zone/zoneblocklist.hpp" #include "../../list/blockrailtilelist.hpp" #include "../../list/blockrailtilelisttablemodel.hpp" #include "../../map/blockpath.hpp" @@ -569,6 +570,10 @@ void BlockRailTile::destroying() { trains.back()->destroy(); } + for(const auto& zone : *zones) + { + zone->blocks->remove(self); + } m_world.blockRailTiles->removeObject(self); RailTile::destroying(); } diff --git a/server/src/zone/zone.cpp b/server/src/zone/zone.cpp index e3f458a4..bb8c821c 100644 --- a/server/src/zone/zone.cpp +++ b/server/src/zone/zone.cpp @@ -24,6 +24,7 @@ #include "zoneblocklist.hpp" #include "zonelist.hpp" #include "zonelisttablemodel.hpp" +#include "blockzonelist.hpp" #include "../core/attributes.hpp" #include "../core/objectproperty.tpp" #include "../core/objectvectorproperty.tpp" @@ -126,6 +127,17 @@ void Zone::addToWorld() m_world.zones->addObject(shared_ptr()); } +void Zone::destroying() +{ + auto self = shared_ptr(); + for(const auto& block : *blocks) + { + block->zones->remove(self); + } + m_world.zones->removeObject(self); + IdObject::destroying(); +} + void Zone::fireTrainAssigned(const std::shared_ptr& train) { fireEvent(onTrainAssigned, train, shared_ptr()); diff --git a/server/src/zone/zone.hpp b/server/src/zone/zone.hpp index 44e2ef59..280d9773 100644 --- a/server/src/zone/zone.hpp +++ b/server/src/zone/zone.hpp @@ -44,6 +44,7 @@ class Zone : public IdObject protected: void worldEvent(WorldState worldState, WorldEvent worldEvent) override; void addToWorld() override; + void destroying() override; void fireTrainAssigned(const std::shared_ptr& train); void fireTrainEntering(const std::shared_ptr& train);