From abcc0b35739ec6634b2e6a4603ebba47e9a24ed3 Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Fri, 12 Apr 2024 21:18:27 +0300 Subject: [PATCH] Editor: Prefabs resets it's transform after end of simulation #751 --- engine/src/components/actor.cpp | 2 ++ engine/src/editor/viewport/cameracontroller.cpp | 9 ++++++--- modules/physics/bullet/src/components/boxcollider.cpp | 4 +++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/engine/src/components/actor.cpp b/engine/src/components/actor.cpp index 8c0dd5ed8..db55c9e01 100644 --- a/engine/src/components/actor.cpp +++ b/engine/src/components/actor.cpp @@ -389,10 +389,12 @@ void Actor::setPrefab(Prefab *prefab) { if(m_prefab != prefab) { if(m_prefab) { m_prefab->unsubscribe(this); + m_prefab->decRef(); } m_prefab = prefab; if(m_prefab) { + m_prefab->incRef(); m_prefab->subscribe(&Actor::prefabUpdated, this); } else { clearCloneRef(); diff --git a/engine/src/editor/viewport/cameracontroller.cpp b/engine/src/editor/viewport/cameracontroller.cpp index 5047f1698..21f99d937 100644 --- a/engine/src/editor/viewport/cameracontroller.cpp +++ b/engine/src/editor/viewport/cameracontroller.cpp @@ -386,9 +386,12 @@ void CameraController::drawHelpers(Object &object) { Component *component = dynamic_cast(it); if(component && component->actor()->isEnabled()) { component->drawGizmos(); - float distance = HandleTools::distanceToPoint(Matrix4(), component->transform()->worldPosition(), Handles::s_Mouse); - if(distance <= s_Sence) { - select(object); + Transform *t = component->transform(); + if(t) { + float distance = HandleTools::distanceToPoint(Matrix4(), t->worldPosition(), Handles::s_Mouse); + if(distance <= s_Sence) { + select(object); + } } for(auto sel : list) { diff --git a/modules/physics/bullet/src/components/boxcollider.cpp b/modules/physics/bullet/src/components/boxcollider.cpp index c5f1a6ad9..29d800b6e 100644 --- a/modules/physics/bullet/src/components/boxcollider.cpp +++ b/modules/physics/bullet/src/components/boxcollider.cpp @@ -56,5 +56,7 @@ btCollisionShape *BoxCollider::shape() { */ void BoxCollider::drawGizmosSelected() { Transform *t = transform(); - Gizmos::drawWireBox(m_center, m_size * 2.0f, gizmoColor(), t->worldTransform()); + if(t) { + Gizmos::drawWireBox(m_center, m_size * 2.0f, gizmoColor(), t->worldTransform()); + } }