- SW: Replace SECTOR_OBJECT zmid with pmid.Z calls and eliminate pmid union.

This commit is contained in:
Mitchell Richters 2022-01-01 09:34:30 +11:00
parent 9145895b47
commit 0375dfdf83
5 changed files with 13 additions and 17 deletions

View file

@ -1412,11 +1412,7 @@ struct SECTOR_OBJECT
TObjPtr<DSWActor*> sp_child; // child sprite that holds info for the sector object
union
{
struct { int BLAHBLAHX, BLAHBLAHY, zmid; }; // midpoints of the sector object
vec3_t pmid;
};
vec3_t pmid; // midpoints of the sector object
TObjPtr<DSWActor*> so_actors[MAX_SO_SPRITE]; // hold the actors of the object
TObjPtr<DSWActor*> match_event_actor; // spritenum of the match event sprite
@ -2138,7 +2134,7 @@ struct ANIM
case ANIM_Floorz:
return *sector[animindex].floorzptr(!write);
case ANIM_SopZ:
return SectorObject[animindex].zmid;
return SectorObject[animindex].pmid.Z;
case ANIM_Spritez:
if (animactor == nullptr) return scratch;
return animactor->spr.pos.Z;

View file

@ -110,7 +110,7 @@ static int &getvalue(so_interp::interp_data& element, bool write)
case soi_soy:
return SectorObject[index].pmid.Y;
case soi_soz:
return SectorObject[index].zmid;
return SectorObject[index].pmid.Z;
case soi_sprx:
if (element.actorofang)
return element.actorofang->spr.pos.X;

View file

@ -4834,7 +4834,7 @@ void FindMainSector(SECTOR_OBJECT* sop)
// set it to something valid
sop->op_main_sector = &sector[0];
updatesectorz(sx, sy, sop->zmid, &sop->op_main_sector);
updatesectorz(sx, sy, sop->pmid.Z, &sop->op_main_sector);
PlaceSectorObject(sop, sx, sy);
}

View file

@ -638,7 +638,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SECTOR_OBJECT& w,
("child", w.sp_child, def->sp_child)
("xmid", w.pmid.X, def->pmid.X)
("ymid", w.pmid.Y, def->pmid.Y)
("zmid", w.zmid, def->zmid)
("zmid", w.pmid.Z, def->pmid.Z)
("vel", w.vel, def->vel)
("vel_tgt", w.vel_tgt, def->vel_tgt)
("player_xoff", w.player_xoff, def->player_xoff)

View file

@ -718,7 +718,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop)
{
sop->pmid.X = BoundActor->spr.pos.X;
sop->pmid.Y = BoundActor->spr.pos.Y;
sop->zmid = BoundActor->spr.pos.Z;
sop->pmid.Z = BoundActor->spr.pos.Z;
KillActor(BoundActor);
}
@ -943,12 +943,12 @@ cont:
ASSERT(zmid != -9999999);
sop->zmid = zmid;
sop->pmid.Z = zmid;
for (i = 0; sop->so_actors[i] != nullptr; i++)
{
auto actor = sop->so_actors[i];
actor->user.pos.Z = sop->zmid - actor->spr.pos.Z;
actor->user.pos.Z = sop->pmid.Z - actor->spr.pos.Z;
}
}
}
@ -1037,14 +1037,14 @@ void SetupSectorObject(sectortype* sectp, short tag)
case TAG_OBJECT_CENTER - 500:
sop->mid_sector = sectp;
SectorMidPoint(sectp, &sop->pmid.X, &sop->pmid.Y, &sop->zmid);
SectorMidPoint(sectp, &sop->pmid.X, &sop->pmid.Y, &sop->pmid.Z);
sop->dir = 1;
sop->track = sectp->hitag;
// spawn a sprite to make it easier to integrate with sprite routines
auto actorNew = SpawnActor(STAT_SO_SP_CHILD, 0, nullptr, sectp,
sop->pmid.X, sop->pmid.Y, sop->zmid, 0, 0);
sop->pmid.X, sop->pmid.Y, sop->pmid.Z, 0, 0);
sop->sp_child = actorNew;
actorNew->user.sop_parent = sop;
actorNew->user.Flags2 |= (SPR2_SPRITE_FAKE_BLOCK); // for damage test
@ -1608,7 +1608,7 @@ void MovePoints(SECTOR_OBJECT* sop, short delta_ang, int nx, int ny)
// setting floorz if need be
if ((sop->flags & SOBJ_ZMID_FLOOR))
sop->zmid = sop->mid_sector->floorz;
sop->pmid.Z = sop->mid_sector->floorz;
for (sectp = sop->sectp, j = 0; *sectp; sectp++, j++)
{
@ -1708,7 +1708,7 @@ PlayerPart:
if ((sop->flags & SOBJ_SPRITE_OBJ))
{
// Sprite Objects follow zmid
actor->spr.pos.Z = sop->zmid - actor->user.pos.Z;
actor->spr.pos.Z = sop->pmid.Z - actor->user.pos.Z;
}
else
{
@ -2524,7 +2524,7 @@ void DoTrack(SECTOR_OBJECT* sop, short locktics, int *nx, int *ny)
// (velocity * difference between the target and the object)
// / distance
sop->z_rate = (sop->vel * (sop->zmid - dz)) / dist;
sop->z_rate = (sop->vel * (sop->pmid.Z - dz)) / dist;
// take absolute value and convert to pixels (divide by 256)
sop->z_rate = PIXZ(labs(sop->z_rate));