Skip to content

Commit

Permalink
Merge pull request #90503 from rburing/gridmap_has_it_rough
Browse files Browse the repository at this point in the history
GridMap: Fix `physics_material` property
  • Loading branch information
akien-mga committed Apr 11, 2024
2 parents 58f8a22 + 3590d49 commit e911fcd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
19 changes: 16 additions & 3 deletions modules/gridmap/grid_map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ real_t GridMap::get_collision_priority() const {

void GridMap::set_physics_material(Ref<PhysicsMaterial> p_material) {
physics_material = p_material;
_recreate_octant_data();
_update_physics_bodies_characteristics();
}

Ref<PhysicsMaterial> GridMap::get_physics_material() const {
Expand Down Expand Up @@ -370,8 +370,8 @@ void GridMap::set_cell_item(const Vector3i &p_position, int p_item, int p_rot) {
PhysicsServer3D::get_singleton()->body_set_collision_mask(g->static_body, collision_mask);
PhysicsServer3D::get_singleton()->body_set_collision_priority(g->static_body, collision_priority);
if (physics_material.is_valid()) {
PhysicsServer3D::get_singleton()->body_set_param(g->static_body, PhysicsServer3D::BODY_PARAM_FRICTION, physics_material->get_friction());
PhysicsServer3D::get_singleton()->body_set_param(g->static_body, PhysicsServer3D::BODY_PARAM_BOUNCE, physics_material->get_bounce());
PhysicsServer3D::get_singleton()->body_set_param(g->static_body, PhysicsServer3D::BODY_PARAM_FRICTION, physics_material->computed_friction());
PhysicsServer3D::get_singleton()->body_set_param(g->static_body, PhysicsServer3D::BODY_PARAM_BOUNCE, physics_material->computed_bounce());
}
SceneTree *st = SceneTree::get_singleton();

Expand Down Expand Up @@ -748,6 +748,19 @@ void GridMap::_update_physics_bodies_collision_properties() {
}
}

void GridMap::_update_physics_bodies_characteristics() {
real_t friction = 1.0;
real_t bounce = 0.0;
if (physics_material.is_valid()) {
friction = physics_material->computed_friction();
bounce = physics_material->computed_bounce();
}
for (const KeyValue<OctantKey, Octant *> &E : octant_map) {
PhysicsServer3D::get_singleton()->body_set_param(E.value->static_body, PhysicsServer3D::BODY_PARAM_FRICTION, friction);
PhysicsServer3D::get_singleton()->body_set_param(E.value->static_body, PhysicsServer3D::BODY_PARAM_BOUNCE, bounce);
}
}

void GridMap::_octant_enter_world(const OctantKey &p_key) {
ERR_FAIL_COND(!octant_map.has(p_key));
Octant &g = *octant_map[p_key];
Expand Down
1 change: 1 addition & 0 deletions modules/gridmap/grid_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ class GridMap : public Node3D {
}

void _update_physics_bodies_collision_properties();
void _update_physics_bodies_characteristics();
void _octant_enter_world(const OctantKey &p_key);
void _octant_exit_world(const OctantKey &p_key);
bool _octant_update(const OctantKey &p_key);
Expand Down

0 comments on commit e911fcd

Please sign in to comment.