|
15 | 15 | #include "Editor/IEditor.h" |
16 | 16 | #include "Scene/Editor/ISceneEditorUIExtension.h" |
17 | 17 | #include "Scene/Editor/ISceneEditorPlugin.h" |
| 18 | +#include "Scene/Editor/ISceneOperationData.h" |
18 | 19 | #include "Scene/Editor/SceneAsset.h" |
19 | 20 | #include "Scene/Editor/SceneEditorPage.h" |
20 | 21 | #include "Scene/Editor/SceneEditorPageFactory.h" |
|
24 | 25 |
|
25 | 26 | namespace traktor::scene |
26 | 27 | { |
27 | | - namespace |
28 | | - { |
29 | | - |
30 | | -void renameIds(ISerializable* object, const SmallMap< Guid, Guid >& renamedMap) |
31 | | -{ |
32 | | - Ref< Reflection > reflection = Reflection::create(object); |
33 | | - |
34 | | - // Rename all id;s in this object first. |
35 | | - RefArray< ReflectionMember > idMembers; |
36 | | - reflection->findMembers(RfpMemberType(type_of< RfmPrimitiveGuid >()), idMembers); |
37 | | - for (auto idMember : idMembers) |
38 | | - { |
39 | | - auto id = static_cast< RfmPrimitiveGuid* >(idMember.ptr()); |
40 | | - auto it = renamedMap.find(id->get()); |
41 | | - if (it != renamedMap.end()) |
42 | | - id->set(it->second); |
43 | | - } |
44 | | - |
45 | | - // Recurse with child objects. |
46 | | - RefArray< ReflectionMember > objectMembers; |
47 | | - reflection->findMembers(RfpMemberType(type_of< RfmObject >()), objectMembers); |
48 | | - for (auto objectMember : objectMembers) |
49 | | - { |
50 | | - auto object = static_cast< RfmObject* >(objectMember.ptr()); |
51 | | - renameIds(object->get(), renamedMap); |
52 | | - } |
53 | | - |
54 | | - reflection->apply(object); |
55 | | -} |
56 | | - |
57 | | - } |
58 | 28 |
|
59 | 29 | T_IMPLEMENT_RTTI_FACTORY_CLASS(L"traktor.scene.SceneEditorPageFactory", 0, SceneEditorPageFactory, editor::IEditorPageFactory) |
60 | 30 |
|
@@ -144,36 +114,21 @@ Ref< ISerializable > SceneEditorPageFactory::cloneAsset(const ISerializable* ass |
144 | 114 |
|
145 | 115 | if (auto mutableSceneAsset = dynamic_type_cast< SceneAsset* >(mutableAsset)) |
146 | 116 | { |
147 | | - SmallMap< Guid, Guid > renamedMap; |
148 | | - |
149 | | - // Rename all entities. |
150 | 117 | Traverser::visit(mutableSceneAsset, [&](Ref< world::EntityData >& inoutEntityData) -> Traverser::Result { |
151 | | - Guid newEntityId = Guid::create(); |
152 | | - if (inoutEntityData->getId().isNotNull()) |
153 | | - renamedMap.insert(inoutEntityData->getId(), newEntityId); |
| 118 | + const Guid newEntityId = Guid::create(); |
154 | 119 | inoutEntityData->setId(newEntityId); |
155 | 120 | return Traverser::Result::Continue; |
156 | 121 | }); |
157 | | - |
158 | | - // Also ensure attached data contain updated entity identities. |
159 | | - for (auto operationData : mutableSceneAsset->getOperationData()) |
160 | | - renameIds(operationData, renamedMap); |
161 | 122 | } |
162 | 123 | else if (auto mutableEntityData = dynamic_type_cast< world::EntityData* >(mutableAsset)) |
163 | 124 | { |
164 | | - SmallMap< Guid, Guid > renamedMap; |
165 | | - |
166 | 125 | // Rename root entity data. |
167 | | - Guid newEntityId = Guid::create(); |
168 | | - if (mutableEntityData->getId().isNotNull()) |
169 | | - renamedMap.insert(mutableEntityData->getId(), newEntityId); |
| 126 | + const Guid newEntityId = Guid::create(); |
170 | 127 | mutableEntityData->setId(newEntityId); |
171 | 128 |
|
172 | 129 | // Rename all entities. |
173 | 130 | Traverser::visit(mutableEntityData, [&](Ref< world::EntityData >& inoutEntityData) -> Traverser::Result { |
174 | | - Guid newEntityId = Guid::create(); |
175 | | - if (inoutEntityData->getId().isNotNull()) |
176 | | - renamedMap.insert(inoutEntityData->getId(), newEntityId); |
| 131 | + const Guid newEntityId = Guid::create(); |
177 | 132 | inoutEntityData->setId(newEntityId); |
178 | 133 | return Traverser::Result::Continue; |
179 | 134 | }); |
|
0 commit comments