You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-08 12:40:44 +00:00
Merge pull request #44234 from jeffuntildeath/master
fix for snap to floor editor crash bug
This commit is contained in:
@@ -5826,13 +5826,25 @@ void Node3DEditor::snap_selected_nodes_to_floor() {
|
|||||||
Set<CollisionShape3D *> cs = _get_child_nodes<CollisionShape3D>(sp);
|
Set<CollisionShape3D *> cs = _get_child_nodes<CollisionShape3D>(sp);
|
||||||
|
|
||||||
if (cs.size()) {
|
if (cs.size()) {
|
||||||
AABB aabb = sp->get_global_transform().xform(cs.front()->get()->get_shape()->get_debug_mesh()->get_aabb());
|
AABB aabb;
|
||||||
for (Set<CollisionShape3D *>::Element *I = cs.front(); I; I = I->next()) {
|
bool found_valid_shape = false;
|
||||||
aabb.merge_with(sp->get_global_transform().xform(I->get()->get_shape()->get_debug_mesh()->get_aabb()));
|
if (cs.front()->get()->get_shape().is_valid()) {
|
||||||
|
aabb = sp->get_global_transform().xform(cs.front()->get()->get_shape()->get_debug_mesh()->get_aabb());
|
||||||
|
found_valid_shape = true;
|
||||||
|
}
|
||||||
|
for (Set<CollisionShape3D *>::Element *I = cs.front(); I; I = I->next()) {
|
||||||
|
if (I->get()->get_shape().is_valid()) {
|
||||||
|
aabb.merge_with(sp->get_global_transform().xform(I->get()->get_shape()->get_debug_mesh()->get_aabb()));
|
||||||
|
found_valid_shape = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found_valid_shape) {
|
||||||
|
Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5);
|
||||||
|
from = aabb.position + size;
|
||||||
|
position_offset.y = from.y - sp->get_global_transform().origin.y;
|
||||||
|
} else {
|
||||||
|
from = sp->get_global_transform().origin;
|
||||||
}
|
}
|
||||||
Vector3 size = aabb.size * Vector3(0.5, 0.0, 0.5);
|
|
||||||
from = aabb.position + size;
|
|
||||||
position_offset.y = from.y - sp->get_global_transform().origin.y;
|
|
||||||
} else if (vi.size()) {
|
} else if (vi.size()) {
|
||||||
AABB aabb = vi.front()->get()->get_transformed_aabb();
|
AABB aabb = vi.front()->get()->get_transformed_aabb();
|
||||||
for (Set<VisualInstance3D *>::Element *I = vi.front(); I; I = I->next()) {
|
for (Set<VisualInstance3D *>::Element *I = vi.front(); I; I = I->next()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user