From ce4a229e921a0d819f13c1117c5cc1c98eb53dd1 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 15 May 2025 11:54:05 -0500 Subject: [PATCH] cScenario copy constructor/swap update town/outdoor pointers --- src/scenario/scenario.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/scenario/scenario.cpp b/src/scenario/scenario.cpp index 06ed53f1..8111a961 100644 --- a/src/scenario/scenario.cpp +++ b/src/scenario/scenario.cpp @@ -132,11 +132,16 @@ cScenario::cScenario(const cScenario& other) contact_info[0] = other.contact_info[0]; contact_info[1] = other.contact_info[1]; // Copy towns and sectors - for(size_t i = 0; i < towns.size(); i++) + for(size_t i = 0; i < towns.size(); i++){ towns[i] = new cTown(*other.towns[i]); - for(size_t i = 0; i < outdoors.width(); i++) - for(size_t j = 0; j < outdoors.height(); j++) + towns[i]->reattach(*this); + } + for(size_t i = 0; i < outdoors.width(); i++){ + for(size_t j = 0; j < outdoors.height(); j++){ outdoors[i][j] = new cOutdoors(*other.outdoors[i][j]); + outdoors[i][j]->reattach(*this); + } + } } cScenario::cScenario(cScenario&& other) { @@ -196,7 +201,23 @@ void swap(cScenario& lhs, cScenario& rhs) { swap(lhs.is_legacy, rhs.is_legacy); swap(lhs.scen_file, rhs.scen_file); swap(lhs.outdoors, rhs.outdoors); + for(size_t i = 0; i < lhs.outdoors.width(); i++){ + for(size_t j = 0; j < lhs.outdoors.height(); j++){ + lhs.outdoors[i][j]->reattach(lhs); + } + } + for(size_t i = 0; i < rhs.outdoors.width(); i++){ + for(size_t j = 0; j < rhs.outdoors.height(); j++){ + rhs.outdoors[i][j]->reattach(rhs); + } + } swap(lhs.towns, rhs.towns); + for(size_t i = 0; i < lhs.towns.size(); ++i){ + lhs.towns[i]->reattach(lhs); + } + for(size_t i = 0; i < rhs.towns.size(); ++i){ + rhs.towns[i]->reattach(rhs); + } swap(lhs.evt_names, rhs.evt_names); swap(lhs.ic_names, rhs.ic_names); swap(lhs.itf_names, rhs.itf_names);