688 {
697
698 targetX =
camera->targetPos.x;
699 targetY =
camera->targetPos.y;
700 targetZ =
camera->targetPos.z;
702
703 if (
camera->needsReinit) {
704 camera->curSettings =
nullptr;
705 camera->prevSettings =
nullptr;
706 camera->linearInterp = 0.0f;
707 camera->yinterpAlpha = 1.0f;
708 camera->yinterpGoal = 0.0f;
709 camera->yinterpCur = targetY;
710
711 camera->interpEasingParameter = 0.0f;
712 camera->interpAlpha = 1.0f;
713 camera->linearInterpRate = 1.0f;
714
715 camera->prevTargetPos.x = 0.0f;
716 camera->prevTargetPos.y = 0.0f;
717 camera->prevTargetPos.z = 0.0f;
718 camera->prevUseOverride =
false;
719 camera->prevPrevUseOverride =
false;
722 }
723
724
726
728 ||
camera->prevTargetPos.x != targetX
729 ||
camera->prevTargetPos.y != targetY
730 ||
camera->prevTargetPos.z != targetZ
732 ) {
733 if (
camera->useOverrideSettings) {
735 } else {
737 }
738
740 curSettings =
camera->curSettings;
742 && curSettings != nullptr
748 ) {
755 ) {
757 }
758 break;
765 ) {
767 }
768 } else {
771 ) {
773 }
774 }
775 break;
776 default:
783 ) {
785 }
786 break;
787 }
788 }
789
791 if (
camera->interpAlpha == 1.0f) {
793 } else {
795 }
796 camera->panActive =
false;
800
801 camera->interpAlpha = 0.0f;
802 camera->linearInterp = 0.0f;
804
807
811
815 }
816 }
817
818 camera->prevTargetPos.x = targetX;
819 camera->prevTargetPos.y = targetY;
820 camera->prevTargetPos.z = targetZ;
821
828
829 if (
camera->prevPrevUseOverride) {
830 posX =
camera->prevPrevMovePos.x;
831 posY =
camera->prevPrevMovePos.y;
832 posZ =
camera->prevPrevMovePos.z;
833 } else {
834 posX = targetX;
835 posY =
camera->yinterpCur;
836 posZ = targetZ;
837 }
838
839 if (
camera->prevUseOverride) {
844 } else {
848 }
849
852 posX, posY, posZ,
tX,
tY,
tZ,
854
855 if (
camera->needsReinit) {
857 camera->needsReinit =
false;
858 camera->interpAlpha = 1.0f;
859 }
860
861 if (
camera->prevRig.boomYaw -
camera->nextRig.boomYaw > 180.0f) {
862 camera->prevRig.boomYaw -= 360.0f;
863 }
864 if (
camera->prevRig.boomYaw -
camera->nextRig.boomYaw < -180.0f) {
865 camera->prevRig.boomYaw += 360.0f;
866 }
867
869
871 if (
camera->linearInterp > 1.0f) {
872 camera->linearInterp = 1.0f;
873 }
874
875 if (
camera->interpAlpha < 1.0f) {
876
877
878
879
880
881
888
890 }
891
892 if (
camera->interpAlpha >= 1.0f) {
893 camera->interpAlpha = 1.0f;
894 camera->linearInterp = 0.0f;
895 }
896
897
898
899 #define CAM_INTERP(field) CurrentCamRig.field = \
900 (camera->prevRig.field * (1.0f - camera->interpAlpha)) + (camera->nextRig.field * camera->interpAlpha)
901
909
910 #undef CAM_INTERP
911
913
914
916}
void interp_camera_y_position(Camera *camera, f32 targetY)
BSS CameraRig CurrentCamRig
f32 get_maximum_interp_delta(Camera *camera)
@ CAMERA_SETTINGS_PTR_MINUS_1
void update_camera_from_controller(Camera *camera, CameraRig *prevRig, CameraControlSettings **prevSettingsPtr, CameraRig *newRig, CameraControlSettings **curSettingsPtr, f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2, f32 *interpAlpha, b32 changingMap, b32 changingZone)
CameraControlSettings * test_ray_zone_aabb(f32 x, f32 y, f32 z)
void set_camera_from_rig(Camera *camera, CameraRig *rig)
#define CAM_INTERP(field)
union CameraControlSettings::@14 points
@ CAM_CONTROL_FIXED_ORIENTATION
@ CAM_CONTROL_LOOK_AT_POINT