Skip to content

Commit

Permalink
Editor: Crash after stop of game simulation #495
Browse files Browse the repository at this point in the history
  • Loading branch information
eprikazchikov committed Dec 8, 2022
1 parent e4e2264 commit 6672325
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 12 deletions.
16 changes: 7 additions & 9 deletions worldeditor/src/editors/scenecomposer/objectctrl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,10 +281,11 @@ void ObjectCtrl::onPrefabCreated(uint32_t uuid, uint32_t clone) {
Scene *scene = nullptr;
bool swapped = false;
for(auto &it : m_selected) {
if(it.object->uuid() == uuid) {
if(it.uuid == uuid) {
Object *object = findObject(clone);
if(object) {
it.object = static_cast<Actor *>(object);
it.uuid = object->uuid();
scene = it.object->scene();
swapped = true;
break;
Expand Down Expand Up @@ -341,6 +342,7 @@ void ObjectCtrl::selectActors(const list<uint32_t> &list) {
if(actor) {
EditorTool::Select data;
data.object = actor;
data.uuid = actor->uuid();
m_selected.push_back(data);
}
}
Expand All @@ -351,7 +353,7 @@ void ObjectCtrl::onSelectActor(const list<uint32_t> &list, bool additive) {
std::list<uint32_t> local = list;
if(additive) {
for(auto &it : m_selected) {
local.push_back(it.object->uuid());
local.push_back(it.uuid);
}
}
UndoManager::instance()->push(new SelectObjects(local, this));
Expand Down Expand Up @@ -652,12 +654,6 @@ Object *ObjectCtrl::findObject(uint32_t id, Object *parent) {
return result;
}

void ObjectCtrl::resetSelection() {
for(auto &it : m_selected) {
it.renderable = nullptr;
}
}

SelectObjects::SelectObjects(const list<uint32_t> &objects, ObjectCtrl *ctrl, const QString &name, QUndoCommand *group) :
UndoObject(ctrl, name, group),
m_objects(objects) {
Expand Down Expand Up @@ -949,7 +945,9 @@ void RemoveComponent::redo() {
QList<Object *> children = QList<Object *>::fromStdList(object->parent()->getChildren());
m_index = children.indexOf(object);

m_controller->resetSelection();
for(auto it : m_controller->selectList()) {
it.renderable = nullptr;
}

delete object;
}
Expand Down
4 changes: 2 additions & 2 deletions worldeditor/src/editors/scenecomposer/objectctrl.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ class ObjectCtrl : public CameraCtrl {
void setIsolatedModified(bool flag) { m_isolatedActorModified = flag; }
bool isIsolatedModified() const { return m_isolatedActorModified; }

void resetSelection();

QList<EditorTool *> tools() const { return m_tools; }

EditorTool::SelectList &selectList() { return m_selected; }

bool isDrag() const { return m_drag; }
void setDrag(bool drag);

Expand Down
14 changes: 13 additions & 1 deletion worldeditor/src/editors/scenecomposer/scenecomposer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -293,9 +293,21 @@ void SceneComposer::restoreBackupScenes() {
}
}
m_backupScenes.clear();

m_menuObject = Engine::sceneGraph()->activeScene();

bool first = true;
for(auto &it : m_controller->selectList()) {
Actor *actor = dynamic_cast<Actor *>(ObjectSystem::findObject(it.uuid, Engine::sceneGraph()));
if(actor) {
it.object = actor;
if(first) {
m_properties->setObject(actor);
emit itemSelected(m_properties);
first = false;
}
}
}

emit hierarchyCreated(Engine::sceneGraph());
}
}
Expand Down

0 comments on commit 6672325

Please sign in to comment.