mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-23 03:12:38 +00:00
Start CA_GLIDEANDCLIMB swimming functionality
This commit is contained in:
parent
365e63894f
commit
4517377552
2 changed files with 34 additions and 2 deletions
|
@ -215,10 +215,15 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
|
|||
return P_SetPlayerMobjState(mobj, S_PLAY_FALL);
|
||||
|
||||
// Catch swimming versus flying
|
||||
if (state == S_PLAY_FLY && player->mo->eflags & MFE_UNDERWATER)
|
||||
if ((state == S_PLAY_FLY || state == S_PLAY_GLIDE) && player->mo->eflags & MFE_UNDERWATER && !player->skidtime)
|
||||
return P_SetPlayerMobjState(player->mo, S_PLAY_SWIM);
|
||||
else if (state == S_PLAY_SWIM && !(player->mo->eflags & MFE_UNDERWATER))
|
||||
return P_SetPlayerMobjState(player->mo, S_PLAY_FLY);
|
||||
{
|
||||
if (player->charability == CA_GLIDEANDCLIMB)
|
||||
return P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE);
|
||||
else
|
||||
return P_SetPlayerMobjState(player->mo, S_PLAY_FLY);
|
||||
}
|
||||
|
||||
// Catch SF_NOSUPERSPIN jumps for Supers
|
||||
if (player->powers[pw_super] && (player->charflags & SF_NOSUPERSPIN))
|
||||
|
|
27
src/p_user.c
27
src/p_user.c
|
@ -2344,6 +2344,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff)
|
|||
if (dorollstuff)
|
||||
{
|
||||
player->skidtime = TICRATE;
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE);
|
||||
player->mo->tics = -1;
|
||||
}
|
||||
else if (!player->skidtime)
|
||||
|
@ -8583,6 +8584,32 @@ static void P_MovePlayer(player_t *player)
|
|||
|
||||
if (!player->skidtime) // TODO: make sure this works in 2D!
|
||||
{
|
||||
/*angle_t anglediff = angle - moveangle;
|
||||
fixed_t scale = mo->scale;
|
||||
fixed_t accelfactor = 4*FRACUNIT - 3*FINECOSINE(((angle-moveangle) >> ANGLETOFINESHIFT) & FINEMASK); // mamgic number BAD but this feels right
|
||||
fixed_t speed = FixedHypot(momx, momy);
|
||||
fixed_t minspeed;
|
||||
|
||||
if (anglediff > ANGLE_180)
|
||||
anglediff = InvAngle(InvAngle(anglediff) >> 4);
|
||||
else
|
||||
anglediff = anglediff >> 4;
|
||||
|
||||
if (mo->eflags & MFE_UNDERWATER)
|
||||
minspeed = FixedMul((glidespeed>>1) + player->glidetime*750, scale);
|
||||
else
|
||||
minspeed = FixedMul(glidespeed + player->glidetime*1500, scale);
|
||||
|
||||
if (speed < minspeed)
|
||||
{
|
||||
momx += P_ReturnThrustX(mo, angle, FixedMul(accelfactor, scale));
|
||||
momy += P_ReturnThrustY(mo, angle, FixedMul(accelfactor, scale));
|
||||
speed = FixedHypot(momx, momy); // recalculate speed
|
||||
}
|
||||
|
||||
mo->momx = P_ReturnThrustX(mo, moveangle + anglediff, speed) + player->cmomx;
|
||||
mo->momy = P_ReturnThrustY(mo, moveangle + anglediff, speed) + player->cmomy;*/
|
||||
|
||||
fixed_t speed, scale = mo->scale;
|
||||
fixed_t newMagnitude, oldMagnitude = R_PointToDist2(momx, momy, 0, 0);
|
||||
fixed_t accelfactor = 4*FRACUNIT - 3*FINECOSINE(((angle-moveangle) >> ANGLETOFINESHIFT) & FINEMASK); // mamgic number BAD but this feels right
|
||||
|
|
Loading…
Reference in a new issue