Skip to content

Commit e81c1c3

Browse files
committed
Engine: Store clones using shared pointers
1 parent 12236a8 commit e81c1c3

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

src/engine/internal/engine.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,15 @@ void Engine::initClone(std::shared_ptr<Sprite> clone)
309309
}
310310
}
311311

312-
assert(std::find(m_clones.begin(), m_clones.end(), clone.get()) == m_clones.end());
312+
assert(std::find(m_clones.begin(), m_clones.end(), clone) == m_clones.end());
313313
assert(std::find(m_executableTargets.begin(), m_executableTargets.end(), clone.get()) == m_executableTargets.end());
314-
m_clones.push_back(clone.get());
314+
m_clones.insert(clone);
315315
m_executableTargets.push_back(clone.get()); // execution order needs to be updated after this
316316
}
317317

318318
void Engine::deinitClone(std::shared_ptr<Sprite> clone)
319319
{
320-
m_clones.erase(std::remove(m_clones.begin(), m_clones.end(), clone.get()), m_clones.end());
320+
m_clones.erase(clone);
321321
m_executableTargets.erase(std::remove(m_executableTargets.begin(), m_executableTargets.end(), clone.get()), m_executableTargets.end());
322322
}
323323

@@ -1218,8 +1218,8 @@ void Engine::deleteClones()
12181218
void Engine::removeExecutableClones()
12191219
{
12201220
// Remove clones from the executable targets
1221-
for (Target *target : m_clones)
1222-
m_executableTargets.erase(std::remove(m_executableTargets.begin(), m_executableTargets.end(), target), m_executableTargets.end());
1221+
for (std::shared_ptr<Sprite> clone : m_clones)
1222+
m_executableTargets.erase(std::remove(m_executableTargets.begin(), m_executableTargets.end(), clone.get()), m_executableTargets.end());
12231223
}
12241224

12251225
void Engine::updateFrameDuration()

src/engine/internal/engine.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <memory>
1010
#include <chrono>
1111
#include <mutex>
12+
#include <set>
1213

1314
#include "blocksectioncontainer.h"
1415

@@ -183,7 +184,7 @@ class Engine : public IEngine
183184
unsigned int m_stageWidth = 480;
184185
unsigned int m_stageHeight = 360;
185186
int m_cloneLimit = 300;
186-
std::vector<Sprite *> m_clones;
187+
std::set<std::shared_ptr<Sprite>> m_clones;
187188
bool m_spriteFencingEnabled = true;
188189

189190
bool m_running = false;

0 commit comments

Comments
 (0)