- 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_dist, // dist from CENTER
morph_z_speed, // z speed for morph point morph_z_speed, // z speed for morph point
morph_xoff, // save xoff from center 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 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; // 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) void DoPlayerTurnTurret(PLAYER* pp, float avel)
{ {
binangle new_ang, diff; DAngle new_ang, diff;
SECTOR_OBJECT* sop = pp->sop; SECTOR_OBJECT* sop = pp->sop;
if (sop->drive_angspeed) if (sop->drive_angspeed)
@ -1547,22 +1547,22 @@ void DoPlayerTurnTurret(PLAYER* pp, float avel)
if (fabs(avel) >= FLT_EPSILON) 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) if (diff < nullAngle)
new_ang = buildang(sop->limit_ang_center - sop->limit_ang_delta); new_ang = sop->limit_ang_center - sop->limit_ang_delta;
else 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()); pp->actor->set_int_ang(pp->angle.ang.asbuild());
} }

View file

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