diff --git a/Source/Editor/SceneGraph/Actors/BoxColliderNode.cs b/Source/Editor/SceneGraph/Actors/BoxColliderNode.cs index 0f6670feb..cc3bcbe42 100644 --- a/Source/Editor/SceneGraph/Actors/BoxColliderNode.cs +++ b/Source/Editor/SceneGraph/Actors/BoxColliderNode.cs @@ -19,12 +19,16 @@ namespace FlaxEditor.SceneGraph.Actors [CustomEditor(typeof(BoxCollider)), DefaultEditor] public class BoxColliderEditor : ActorEditor { + private bool _keepLocalOrientation = false; /// public override void Initialize(LayoutElementsContainer layout) { base.Initialize(layout); layout.Space(20f); + var checkbox = layout.Checkbox("Keep Local Orientation", "Keeps the local orientation when resizing.").CheckBox; + checkbox.Checked = _keepLocalOrientation; + checkbox.StateChanged += box => _keepLocalOrientation = box.Checked; layout.Button("Resize to Fit", Editor.Instance.CodeDocs.GetTooltip(new ScriptMemberInfo(typeof(BoxCollider).GetMethod("AutoResize")))).Button.Clicked += OnResizeClicked; } @@ -33,7 +37,7 @@ namespace FlaxEditor.SceneGraph.Actors foreach (var value in Values) { if (value is BoxCollider collider) - collider.AutoResize(); + collider.AutoResize(!_keepLocalOrientation); } } } @@ -76,7 +80,7 @@ namespace FlaxEditor.SceneGraph.Actors return; } - ((BoxCollider)Actor).AutoResize(); + ((BoxCollider)Actor).AutoResize(false); } } } diff --git a/Source/Engine/Physics/Colliders/BoxCollider.cpp b/Source/Engine/Physics/Colliders/BoxCollider.cpp index d74b3efba..d82b94d28 100644 --- a/Source/Engine/Physics/Colliders/BoxCollider.cpp +++ b/Source/Engine/Physics/Colliders/BoxCollider.cpp @@ -20,7 +20,7 @@ void BoxCollider::SetSize(const Float3& value) UpdateBounds(); } -void BoxCollider::AutoResize() +void BoxCollider::AutoResize(bool globalOrientation = true) { Actor* parent = GetParent(); if (Cast(parent)) @@ -43,7 +43,8 @@ void BoxCollider::AutoResize() SetLocalPosition(Vector3::Zero); SetSize(parentSize / parentScale); SetCenter(parentCenter / parentScale); - SetOrientation(GetOrientation() * Quaternion::Invert(GetOrientation())); + if (globalOrientation) + SetOrientation(GetOrientation() * Quaternion::Invert(GetOrientation())); } #if USE_EDITOR diff --git a/Source/Engine/Physics/Colliders/BoxCollider.h b/Source/Engine/Physics/Colliders/BoxCollider.h index 3c15ce640..3c6759ee9 100644 --- a/Source/Engine/Physics/Colliders/BoxCollider.h +++ b/Source/Engine/Physics/Colliders/BoxCollider.h @@ -46,7 +46,7 @@ public: /// /// Resizes the collider based on the bounds of it's parent to contain it whole (including any siblings). /// - API_FUNCTION() void AutoResize(); + API_FUNCTION() void AutoResize(bool globalOrientation); public: // [Collider]