mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-14 22:00:50 +00:00
Instantaneous lookback camera (v2 backport)
This commit is contained in:
parent
a335d6b583
commit
d0d6128053
1 changed files with 12 additions and 9 deletions
21
src/p_user.c
21
src/p_user.c
|
@ -7487,13 +7487,14 @@ void P_ResetCamera(player_t *player, camera_t *thiscam)
|
||||||
|
|
||||||
boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcalled)
|
boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcalled)
|
||||||
{
|
{
|
||||||
static UINT8 lookbackdelay[4] = {0,0,0,0};
|
static boolean lookbackactive[MAXSPLITSCREENPLAYERS];
|
||||||
|
static UINT8 lookbackdelay[MAXSPLITSCREENPLAYERS];
|
||||||
UINT8 num;
|
UINT8 num;
|
||||||
angle_t angle = 0, focusangle = 0, focusaiming = 0;
|
angle_t angle = 0, focusangle = 0, focusaiming = 0;
|
||||||
fixed_t x, y, z, dist, height, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight;
|
fixed_t x, y, z, dist, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight;
|
||||||
fixed_t pan, xpan, ypan;
|
fixed_t pan, xpan, ypan;
|
||||||
INT32 camrotate;
|
INT32 camrotate;
|
||||||
boolean camstill, lookback;
|
boolean camstill, lookback, lookbackdown;
|
||||||
UINT8 timeover;
|
UINT8 timeover;
|
||||||
mobj_t *mo;
|
mobj_t *mo;
|
||||||
fixed_t f1, f2;
|
fixed_t f1, f2;
|
||||||
|
@ -7684,15 +7685,19 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
camstill = true;
|
camstill = true;
|
||||||
else if (lookback || lookbackdelay[num]) // SRB2kart - Camera flipper
|
else if (lookback || lookbackdelay[num]) // SRB2kart - Camera flipper
|
||||||
{
|
{
|
||||||
|
#define MAXLOOKBACKDELAY 2
|
||||||
camspeed = FRACUNIT;
|
camspeed = FRACUNIT;
|
||||||
if (lookback)
|
if (lookback)
|
||||||
{
|
{
|
||||||
camrotate += 180;
|
camrotate += 180;
|
||||||
lookbackdelay[num] = 2;
|
lookbackdelay[num] = MAXLOOKBACKDELAY;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lookbackdelay[num]--;
|
lookbackdelay[num]--;
|
||||||
}
|
}
|
||||||
|
lookbackdown = (lookbackdelay[num] == MAXLOOKBACKDELAY) != lookbackactive[num];
|
||||||
|
lookbackactive[num] = (lookbackdelay[num] == MAXLOOKBACKDELAY);
|
||||||
|
#undef MAXLOOKBACKDELAY
|
||||||
|
|
||||||
if (mo->eflags & MFE_VERTICALFLIP)
|
if (mo->eflags & MFE_VERTICALFLIP)
|
||||||
camheight += thiscam->height;
|
camheight += thiscam->height;
|
||||||
|
@ -7735,8 +7740,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
thiscam->angle = angle;
|
thiscam->angle = angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
height = camheight;
|
|
||||||
|
|
||||||
// sets ideal cam pos
|
// sets ideal cam pos
|
||||||
dist = camdist;
|
dist = camdist;
|
||||||
|
|
||||||
|
@ -7745,10 +7748,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
dist += abs(thiscam->momz)/4;
|
dist += abs(thiscam->momz)/4;
|
||||||
|
|
||||||
if (player->kartstuff[k_boostcam])
|
if (player->kartstuff[k_boostcam])
|
||||||
{
|
|
||||||
dist -= FixedMul(11*dist/16, player->kartstuff[k_boostcam]);
|
dist -= FixedMul(11*dist/16, player->kartstuff[k_boostcam]);
|
||||||
height -= FixedMul(height, player->kartstuff[k_boostcam]);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = mo->x - FixedMul(FINECOSINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
x = mo->x - FixedMul(FINECOSINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
||||||
y = mo->y - FixedMul(FINESINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
y = mo->y - FixedMul(FINESINE((angle>>ANGLETOFINESHIFT) & FINEMASK), dist);
|
||||||
|
@ -8070,6 +8070,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
thiscam->aiming = ANGLE_22h;
|
thiscam->aiming = ANGLE_22h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lookbackdown)
|
||||||
|
P_MoveChaseCamera(player, thiscam, false);
|
||||||
|
|
||||||
return (x == thiscam->x && y == thiscam->y && z == thiscam->z && angle == thiscam->aiming);
|
return (x == thiscam->x && y == thiscam->y && z == thiscam->z && angle == thiscam->aiming);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue