|
1 | 1 | #include "camera.h" |
2 | 2 |
|
| 3 | +#include <Tempest/Log> |
| 4 | + |
3 | 5 | #include "world/objects/npc.h" |
4 | 6 | #include "world/objects/interactive.h" |
5 | 7 | #include "world/world.h" |
@@ -419,12 +421,33 @@ void Camera::followPos(Vec3& pos, Vec3 dest, float dtF) { |
419 | 421 |
|
420 | 422 | float speed = baseSpeeed*dtF; |
421 | 423 | 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 |
424 | 427 | tr = std::min(speed,len); |
425 | 428 |
|
426 | 429 | float k = tr/len; |
427 | 430 | 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; |
428 | 451 | } |
429 | 452 |
|
430 | 453 | void Camera::followCamera(Vec3& pos, Vec3 dest, float dtF) { |
@@ -528,11 +551,13 @@ void Camera::calcControlPoints(float dtF) { |
528 | 551 | auto target = dst.target + targetOffset; |
529 | 552 |
|
530 | 553 | followPos(src.target,target,dtF); |
531 | | - followCamera(cameraPos,src.target,dtF); |
| 554 | + |
| 555 | + auto camTg = clampPos(src.target,target); |
| 556 | + followCamera(cameraPos,camTg,dtF); |
532 | 557 |
|
533 | 558 | origin = cameraPos - dir*range; |
534 | 559 | if(def.collision!=0) { |
535 | | - range = calcCameraColision(src.target,origin,src.spin,range); |
| 560 | + range = calcCameraColision(camTg,origin,src.spin,range); |
536 | 561 | origin = cameraPos - dir*range; |
537 | 562 | } |
538 | 563 |
|
|
0 commit comments