From 94e00bf0fd94d1041e30281e31cdc3e9d203cda7 Mon Sep 17 00:00:00 2001 From: Sara Date: Wed, 25 Sep 2024 17:34:06 +0200 Subject: [PATCH] tweak: renamed time_disjointed to time_rotated in camera controller --- src/camera_controller.c | 14 ++++++++------ src/camera_controller.h | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/camera_controller.c b/src/camera_controller.c index 75b1487..2cbe9c6 100644 --- a/src/camera_controller.c +++ b/src/camera_controller.c @@ -18,10 +18,10 @@ SceneNode *CreateCameraController(Transformable target) { CameraController *self = new(CameraController); *self = (CameraController){ .transform = tc_null(Transformable), - .rotation_speed = 10.f, + .rotation_speed = 5.f, .max_speed_time = 4.f, .target = target, - .time_disjointed = 0.f + .time_rotated = 0.f }; SceneNode *node = CreateSceneNode(CameraController_as_SceneNodeEntity(self)); return node; @@ -40,14 +40,16 @@ void CameraControllerExitTree(CameraController *self) {} void CameraControllerTick(CameraController *self, double delta) { 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); - 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 step = self->rotation_speed * time_mul * delta; - self->time_disjointed += delta; + self->time_rotated += delta; if(step < angle) target.rotation = QuaternionSlerp(current.rotation, target.rotation, step / angle); - else - self->time_disjointed = 0.f; + else if(self->time_rotated > delta) + self->time_rotated -= 3.f * delta; + else self->time_rotated = 0.f; self->transform.tc->set_global_transform(self->transform.data, target); } diff --git a/src/camera_controller.h b/src/camera_controller.h index 3df788c..29b2279 100644 --- a/src/camera_controller.h +++ b/src/camera_controller.h @@ -13,7 +13,7 @@ typedef struct CameraController { float rotation_speed; float max_speed_time; Transformable target; - float time_disjointed; + float time_rotated; } CameraController; extern SceneNode *CreateCameraController(Transformable target);