Use CollisionObject3D API when baking the navmesh with static colliders, instead of collecting CollisionShape3D nodes
(cherry picked from commit 72c37c4bcd
)
This commit is contained in:
parent
c46bbdee53
commit
7c400b3ea0
1 changed files with 11 additions and 8 deletions
|
@ -35,7 +35,6 @@
|
|||
//#include "core/math/quick_hull.h"
|
||||
//#include "core/math/convex_hull.h"
|
||||
#include "core/os/thread.h"
|
||||
#include "scene/3d/collision_shape.h"
|
||||
#include "scene/3d/mesh_instance.h"
|
||||
#include "scene/3d/multimesh_instance.h"
|
||||
#include "scene/3d/physics_body.h"
|
||||
|
@ -204,14 +203,18 @@ void NavigationMeshGenerator::_parse_geometry(const Transform &p_navmesh_xform,
|
|||
StaticBody *static_body = Object::cast_to<StaticBody>(p_node);
|
||||
|
||||
if (static_body->get_collision_layer() & p_collision_mask) {
|
||||
for (int i = 0; i < p_node->get_child_count(); ++i) {
|
||||
Node *child = p_node->get_child(i);
|
||||
if (Object::cast_to<CollisionShape>(child)) {
|
||||
CollisionShape *col_shape = Object::cast_to<CollisionShape>(child);
|
||||
List<uint32_t> shape_owners;
|
||||
static_body->get_shape_owners(&shape_owners);
|
||||
for (List<uint32_t>::Element *E = shape_owners.front(); E; E = E->next()) {
|
||||
uint32_t shape_owner = E->get();
|
||||
const int shape_count = static_body->shape_owner_get_shape_count(shape_owner);
|
||||
for (int i = 0; i < shape_count; i++) {
|
||||
Ref<Shape> s = static_body->shape_owner_get_shape(shape_owner, i);
|
||||
if (s.is_null()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Transform transform = p_navmesh_xform * static_body->get_global_transform() * col_shape->get_transform();
|
||||
|
||||
Ref<Shape> s = col_shape->get_shape();
|
||||
const Transform transform = p_navmesh_xform * static_body->get_global_transform() * static_body->shape_owner_get_transform(shape_owner);
|
||||
|
||||
BoxShape *box = Object::cast_to<BoxShape>(*s);
|
||||
if (box) {
|
||||
|
|
Loading…
Reference in a new issue