tweak: renamed time_disjointed to time_rotated in camera controller
This commit is contained in:
parent
8aaf11d0ab
commit
94e00bf0fd
|
@ -18,10 +18,10 @@ SceneNode *CreateCameraController(Transformable target) {
|
||||||
CameraController *self = new(CameraController);
|
CameraController *self = new(CameraController);
|
||||||
*self = (CameraController){
|
*self = (CameraController){
|
||||||
.transform = tc_null(Transformable),
|
.transform = tc_null(Transformable),
|
||||||
.rotation_speed = 10.f,
|
.rotation_speed = 5.f,
|
||||||
.max_speed_time = 4.f,
|
.max_speed_time = 4.f,
|
||||||
.target = target,
|
.target = target,
|
||||||
.time_disjointed = 0.f
|
.time_rotated = 0.f
|
||||||
};
|
};
|
||||||
SceneNode *node = CreateSceneNode(CameraController_as_SceneNodeEntity(self));
|
SceneNode *node = CreateSceneNode(CameraController_as_SceneNodeEntity(self));
|
||||||
return node;
|
return node;
|
||||||
|
@ -40,14 +40,16 @@ void CameraControllerExitTree(CameraController *self) {}
|
||||||
|
|
||||||
void CameraControllerTick(CameraController *self, double delta) {
|
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);
|
||||||
Transform target = self->target.tc->get_global_transform(self->target.data);
|
Transform target = self->target.tc->get_global_transform(self->target.data);
|
||||||
float const time_mul = fminf(1.f, fmaxf(0.1f, powf(self->time_disjointed / self->max_speed_time, 0.8f)));
|
float const time_mul = fminf(1.f, fmaxf(0.1f, powf(self->time_rotated / self->max_speed_time, 0.5f)));
|
||||||
float const angle = QuaternionAngleDifference(current.rotation, target.rotation);
|
float const angle = QuaternionAngleDifference(current.rotation, target.rotation);
|
||||||
float const step = self->rotation_speed * time_mul * delta;
|
float const step = self->rotation_speed * time_mul * delta;
|
||||||
self->time_disjointed += delta;
|
self->time_rotated += delta;
|
||||||
if(step < angle)
|
if(step < angle)
|
||||||
target.rotation = QuaternionSlerp(current.rotation, target.rotation, step / angle);
|
target.rotation = QuaternionSlerp(current.rotation, target.rotation, step / angle);
|
||||||
else
|
else if(self->time_rotated > delta)
|
||||||
self->time_disjointed = 0.f;
|
self->time_rotated -= 3.f * delta;
|
||||||
|
else self->time_rotated = 0.f;
|
||||||
self->transform.tc->set_global_transform(self->transform.data, target);
|
self->transform.tc->set_global_transform(self->transform.data, target);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ typedef struct CameraController {
|
||||||
float rotation_speed;
|
float rotation_speed;
|
||||||
float max_speed_time;
|
float max_speed_time;
|
||||||
Transformable target;
|
Transformable target;
|
||||||
float time_disjointed;
|
float time_rotated;
|
||||||
} CameraController;
|
} CameraController;
|
||||||
|
|
||||||
extern SceneNode *CreateCameraController(Transformable target);
|
extern SceneNode *CreateCameraController(Transformable target);
|
||||||
|
|
Loading…
Reference in a new issue