- floatified handle_se00

This commit is contained in:
Christoph Oelckers 2022-09-11 18:01:27 +02:00
parent b5b159f45b
commit bd3f96e779

View file

@ -2540,7 +2540,11 @@ void gutsdir(DDukeActor* actor, int gtype, int n, int p)
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// //
// taken out of moveeffectors // Rotating sector
//
// temp_data[1]: mspos index
// temp_angle: current angle
// temp_data[3]: checkz / acceleration, depending on mode.
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -2548,7 +2552,7 @@ void handle_se00(DDukeActor* actor)
{ {
sectortype *sect = actor->sector(); sectortype *sect = actor->sector();
int zchange = 0; double zchange = 0;
auto Owner = actor->GetOwner(); auto Owner = actor->GetOwner();
@ -2558,12 +2562,12 @@ void handle_se00(DDukeActor* actor)
return; return;
} }
int q = sect->extra >> 3; DAngle ang_amount = mapangle(sect->extra >> 3);
int l = 0; double direction = 0;
if (sect->lotag == 30) if (sect->lotag == 30)
{ {
q >>= 2; ang_amount *= 0.25;
if (actor->spr.extra == 1) if (actor->spr.extra == 1)
{ {
@ -2572,15 +2576,15 @@ void handle_se00(DDukeActor* actor)
actor->tempang += 4; actor->tempang += 4;
if (actor->tempang >= 256) if (actor->tempang >= 256)
callsound(actor->sector(), actor, true); callsound(actor->sector(), actor, true);
if (actor->native_clipdist()) l = 1; if (actor->native_clipdist()) direction = 1; // notreallyclipdist
else l = -1; else direction = -1;
} }
else actor->tempang = 256; else actor->tempang = 256;
if (sect->floorz > actor->spr.pos.Z) //z's are touching if (sect->floorz > actor->spr.pos.Z) //z's are touching
{ {
sect->addfloorz(-2); sect->addfloorz(-2);
zchange = -512; zchange = 2;
if (sect->floorz < actor->spr.pos.Z) if (sect->floorz < actor->spr.pos.Z)
sect->setfloorz(actor->spr.pos.Z); sect->setfloorz(actor->spr.pos.Z);
} }
@ -2588,7 +2592,7 @@ void handle_se00(DDukeActor* actor)
else if (sect->floorz < actor->spr.pos.Z) //z's are touching else if (sect->floorz < actor->spr.pos.Z) //z's are touching
{ {
sect->addfloorz(2); sect->addfloorz(2);
zchange = 512; zchange = 2;
if (sect->floorz > actor->spr.pos.Z) if (sect->floorz > actor->spr.pos.Z)
sect->setfloorz(actor->spr.pos.Z); sect->setfloorz(actor->spr.pos.Z);
} }
@ -2600,16 +2604,16 @@ void handle_se00(DDukeActor* actor)
actor->tempang -= 4; actor->tempang -= 4;
if (actor->tempang <= 0) if (actor->tempang <= 0)
callsound(actor->sector(), actor, true); callsound(actor->sector(), actor, true);
if (actor->native_clipdist()) l = -1; if (actor->native_clipdist()) direction = -1; // notreallyclipdist
else l = 1; else direction = 1;
} }
else actor->tempang = 0; else actor->tempang = 0;
double checkz = actor->temp_data[3] * zinttoworld; double checkz = actor->temp_data[3] * zmaptoworld;
if (sect->floorz > checkz) //z's are touching if (sect->floorz > checkz) //z's are touching
{ {
sect->addfloorz(-2); sect->addfloorz(-2);
zchange = -512; zchange = -2;
if (sect->floorz < checkz) if (sect->floorz < checkz)
sect->setfloorz(checkz); sect->setfloorz(checkz);
} }
@ -2617,14 +2621,14 @@ void handle_se00(DDukeActor* actor)
else if (sect->floorz < checkz) //z's are touching else if (sect->floorz < checkz) //z's are touching
{ {
sect->addfloorz(2); sect->addfloorz(2);
zchange = 512; zchange = 2;
if (sect->floorz > checkz) if (sect->floorz > checkz)
sect->setfloorz(checkz); sect->setfloorz(checkz);
} }
} }
actor->add_int_ang((l * q)); actor->spr.angle += ang_amount * direction;
actor->temp_data[2] += (l * q); actor->temp_angle += ang_amount * direction;
} }
else else
{ {
@ -2635,29 +2639,29 @@ void handle_se00(DDukeActor* actor)
return; return;
} }
if (Owner->int_ang() > 1024) if (Owner->spr.angle.Normalized360() > DAngle180)
l = -1; direction = -1;
else l = 1; else direction = 1;
if (actor->temp_data[3] == 0) if (actor->temp_data[3] == 0)
actor->temp_data[3] = ldist(actor, Owner); actor->temp_data[3] = ldist(actor, Owner);
actor->set_int_xvel(actor->temp_data[3]); actor->vel.X = actor->temp_data[3] * maptoworld;
actor->spr.pos.XY() = Owner->spr.pos.XY(); actor->spr.pos.XY() = Owner->spr.pos.XY();
actor->add_int_ang((l * q)); actor->spr.angle += ang_amount * direction;
actor->temp_data[2] += (l * q); actor->temp_angle += ang_amount * direction;
} }
if (l && (sect->floorstat & CSTAT_SECTOR_ALIGN)) if (direction && (sect->floorstat & CSTAT_SECTOR_ALIGN))
{ {
int p; int p;
for (p = connecthead; p >= 0; p = connectpoint2[p]) for (p = connecthead; p >= 0; p = connectpoint2[p])
{ {
if (ps[p].cursector == actor->sector() && ps[p].on_ground == 1) if (ps[p].cursector == actor->sector() && ps[p].on_ground == 1)
{ {
ps[p].angle.addadjustment(DAngle::fromBuild(l * q)); ps[p].angle.addadjustment(ang_amount * direction);
ps[p].player_add_int_z(zchange); ps[p].pos.Z += zchange;
auto result = rotatepoint(Owner->spr.pos, ps[p].pos.XY(), DAngle::fromBuild(q * l)); auto result = rotatepoint(Owner->spr.pos, ps[p].pos.XY(), ang_amount * direction);
ps[p].bobpos += (result - ps[p].pos.XY()); ps[p].bobpos += (result - ps[p].pos.XY());
@ -2682,19 +2686,19 @@ void handle_se00(DDukeActor* actor)
continue; continue;
} }
act2->add_int_ang((l * q)); act2->spr.angle += ang_amount * direction;
act2->norm_ang(); act2->norm_ang();
act2->add_int_z(zchange); act2->spr.pos.Z += zchange;
auto pos = rotatepoint(Owner->spr.pos.XY(), act2->spr.pos.XY(), DAngle::fromBuild(q* l)); auto pos = rotatepoint(Owner->spr.pos.XY(), act2->spr.pos.XY(), ang_amount * direction);
act2->spr.pos.X = pos.X; act2->spr.pos.X = pos.X;
act2->spr.pos.Y = pos.Y; act2->spr.pos.Y = pos.Y;
} }
} }
} }
movesector(actor, actor->temp_data[1], DAngle::fromBuild(actor->temp_data[2])); movesector(actor, actor->temp_data[1], actor->temp_angle);
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------