14 s32 zoneID =
test_ray_zones(x, y, z, 0.0f, -1.0f, 0.0f, &
hitX, &
hitY, &
hitZ, &
hitDepth, &
nx, &
ny, &
nz);
80 switch (curSettings->
type) {
89 if (curSettings->
flag) {
134 }
else if (
t > 1.0f) {
138 if (!curSettings->
flag) {
149 if (curSettings->
flag) {
190 if (curSettings ==
nullptr) {
195 switch (curSettings->
type) {
230 if (curSettings->
flag) {
253 if (*interpAlpha != 1.0f) {
258 && prevSettings->
type == curSettings->
type
262 && prevSettings->
flag != curSettings->
flag
297 }
else if (
t > 1.0f) {
301 if (!curSettings->
flag) {
311 if (*interpAlpha != 1.0f) {
316 && (prevSettings->
type == curSettings->
type)
320 && (prevSettings->
flag != curSettings->
flag)
354 if (curSettings->
flag) {
373 if (*interpAlpha != 1.0f) {
378 && (prevSettings->
type == curSettings->
type)
382 && (prevSettings->
flag != curSettings->
flag)
383 && (prevSettings->
points.two.Ax == curSettings->
points.two.Ax)
384 && (prevSettings->
points.two.Az == curSettings->
points.two.Az)
401 if (!curSettings->
flag) {
404 if (Ax == Bx && Az == Bz) {
470 if (!curSettings->
flag) {
550 camera->yinterpAlpha = 0.0f;
551 }
else if (
camera->yinterpGoal != targetY) {
552 camera->yinterpGoal = targetY;
553 camera->yinterpAlpha = 0.0f;
558 camera->yinterpGoal = targetY;
559 camera->yinterpAlpha = 1.0f;
564 if (
camera->yinterpAlpha > 1.0f) {
565 camera->yinterpAlpha = 1.0f;
569 camera->yinterpAlpha += 0.3f;
570 if (
camera->yinterpAlpha >= 1.0f) {
571 camera->yinterpAlpha = 1.0f;
640 camera->targetOffsetY = 0.0f;
698 targetX =
camera->targetPos.x;
699 targetY =
camera->targetPos.y;
700 targetZ =
camera->targetPos.z;
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;
711 camera->interpEasingParameter = 0.0f;
712 camera->interpAlpha = 1.0f;
713 camera->linearInterpRate = 1.0f;
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;
728 ||
camera->prevTargetPos.x != targetX
729 ||
camera->prevTargetPos.y != targetY
730 ||
camera->prevTargetPos.z != targetZ
733 if (
camera->useOverrideSettings) {
740 curSettings =
camera->curSettings;
742 && curSettings !=
nullptr
791 if (
camera->interpAlpha == 1.0f) {
796 camera->panActive =
false;
801 camera->interpAlpha = 0.0f;
802 camera->linearInterp = 0.0f;
818 camera->prevTargetPos.x = targetX;
819 camera->prevTargetPos.y = targetY;
820 camera->prevTargetPos.z = targetZ;
829 if (
camera->prevPrevUseOverride) {
830 posX =
camera->prevPrevMovePos.x;
831 posY =
camera->prevPrevMovePos.y;
832 posZ =
camera->prevPrevMovePos.z;
835 posY =
camera->yinterpCur;
839 if (
camera->prevUseOverride) {
852 posX, posY, posZ,
tX,
tY,
tZ,
855 if (
camera->needsReinit) {
857 camera->needsReinit =
false;
858 camera->interpAlpha = 1.0f;
861 if (
camera->prevRig.boomYaw -
camera->nextRig.boomYaw > 180.0f) {
862 camera->prevRig.boomYaw -= 360.0f;
864 if (
camera->prevRig.boomYaw -
camera->nextRig.boomYaw < -180.0f) {
865 camera->prevRig.boomYaw += 360.0f;
871 if (
camera->linearInterp > 1.0f) {
872 camera->linearInterp = 1.0f;
875 if (
camera->interpAlpha < 1.0f) {
892 if (
camera->interpAlpha >= 1.0f) {
893 camera->interpAlpha = 1.0f;
894 camera->linearInterp = 0.0f;
899 #define CAM_INTERP(field) CurrentCamRig.field = \
900 (camera->prevRig.field * (1.0f - camera->interpAlpha)) + (camera->nextRig.field * camera->interpAlpha)
BSS s32 PopupMenu_SelectedIndex
void interp_camera_y_position(Camera *camera, f32 targetY)
BSS CameraRig CurrentCamRig
void update_camera_zone_interp(Camera *camera)
f32 get_maximum_interp_delta(Camera *camera)
@ CAMERA_SETTINGS_PTR_MINUS_1
@ CAMERA_SETTINGS_PTR_MINUS_2
@ CAMERA_SETTINGS_PTR_NULL
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)
void apply_fixed_orientation(CameraControlSettings *controller, CameraRig *configuration, f32 x, f32 y, f32 z)
#define CAM_INTERP(field)
union CameraControlSettings::@14 points
@ CAM_CONTROL_FIXED_ORIENTATION
@ CAM_CONTROL_FIXED_POS_AND_ORIENTATION
@ CAM_CONTROL_CONSTRAIN_TO_LINE
@ CAM_CONTROL_FOLLOW_PLAYER
@ CAM_CONTROL_CONSTAIN_BETWEEN_POINTS
@ CAM_CONTROL_LOOK_AT_POINT
@ CAM_CONTROL_LOOK_AT_POINT_CONSTAIN_TO_LINE
@ CAMERA_MOVE_IGNORE_PLAYER_Y
@ CAMERA_MOVE_ACCEL_INTERP_Y
@ CAMERA_MOVE_NO_INTERP_Y
s32 test_ray_zones(f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 dirZ, f32 *hitX, f32 *hitY, f32 *hitZ, f32 *hitDepth, f32 *nx, f32 *ny, f32 *nz)
CollisionData gZoneCollisionData