Skip to content

Commit 25df239

Browse files
committed
improve camera smoothing
1 parent cc22dd2 commit 25df239

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

game/camera.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "camera.h"
22

3+
#include <Tempest/Log>
4+
35
#include "world/objects/npc.h"
46
#include "world/objects/interactive.h"
57
#include "world/world.h"
@@ -419,12 +421,33 @@ void Camera::followPos(Vec3& pos, Vec3 dest, float dtF) {
419421

420422
float speed = baseSpeeed*dtF;
421423
float tr = std::min(speed,len);
422-
if(len-tr > maxDist-speed && (len-maxDist)>0.01f)
423-
tr = (len-maxDist); else
424+
float maxD = maxDist + baseSpeeed*0.05f;
425+
if(len-tr > maxD && (len-maxD)>0.0f)
426+
tr = (len-maxD); else
424427
tr = std::min(speed,len);
425428

426429
float k = tr/len;
427430
pos += dp*k;
431+
432+
// auto len2 = (dest-pos).length();
433+
// if(len2>0.f)
434+
// Log::i("lenRaw = ", len2);
435+
}
436+
437+
Vec3 Camera::clampPos(Tempest::Vec3 pos, Vec3 dest) {
438+
auto dp = (dest-pos);
439+
auto len = dp.length();
440+
441+
if(len > maxDist && (len-maxDist)>0.f) {
442+
float tr = (len-maxDist);
443+
float k = tr/len;
444+
return pos + dp*k;
445+
}
446+
447+
// auto len2 = (dest-pos).length();
448+
// if(len2>0.f)
449+
// Log::i("lenClp = ", len2);
450+
return pos;
428451
}
429452

430453
void Camera::followCamera(Vec3& pos, Vec3 dest, float dtF) {
@@ -528,11 +551,13 @@ void Camera::calcControlPoints(float dtF) {
528551
auto target = dst.target + targetOffset;
529552

530553
followPos(src.target,target,dtF);
531-
followCamera(cameraPos,src.target,dtF);
554+
555+
auto camTg = clampPos(src.target,target);
556+
followCamera(cameraPos,camTg,dtF);
532557

533558
origin = cameraPos - dir*range;
534559
if(def.collision!=0) {
535-
range = calcCameraColision(src.target,origin,src.spin,range);
560+
range = calcCameraColision(camTg,origin,src.spin,range);
536561
origin = cameraPos - dir*range;
537562
}
538563

game/camera.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class Camera final {
139139

140140
void followCamera(Tempest::Vec3& pos, Tempest::Vec3 dest, float dtF);
141141
void followPos (Tempest::Vec3& pos, Tempest::Vec3 dest, float dtF);
142+
Tempest::Vec3 clampPos (Tempest::Vec3 pos, Tempest::Vec3 dest);
142143
void followAng (Tempest::Vec3& spin, Tempest::Vec3 dest, float dtF);
143144
static void followAng (float& ang, float dest, float speed, float dtF);
144145

0 commit comments

Comments
 (0)