Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions src/SB/Core/x/xCamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,14 +223,18 @@ void xCameraEnd(xCamera* cam, F32 seconds, S32 update_scrn_fx);
void xCameraShowRaster(xCamera* cam);
F32 xCameraGetFOV(const xCamera* cam);
void xCameraSetFOV(xCamera* cam, F32 fov);
void xCameraMove(xCamera* cam, U32 flags, F32 dgoal, F32 hgoal, F32 pgoal,
F32 tm, F32 tm_acc, F32 tm_dec);
void xCameraMove(xCamera* cam, U32 flags, F32 dgoal, F32 hgoal, F32 pgoal, F32 tm, F32 tm_acc,
F32 tm_dec);
void xCameraMove(xCamera* cam, const xVec3& loc);
void xCameraMove(xCamera* cam, const xVec3& loc, F32 maxSpeed);
void xCameraFOV(xCamera* cam, F32 fov, F32 maxSpeed, F32 dt);
void xCameraRotate(xCamera* cam, const xMat3x3& m, F32 time, F32 accel, F32 decl);
void xCameraLookYPR(xCamera* cam, U32 flags, F32 yaw, F32 pitch, F32 roll, F32 tm, F32 tm_acc,
F32 tm_dec);
F32 xCameraGetFOV(const xCamera* cam);
void xCameraDoCollisions(S32 do_collis, S32 owner);
void xCameraSetTargetMatrix(xCamera* cam, xMat4x3* mat);
void xCameraFXShake(F32 maxTime, F32 magnitude, F32 cycleMax, F32 rotate_magnitude,
F32 radius, xVec3* epicenter, xVec3* player);
void xCameraFXShake(F32 maxTime, F32 magnitude, F32 cycleMax, F32 rotate_magnitude, F32 radius,
xVec3* epicenter, xVec3* player);

#endif
155 changes: 154 additions & 1 deletion src/SB/Game/zCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,160 @@ void zCameraFlyStart(U32 assetID)
}
}

static void zCameraFlyRestoreBackup(xCamera* cam);
static void zCameraFlyRestoreBackup(xCamera* backup)
{
globals.camera.mat = backup->mat;
globals.camera.omat = backup->omat;
globals.camera.mbasis = backup->mbasis;
globals.camera.bound = backup->bound;
globals.camera.focus = backup->focus;

globals.camera.flags = backup->flags;
globals.camera.tmr = backup->tmr;
globals.camera.tm_acc = backup->tm_acc;
globals.camera.tm_dec = backup->tm_dec;
globals.camera.ltmr = backup->ltmr;
globals.camera.ltm_acc = backup->ltm_acc;
globals.camera.ltm_dec = backup->ltm_dec;
globals.camera.dmin = backup->dmin;
globals.camera.dmax = backup->dmax;
globals.camera.dcur = backup->dcur;
globals.camera.dgoal = backup->dgoal;
globals.camera.hmin = backup->hmin;
globals.camera.hmax = backup->hmax;
globals.camera.hcur = backup->hcur;
globals.camera.hgoal = backup->hgoal;
globals.camera.pmin = backup->pmin;
globals.camera.pmax = backup->pmax;
globals.camera.pcur = backup->pcur;
globals.camera.pgoal = backup->pgoal;
globals.camera.depv = backup->depv;
globals.camera.hepv = backup->hepv;
globals.camera.pepv = backup->pepv;
globals.camera.orn_epv = backup->orn_epv;
globals.camera.yaw_epv = backup->yaw_epv;
globals.camera.pitch_epv = backup->pitch_epv;
globals.camera.roll_epv = backup->roll_epv;
globals.camera.orn_cur = backup->orn_cur;
globals.camera.orn_goal = backup->orn_goal;
globals.camera.orn_diff = backup->orn_diff;
globals.camera.yaw_cur = backup->yaw_cur;
globals.camera.yaw_goal = backup->yaw_goal;
globals.camera.pitch_cur = backup->pitch_cur;
globals.camera.pitch_goal = backup->pitch_goal;
globals.camera.roll_cur = backup->roll_cur;
globals.camera.roll_goal = backup->roll_goal;
globals.camera.dct = backup->dct;
globals.camera.dcd = backup->dcd;
globals.camera.dccv = backup->dccv;
globals.camera.dcsv = backup->dcsv;
globals.camera.hct = backup->hct;
globals.camera.hcd = backup->hcd;
globals.camera.hccv = backup->hccv;
globals.camera.hcsv = backup->hcsv;
globals.camera.pct = backup->pct;
globals.camera.pcd = backup->pcd;
globals.camera.pccv = backup->pccv;
globals.camera.pcsv = backup->pcsv;
globals.camera.orn_ct = backup->orn_ct;
globals.camera.orn_cd = backup->orn_cd;
globals.camera.orn_ccv = backup->orn_ccv;
globals.camera.orn_csv = backup->orn_csv;
globals.camera.yaw_ct = backup->yaw_ct;
globals.camera.yaw_cd = backup->yaw_cd;
globals.camera.yaw_ccv = backup->yaw_ccv;
globals.camera.yaw_csv = backup->yaw_csv;
globals.camera.pitch_ct = backup->pitch_ct;
globals.camera.pitch_cd = backup->pitch_cd;
globals.camera.pitch_ccv = backup->pitch_ccv;
globals.camera.pitch_csv = backup->pitch_csv;
globals.camera.roll_ct = backup->roll_ct;
globals.camera.roll_cd = backup->roll_cd;
globals.camera.roll_ccv = backup->roll_ccv;
globals.camera.roll_csv = backup->roll_csv;
}

