From ea52c683375e73df6bb66b90d7250a046ff20da4 Mon Sep 17 00:00:00 2001 From: PouleyKetchoupp Date: Wed, 17 Nov 2021 17:59:26 -0700 Subject: [PATCH] Fix applied gravity on soft bodies Regression fix, gravity was accumulated between frames after some changes around area gravity calculation. Also got rid of unused member and method in soft body class. --- servers/physics_3d/godot_soft_body_3d.cpp | 10 ++-------- servers/physics_3d/godot_soft_body_3d.h | 3 --- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/servers/physics_3d/godot_soft_body_3d.cpp b/servers/physics_3d/godot_soft_body_3d.cpp index b8e9ab4fb94..231b8686f56 100644 --- a/servers/physics_3d/godot_soft_body_3d.cpp +++ b/servers/physics_3d/godot_soft_body_3d.cpp @@ -964,12 +964,6 @@ void GodotSoftBody3D::apply_forces(const LocalVector &p_wind_area } } -void GodotSoftBody3D::_compute_area_gravity(const GodotArea3D *p_area) { - Vector3 area_gravity; - p_area->compute_gravity(get_transform().get_origin(), area_gravity); - gravity += area_gravity; -} - Vector3 GodotSoftBody3D::_compute_area_windforce(const GodotArea3D *p_area, const Face *p_face) { real_t wfm = p_area->get_wind_force_magnitude(); real_t waf = p_area->get_wind_attenuation_factor(); @@ -987,12 +981,12 @@ void GodotSoftBody3D::predict_motion(real_t p_delta) { ERR_FAIL_COND(!get_space()); - int ac = areas.size(); - bool gravity_done = false; + Vector3 gravity; LocalVector wind_areas; + int ac = areas.size(); if (ac) { areas.sort(); const AreaCMP *aa = &areas[0]; diff --git a/servers/physics_3d/godot_soft_body_3d.h b/servers/physics_3d/godot_soft_body_3d.h index c03951959f0..5198186b5dd 100644 --- a/servers/physics_3d/godot_soft_body_3d.h +++ b/servers/physics_3d/godot_soft_body_3d.h @@ -101,8 +101,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D { real_t drag_coefficient = 0.0; // [0,1] LocalVector pinned_vertices; - Vector3 gravity; - SelfList active_list; Set constraints; @@ -113,7 +111,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D { uint64_t island_step = 0; - _FORCE_INLINE_ void _compute_area_gravity(const GodotArea3D *p_area); _FORCE_INLINE_ Vector3 _compute_area_windforce(const GodotArea3D *p_area, const Face *p_face); public: