|
11 | 11 | #include "command/type/DeleteEntityCmd.h" |
12 | 12 | #include "command/type/DuplicateEntityCmd.h" |
13 | 13 | #include "command/type/AddComponentCmd.h" |
| 14 | +#include "command/type/MultiPropertyCmd.h" |
| 15 | +#include "component/InstancedMeshComponent.h" |
14 | 16 | #include "command/type/ImportEntityBundleCmd.h" |
15 | 17 | #include "command/type/RemoveEntityFromBundleCmd.h" |
16 | 18 | #include "command/type/AddEntityToBundleCmd.h" |
@@ -880,13 +882,33 @@ void editor::Structure::showTreeNode(editor::TreeNode& node) { |
880 | 882 | selectedScenes.clear(); |
881 | 883 | project->addSelectedEntity(node.entitySceneId, node.id); |
882 | 884 | project->setSelectedSceneForProperties(node.entitySceneId); |
| 885 | + // Clear any selected instance or tile that belonged to this entity |
| 886 | + SceneProject* sp = project->getScene(node.entitySceneId); |
| 887 | + if (sp && sp->sceneRender) { |
| 888 | + if (sp->sceneRender->getSelectedInstanceEntity() == node.id) { |
| 889 | + sp->sceneRender->clearInstanceSelection(); |
| 890 | + } |
| 891 | + if (sp->sceneRender->getSelectedTileEntity() == (Entity)node.id) { |
| 892 | + sp->sceneRender->clearTileSelection(); |
| 893 | + } |
| 894 | + } |
883 | 895 | } else if (!node.isScene){ |
884 | 896 | ImGuiIO& io = ImGui::GetIO(); |
885 | 897 | if (!io.KeyShift){ |
886 | 898 | project->clearAllSelections(project->getSelectedSceneId()); |
887 | 899 | } |
888 | 900 | project->addSelectedEntity(project->getSelectedSceneId(), node.id); |
889 | 901 | project->setSelectedSceneForProperties(project->getSelectedSceneId()); |
| 902 | + // Clear any selected instance or tile that belonged to this entity |
| 903 | + SceneProject* sp = project->getSelectedScene(); |
| 904 | + if (sp && sp->sceneRender) { |
| 905 | + if (sp->sceneRender->getSelectedInstanceEntity() == node.id) { |
| 906 | + sp->sceneRender->clearInstanceSelection(); |
| 907 | + } |
| 908 | + if (sp->sceneRender->getSelectedTileEntity() == (Entity)node.id) { |
| 909 | + sp->sceneRender->clearTileSelection(); |
| 910 | + } |
| 911 | + } |
890 | 912 | }else{ |
891 | 913 | project->clearAllSelections(project->getSelectedSceneId()); |
892 | 914 | selectedScenes.clear(); |
@@ -1011,7 +1033,11 @@ void editor::Structure::showTreeNode(editor::TreeNode& node) { |
1011 | 1033 | bool hasMesh = signature.test(selectedScene->scene->getComponentId<MeshComponent>()); |
1012 | 1034 | bool hasInstanced = signature.test(selectedScene->scene->getComponentId<InstancedMeshComponent>()); |
1013 | 1035 | if (hasMesh && ImGui::MenuItem(ICON_FA_LAYER_GROUP " Add Instanced Mesh", nullptr, false, !node.isLocked && !hasInstanced)) { |
1014 | | - CommandHandle::get(project->getSelectedSceneId())->addCommandNoMerge(new AddComponentCmd(project, project->getSelectedSceneId(), node.id, ComponentType::InstancedMeshComponent)); |
| 1036 | + MultiPropertyCmd* multiCmd = new MultiPropertyCmd(); |
| 1037 | + multiCmd->addCommand(std::make_unique<AddComponentCmd>(project, project->getSelectedSceneId(), node.id, ComponentType::InstancedMeshComponent)); |
| 1038 | + std::vector<InstanceData> initialInstances = { InstanceData() }; |
| 1039 | + multiCmd->addPropertyCmd<std::vector<InstanceData>>(project, project->getSelectedSceneId(), node.id, ComponentType::InstancedMeshComponent, "instances", initialInstances); |
| 1040 | + CommandHandle::get(project->getSelectedSceneId())->addCommandNoMerge(multiCmd); |
1015 | 1041 | } |
1016 | 1042 | } |
1017 | 1043 | } |
|
0 commit comments