688 {
703
704 targetX =
camera->targetPos.x;
705 targetY =
camera->targetPos.y;
706 targetZ =
camera->targetPos.z;
708
709 if (
camera->needsReinit) {
712 camera->linearInterp = 0.0f;
713 camera->yinterpAlpha = 1.0f;
714 camera->yinterpGoal = 0.0f;
715 camera->yinterpCur = targetY;
716
717 camera->interpEasingParameter = 0.0f;
718 camera->interpAlpha = 1.0f;
719 camera->linearInterpRate = 1.0f;
720
721 camera->prevTargetPos.x = 0.0f;
722 camera->prevTargetPos.y = 0.0f;
723 camera->prevTargetPos.z = 0.0f;
728 }
729
730
732
734 ||
camera->prevTargetPos.x != targetX
735 ||
camera->prevTargetPos.y != targetY
736 ||
camera->prevTargetPos.z != targetZ
738 ) {
739 if (
camera->useOverrideSettings) {
741 } else {
743 }
744
746 curSettings =
camera->curSettings;
748 && curSettings !=
NULL
754 ) {
761 ) {
763 }
764 break;
771 ) {
773 }
774 } else {
777 ) {
779 }
780 }
781 break;
782 default:
789 ) {
791 }
792 break;
793 }
794 }
795
797 if (
camera->interpAlpha == 1.0f) {
799 } else {
801 }
806
807 camera->interpAlpha = 0.0f;
808 camera->linearInterp = 0.0f;
810
813
817
821 }
822 }
823
824 camera->prevTargetPos.x = targetX;
825 camera->prevTargetPos.y = targetY;
826 camera->prevTargetPos.z = targetZ;
827
834
835 if (
camera->prevPrevUseOverride) {
836 posX =
camera->prevPrevMovePos.x;
837 posY =
camera->prevPrevMovePos.y;
838 posZ =
camera->prevPrevMovePos.z;
839 } else {
840 posX = targetX;
841 posY =
camera->yinterpCur;
842 posZ = targetZ;
843 }
844
845 if (
camera->prevUseOverride) {
850 } else {
854 }
855
858 posX, posY, posZ,
tX,
tY,
tZ,
860
861 if (
camera->needsReinit) {
864 camera->interpAlpha = 1.0f;
865 }
866
867 if (
camera->prevRig.boomYaw -
camera->nextRig.boomYaw > 180.0f) {
868 camera->prevRig.boomYaw -= 360.0f;
869 }
870 if (
camera->prevRig.boomYaw -
camera->nextRig.boomYaw < -180.0f) {
871 camera->prevRig.boomYaw += 360.0f;
872 }
873
875
877 if (
camera->linearInterp > 1.0f) {
878 camera->linearInterp = 1.0f;
879 }
880
881 if (
camera->interpAlpha < 1.0f) {
882
883
884
885
886
887
894
896 }
897
898 if (
camera->interpAlpha >= 1.0f) {
899 camera->interpAlpha = 1.0f;
900 camera->linearInterp = 0.0f;
901 }
902
903
904
905 #define CAM_INTERP(field) CurrentCamRig.field = \
906 (camera->prevRig.field * (1.0f - camera->interpAlpha)) + (camera->nextRig.field * camera->interpAlpha)
907
915
916 #undef CAM_INTERP
917
919
920
922}
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