]> git.tdb.fi Git - libs/game.git/commitdiff
Make temporary copies of component/child vectors when synthesizing events
authorMikko Rasa <tdb@tdb.fi>
Sat, 15 Mar 2025 22:24:09 +0000 (00:24 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sat, 15 Mar 2025 22:29:37 +0000 (00:29 +0200)
An event listener might add components or child entities, which can
invalidate iterators to the vectors.

source/game/stage.cpp

index 34940b5e8d5e872b46e6df9ae8f3d17671b19a66..040f7efa1a0faa2765d906fad859bfa51b3c965d 100644 (file)
@@ -74,9 +74,11 @@ void Stage::synthesize_initial_events(EventObserver &target_observer)
 
 void Stage::synthesize_initial_events(Handle<Entity> entity, EventObserver &target_observer)
 {
-       for(Handle<Component> c: entity->get_components())
+       vector<Handle<Component>> components = entity->get_components();
+       for(Handle<Component> c: components)
                event_source.emit_to<Events::ComponentCreated>(target_observer, c);
-       for(Handle<Entity> e: entity->get_children())
+       vector<Handle<Entity>> children = entity->get_children();
+       for(Handle<Entity> e: children)
                synthesize_initial_events(e, target_observer);
        event_source.emit_to<Events::EntityCreated>(target_observer, entity);
 }