chore: clarity camera controller tick function
This commit is contained in:
parent
b9935846c4
commit
62c36b9660
|
@ -42,14 +42,18 @@ void CameraControllerTick(CameraController *self, double delta) {
|
||||||
Transform current = self->transform.tc->get_global_transform(self->transform.data);
|
Transform current = self->transform.tc->get_global_transform(self->transform.data);
|
||||||
self->target.tc->force_update(self->target.data);
|
self->target.tc->force_update(self->target.data);
|
||||||
Transform target = self->target.tc->get_global_transform(self->target.data);
|
Transform target = self->target.tc->get_global_transform(self->target.data);
|
||||||
|
// calculate time multiplier...
|
||||||
float const time_mul = fminf(1.f, fmaxf(0.1f, powf(self->time_rotated / self->max_speed_time, 0.5f)));
|
float const time_mul = fminf(1.f, fmaxf(0.1f, powf(self->time_rotated / self->max_speed_time, 0.5f)));
|
||||||
|
// ... angle difference ...
|
||||||
float const angle = QuaternionAngleDifference(current.rotation, target.rotation);
|
float const angle = QuaternionAngleDifference(current.rotation, target.rotation);
|
||||||
|
// ... and maximum frame step size
|
||||||
float const step = self->rotation_speed * time_mul * delta;
|
float const step = self->rotation_speed * time_mul * delta;
|
||||||
self->time_rotated += delta;
|
if(angle > 0.f)
|
||||||
if(step < angle)
|
target.rotation = QuaternionSlerp(current.rotation, target.rotation, fminf(fminf(step, angle) / angle, 0.99f));
|
||||||
target.rotation = QuaternionSlerp(current.rotation, target.rotation, step / angle);
|
if(step > angle && self->time_rotated > delta)
|
||||||
else if(self->time_rotated > delta)
|
|
||||||
self->time_rotated -= 3.f * delta;
|
self->time_rotated -= 3.f * delta;
|
||||||
else self->time_rotated = 0.f;
|
else if(step > angle)
|
||||||
|
self->time_rotated = 0.f;
|
||||||
|
self->time_rotated += delta;
|
||||||
self->transform.tc->set_global_transform(self->transform.data, target);
|
self->transform.tc->set_global_transform(self->transform.data, target);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue