@@ -118,28 +118,26 @@ void NativeRopeContext::_simulate_velocities(double delta)
118118 // Afterwards we use oldpoints to store the new points and finally swap points and oldpoints
119119 PackedVector2Array& new_points = oldpoints;
120120
121- // Compute velocities
122- for (int i = first_idx; i < size; ++i)
123- velocities[i] = points[i] - oldpoints[i];
124-
125- _simulate_wind (&velocities);
126- _simulate_stiffness (&velocities);
127-
128- // Apply velocity and damping
129- const float frame_gravity = (float )(gravity * delta);
121+ // Compute velocities and apply damping + gravity
130122 const bool use_damping_curve = damping_curve.is_valid () && damping_curve->get_point_count () > 0 ;
123+ const Vector2 frame_gravity = gravity_direction * static_cast <float >(gravity * delta);
131124
132125 for (int i = first_idx; i < size; ++i)
133126 {
127+ const Vector2 vel = points[i] - oldpoints[i];
134128 const float dampmult = use_damping_curve ? damping_curve->sample_baked (get_point_perc (i, points)) : 1 .0f ;
135- const Vector2 final_vel = simulation_weights[i] * (
136- damp_vec (velocities[i], damping * dampmult, delta)
137- + gravity_direction * frame_gravity
138- );
139-
140- new_points[i] = points[i] + final_vel;
129+ velocities[i] = damp_vec (vel, damping * dampmult, delta);
130+ velocities[i] += frame_gravity;
141131 }
142132
133+ // Apply other forces
134+ _simulate_wind (&velocities);
135+ _simulate_stiffness (&velocities);
136+
137+ // Move points according to velocity
138+ for (int i = first_idx; i < size; ++i)
139+ new_points[i] = points[i] + simulation_weights[i] * velocities[i];
140+
143141 std::swap (oldpoints, points);
144142}
145143
0 commit comments