Start CA_GLIDEANDCLIMB swimming functionality
This commit is contained in:
parent
365e63894f
commit
4517377552
|
@ -215,10 +215,15 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
|
||||||
return P_SetPlayerMobjState(mobj, S_PLAY_FALL);
|
return P_SetPlayerMobjState(mobj, S_PLAY_FALL);
|
||||||
|
|
||||||
// Catch swimming versus flying
|
// 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);
|
return P_SetPlayerMobjState(player->mo, S_PLAY_SWIM);
|
||||||
else if (state == S_PLAY_SWIM && !(player->mo->eflags & MFE_UNDERWATER))
|
else if (state == S_PLAY_SWIM && !(player->mo->eflags & MFE_UNDERWATER))
|
||||||
|
{
|
||||||
|
if (player->charability == CA_GLIDEANDCLIMB)
|
||||||
|
return P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE);
|
||||||
|
else
|
||||||
return P_SetPlayerMobjState(player->mo, S_PLAY_FLY);
|
return P_SetPlayerMobjState(player->mo, S_PLAY_FLY);
|
||||||
|
}
|
||||||
|
|
||||||
// Catch SF_NOSUPERSPIN jumps for Supers
|
// Catch SF_NOSUPERSPIN jumps for Supers
|
||||||
if (player->powers[pw_super] && (player->charflags & SF_NOSUPERSPIN))
|
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)
|
if (dorollstuff)
|
||||||
{
|
{
|
||||||
player->skidtime = TICRATE;
|
player->skidtime = TICRATE;
|
||||||
|
P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE);
|
||||||
player->mo->tics = -1;
|
player->mo->tics = -1;
|
||||||
}
|
}
|
||||||
else if (!player->skidtime)
|
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!
|
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 speed, scale = mo->scale;
|
||||||
fixed_t newMagnitude, oldMagnitude = R_PointToDist2(momx, momy, 0, 0);
|
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
|
fixed_t accelfactor = 4*FRACUNIT - 3*FINECOSINE(((angle-moveangle) >> ANGLETOFINESHIFT) & FINEMASK); // mamgic number BAD but this feels right
|
||||||
|
|
Loading…
Reference in a new issue