Use K_MomentumAngle for all instances of needing momentum angle for an object

This means we will never ever have any "standing still defaults to angle 0" issues again :)
This commit is contained in:
Sally Coolatta 2020-08-02 11:40:21 -04:00
parent 3dc2f4804f
commit 31b99de407
6 changed files with 25 additions and 36 deletions

View file

@ -1450,8 +1450,8 @@ static void K_UpdateDraft(player_t *player)
continue;
#ifndef EASYDRAFTTEST
yourangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
theirangle = R_PointToAngle2(0, 0, players[i].mo->momx, players[i].mo->momy);
yourangle = K_MomentumAngle(player->mo);
theirangle = K_MomentumAngle(players[i].mo);
diff = R_PointToAngle2(player->mo->x, player->mo->y, players[i].mo->x, players[i].mo->y) - yourangle;
if (diff > ANGLE_180)
@ -2019,7 +2019,7 @@ void K_PlayPowerGloatSound(mobj_t *source)
void K_MomentumToFacing(player_t *player)
{
angle_t dangle = player->mo->angle - R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
angle_t dangle = player->mo->angle - K_MomentumAngle(player->mo);
if (dangle > ANGLE_180)
dangle = InvAngle(dangle);
@ -3445,7 +3445,7 @@ static void K_SpawnAIZDust(player_t *player)
if (player->speed <= K_GetKartSpeed(player, false))
return;
travelangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
travelangle = K_MomentumAngle(player->mo);
//S_StartSound(player->mo, sfx_s3k47);
{
@ -3716,7 +3716,7 @@ void K_DriftDustHandling(mobj_t *spawner)
if (P_AproxDistance(spawner->momx, spawner->momy) < 5*spawner->scale)
return;
anglediff = abs((signed)(spawner->angle - R_PointToAngle2(0, 0, spawner->momx, spawner->momy)));
anglediff = abs((signed)(spawner->angle - K_MomentumAngle(spawner)));
}
if (anglediff > ANGLE_180)
@ -4018,7 +4018,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
void K_PuntMine(mobj_t *thismine, mobj_t *punter)
{
angle_t fa = R_PointToAngle2(0, 0, punter->momx, punter->momy) >> ANGLETOFINESHIFT;
angle_t fa = K_MomentumAngle(punter) >> ANGLETOFINESHIFT;
fixed_t z = 30*mapobjectscale + punter->momz;
fixed_t spd;
mobj_t *mine;
@ -5604,7 +5604,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
MT_FASTLINE);
P_SetTarget(&fast->target, player->mo);
fast->angle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
fast->angle = K_MomentumAngle(player->mo);
fast->momx = 3*player->mo->momx/4;
fast->momy = 3*player->mo->momy/4;
fast->momz = 3*player->mo->momz/4;
@ -6154,18 +6154,12 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player)
{
boolean finishlinehack = false;
angle_t playerangle = player->mo->angle;
angle_t momangle = player->mo->angle;
angle_t momangle = K_MomentumAngle(player->mo);
angle_t angletowaypoint =
R_PointToAngle2(player->mo->x, player->mo->y, waypoint->mobj->x, waypoint->mobj->y);
angle_t angledelta = ANGLE_MAX;
angle_t momdelta = ANGLE_MAX;
if (player->mo->momx != 0 || player->mo->momy != 0)
{
// Defaults to facing angle if you're not moving.
momangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
}
angledelta = playerangle - angletowaypoint;
if (angledelta > ANGLE_180)
{
@ -6664,7 +6658,7 @@ static void K_KartDrift(player_t *player, boolean onground)
{
if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone)
{
angle_t pushdir = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
angle_t pushdir = K_MomentumAngle(player->mo);
S_StartSound(player->mo, sfx_s23c);
//K_SpawnDashDustRelease(player);
@ -7045,7 +7039,7 @@ static void K_KartSpindash(player_t *player)
mobj_t *grease;
grease = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_TIREGREASE);
P_SetTarget(&grease->target, player->mo);
grease->angle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
grease->angle = K_MomentumAngle(player->mo);
grease->extravalue1 = i;
}
}
@ -7615,7 +7609,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (!onground)
{
P_Thrust(
player->mo, R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy),
player->mo, K_MomentumAngle(player->mo),
FixedMul(player->mo->scale, K_GetKartGameSpeedScalar(gamespeed))
);
}

View file

@ -8393,7 +8393,7 @@ void A_JawzChase(mobj_t *actor)
if (!actor->tracer)
{
actor->angle = R_PointToAngle2(0, 0, actor->momx, actor->momy);
actor->angle = K_MomentumAngle(actor);
}
P_Thrust(actor, actor->angle, thrustamount);
@ -8525,7 +8525,7 @@ static void SpawnSPBAIZDust(mobj_t *mo, INT32 dir)
if (mo->eflags & MFE_VERTICALFLIP)
sz = mo->ceilingz;
travelangle = R_PointToAngle2(0, 0, mo->momx, mo->momy);
travelangle = K_MomentumAngle(mo);
if (leveltime & 1 && abs(mo->z - sz) < FRACUNIT*64)
{
newx = mo->x + P_ReturnThrustX(mo, travelangle - (dir*ANGLE_45), FixedMul(24*FRACUNIT, mo->scale));
@ -8555,7 +8555,7 @@ static void SpawnSPBSpeedLines(mobj_t *actor)
MT_FASTLINE);
P_SetTarget(&fast->target, actor);
fast->angle = R_PointToAngle2(0, 0, actor->momx, actor->momy);
fast->angle = K_MomentumAngle(actor);
fast->color = SKINCOLOR_RED;
fast->colorized = true;
K_MatchGenericExtraFlags(fast, actor);

