Skip to content

Commit 3fffe3a

Browse files
committed
First apply damping on computed velocity then add new velocities on top
1 parent 3f93fd5 commit 3fffe3a

1 file changed

Lines changed: 13 additions & 15 deletions

File tree

src/NativeRopeContext.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)