static S32 zCameraRewardUpdate(xCamera* cam, F32 dt)
{
xCameraUpdate(cam, dt);

xVec3 v = { 0.0f, 0.0f, 0.0f };

xVec3Copy(&v, (xVec3*)&globals.player.ent.model->Mat->pos);
v.y -= 0.7f;

if (zcam_near)
{
if (globals.player.s->pcType == ePlayer_SB)
{
rewardMove = 1.3f;
rewardMoveSpeed = 0.68f;
rewardZoomSpeed = 7.1f;
rewardZoomAmount = 108.0f;
rewardTiltTime = 1.5f;
rewardTiltAmount = -0.22f;
}
else if (globals.player.s->pcType == ePlayer_Patrick)
{
rewardMove = 1.6f;
rewardMoveSpeed = 0.68f;
rewardZoomSpeed = 7.1f;
rewardZoomAmount = 108.0f;
rewardTiltTime = 1.0f;
rewardTiltAmount = -0.25f;
}
else if (globals.player.s->pcType == ePlayer_Sandy)
{
rewardMove = 1.3f;
rewardMoveSpeed = 0.68f;
rewardZoomSpeed = 7.1f;
rewardZoomAmount = 108.0f;
rewardTiltTime = 1.5f;
rewardTiltAmount = -0.22f;
}
}
else
{
if (globals.player.s->pcType == ePlayer_SB)
{
rewardMove = 1.5f;
rewardMoveSpeed = 1.1f;
rewardZoomSpeed = 5.9f;
rewardZoomAmount = 100.0f;
rewardTiltTime = 1.5f;
rewardTiltAmount = -0.2f;
}
else if (globals.player.s->pcType == ePlayer_Patrick)
{
rewardMove = 1.5f;
rewardMoveSpeed = 1.1f;
rewardZoomSpeed = 5.9f;
rewardZoomAmount = 100.0f;
rewardTiltTime = 1.5f;
rewardTiltAmount = -0.2f;
}
else if (globals.player.s->pcType == ePlayer_Sandy)
{
rewardMove = 1.5f;
rewardMoveSpeed = 1.1f;
rewardZoomSpeed = 5.9f;
rewardZoomAmount = 100.0f;
rewardTiltTime = 1.5f;
rewardTiltAmount = -0.2f;
}
}

if (xVec3Dist2((xVec3*)&globals.player.ent.model->Mat->pos, &globals.camera.mat.pos) >
SQR(rewardMove))
{
xCameraMove(cam, v, rewardMoveSpeed * dt);
xCameraFOV(cam, rewardZoomAmount, rewardZoomSpeed, dt);
xCameraLookYPR(cam, 0x0, globals.camera.yaw_cur, rewardTiltAmount, globals.camera.roll_cur,
rewardTiltTime, 0.1f, 0.1f);
}

return 1;
}

void zCameraFreeLookSetGoals(xCamera* cam, F32 pitch_s, F32& dgoal, F32& hgoal, F32& pitch_goal,
F32& lktm, F32 dt)
Expand Down