View file

@ -344,7 +344,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
mobj_t *grease;
grease = P_SpawnMobj(object->x, object->y, object->z, MT_TIREGREASE);
P_SetTarget(&grease->target, object);
grease->angle = R_PointToAngle2(0, 0, object->momx, object->momy);
grease->angle = K_MomentumAngle(object);
grease->extravalue1 = i;
}
}

View file

@ -8001,7 +8001,7 @@ void P_MobjThinker(mobj_t *mobj)
frictionsafety = FRACUNIT;
}
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
mobj->angle = K_MomentumAngle(mobj);
if (mobj->health <= 5)
{
INT32 i;
@ -8103,7 +8103,7 @@ void P_MobjThinker(mobj_t *mobj)
thrustamount = beatfriction + FixedDiv(mobj->movefactor - currentspeed, frictionsafety);
}
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
mobj->angle = K_MomentumAngle(mobj);
P_Thrust(mobj, mobj->angle, thrustamount);
if (P_MobjTouchingSectorSpecial(mobj, 3, 1, true))
@ -8266,7 +8266,7 @@ void P_MobjThinker(mobj_t *mobj)
//mobj->angle = mobj->target->angle;
{
angle_t angle = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy);
angle_t angle = K_MomentumAngle(mobj->target);
fixed_t nudge;
mobj->angle = angle;
@ -8545,7 +8545,7 @@ void P_MobjThinker(mobj_t *mobj)
z += mobj->target->height;
if (mobj->target->momx || mobj->target->momy)
ang = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy);
ang = K_MomentumAngle(mobj->target);
if (mobj->extravalue1)
ang = (signed)(ang - off);
@ -8841,10 +8841,7 @@ void P_MobjThinker(mobj_t *mobj)
}
P_TeleportMove(mobj, destx, desty, mobj->target->z);
if (mobj->target->momx || mobj->target->momy)
mobj->angle = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy);
else
mobj->angle = mobj->target->angle;
mobj->angle = K_MomentumAngle(mobj->target);
if (underlayst != S_NULL)
{

View file

@ -4021,8 +4021,7 @@ DoneSection2:
{
const fixed_t hscale = mapobjectscale + (mapobjectscale - player->mo->scale);
const fixed_t minspeed = 24*hscale;
angle_t pushangle = FixedHypot(player->mo->momx, player->mo->momy) ? R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy) : player->mo->angle;
// if we have no speed for SOME REASON, use the player's angle, otherwise we'd be forcefully thrusted to what I can only assume is angle 0
angle_t pushangle = K_MomentumAngle(player->mo);
if (player->mo->eflags & MFE_SPRUNG)
break;
@ -4044,8 +4043,7 @@ DoneSection2:
const fixed_t hscale = mapobjectscale + (mapobjectscale - player->mo->scale);
const fixed_t minspeed = 24*hscale;
const fixed_t maxspeed = 28*hscale;
angle_t pushangle = FixedHypot(player->mo->momx, player->mo->momy) ? R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy) : player->mo->angle;
// if we have no speed for SOME REASON, use the player's angle, otherwise we'd be forcefully thrusted to what I can only assume is angle 0
angle_t pushangle = K_MomentumAngle(player->mo);
if (player->mo->eflags & MFE_SPRUNG)
break;
@ -4087,7 +4085,7 @@ DoneSection2:
}
lineangle = K_ReflectAngle(
R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy), lineangle,
K_MomentumAngle(player->mo), lineangle,
playerspeed, linespeed
);

View file

@ -6061,7 +6061,7 @@ static void P_MovePlayer(player_t *player)
if (trailScale > 0)
{
const angle_t forwardangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
const angle_t forwardangle = K_MomentumAngle(player->mo);
const fixed_t playerVisualRadius = player->mo->radius + 8*FRACUNIT;
const size_t numFrames = S_WATERTRAIL8 - S_WATERTRAIL1;
const statenum_t curOverlayFrame = S_WATERTRAIL1 + (leveltime % numFrames);
@ -8530,7 +8530,7 @@ static void P_HandleFollower(player_t *player)
player->follower->drawflags |= MFD_DONTDRAW;
if (player->speed && (player->follower->momx || player->follower->momy))
player->follower->angle = R_PointToAngle2(0, 0, player->follower->momx, player->follower->momy);
player->follower->angle = K_MomentumAngle(player->follower);
// if we're moving let's make the angle the direction we're moving towards. This is to avoid drifting / reverse looking awkward.
// Make sure the follower itself is also moving however, otherwise we'll be facing angle 0