- SW: Change limit_ang_center and limit_ang_delta to DAngle objects.

This commit is contained in:
Mitchell Richters 2022-08-27 16:04:55 +10:00 committed by Christoph Oelckers
parent 303e7ddf76
commit 54ef648936
3 changed files with 21 additions and 21 deletions

View file

@ -1517,11 +1517,11 @@ struct SECTOR_OBJECT
morph_dist, // dist from CENTER
morph_z_speed, // z speed for morph point
morph_xoff, // save xoff from center
morph_yoff, // save yoff from center
morph_yoff; // save yoff from center
//scale_rand_reverse, // random at random interval
//scale_rand_reverse; // random at random interval
// limit rotation angle
limit_ang_center, // for limiting the angle of turning - turrets etc
DAngle limit_ang_center, // for limiting the angle of turning - turrets etc
limit_ang_delta; //
};

View file

@ -1530,7 +1530,7 @@ void DoPlayerTurnVehicleRect(PLAYER* pp, int *x, int *y, int *ox, int *oy)
void DoPlayerTurnTurret(PLAYER* pp, float avel)
{
binangle new_ang, diff;
DAngle new_ang, diff;
SECTOR_OBJECT* sop = pp->sop;
if (sop->drive_angspeed)
@ -1547,22 +1547,22 @@ void DoPlayerTurnTurret(PLAYER* pp, float avel)
if (fabs(avel) >= FLT_EPSILON)
{
new_ang = pp->angle.ang + degang(avel);
new_ang = DAngle::fromBam(pp->angle.ang.asbam()) + DAngle::fromDeg(avel);
if (sop->limit_ang_center >= 0)
if (sop->limit_ang_center >= nullAngle)
{
diff = getincanglebam(buildang(sop->limit_ang_center), new_ang);
diff = (new_ang - sop->limit_ang_center).Normalized180();
if (labs(diff.signedbuild()) >= sop->limit_ang_delta)
if (abs(diff) >= sop->limit_ang_delta)
{
if (diff.asbam() > INT32_MAX)
new_ang = buildang(sop->limit_ang_center - sop->limit_ang_delta);
if (diff < nullAngle)
new_ang = sop->limit_ang_center - sop->limit_ang_delta;
else
new_ang = buildang(sop->limit_ang_center + sop->limit_ang_delta);
new_ang = sop->limit_ang_center + sop->limit_ang_delta;
}
}
pp->angle.ang = new_ang;
pp->angle.ang = bamang(new_ang.BAMs());
pp->actor->set_int_ang(pp->angle.ang.asbuild());
}

View file

@ -1225,8 +1225,8 @@ void SetupSectorObject(sectortype* sectp, short tag)
KillActor(actor);
break;
case SO_LIMIT_TURN:
sop->limit_ang_center = actor->int_ang();
sop->limit_ang_delta = actor->spr.lotag;
sop->limit_ang_center = DAngle::fromBuild(actor->int_ang());
sop->limit_ang_delta = DAngle::fromBuild(actor->spr.lotag);
KillActor(actor);
break;
case SO_MATCH_EVENT:
@ -2731,7 +2731,7 @@ void DoAutoTurretObject(SECTOR_OBJECT* sop)
if (!actor) return;
short delta_ang;
int diff;
DAngle diff;
short i;
if ((sop->max_damage != -9999 && sop->max_damage <= 0) || !actor->hasU())
@ -2801,16 +2801,16 @@ void DoAutoTurretObject(SECTOR_OBJECT* sop)
sop->ang = NORM_ANGLE(sop->ang + (delta_ang >> 3));
//sop->ang += delta_ang >> 2;
if (sop->limit_ang_center >= 0)
if (sop->limit_ang_center >= nullAngle)
{
diff = getincangle(sop->limit_ang_center, sop->ang);
diff = (DAngle::fromBuild(sop->ang) - sop->limit_ang_center).Normalized180();
if (labs(diff) >= sop->limit_ang_delta)
if (abs(diff) >= sop->limit_ang_delta)
{
if (diff < 0)
sop->ang = sop->limit_ang_center - sop->limit_ang_delta;
if (diff < nullAngle)
sop->ang = (sop->limit_ang_center - sop->limit_ang_delta).Buildang();
else
sop->ang = sop->limit_ang_center + sop->limit_ang_delta;
sop->ang = (sop->limit_ang_center + sop->limit_ang_delta).Buildang();
}
}