- Remove the TVector2 (const TVector3<vec_t> &other) constructor.

* This narrowing constructor was causing a problem with a `clamp()` overload in the next commit.
* Believe this is a product of a by-gone time before we had the `XY()` method on `TVector3<T>` objects.
This commit is contained in:
Mitchell Richters 2023-10-03 16:43:04 +11:00
parent f570cb5d21
commit 828e46a8da
33 changed files with 110 additions and 115 deletions

View file

@ -53,7 +53,7 @@ TArray<int> LevelAABBTree::FindNodePath(unsigned int line, unsigned int node)
return path; return path;
} }
double LevelAABBTree::RayTest(const DVector3 &ray_start, const DVector3 &ray_end) double LevelAABBTree::RayTest(const DVector2 &ray_start, const DVector2 &ray_end)
{ {
// Precalculate some of the variables used by the ray/line intersection test // Precalculate some of the variables used by the ray/line intersection test
DVector2 raydelta = ray_end - ray_start; DVector2 raydelta = ray_end - ray_start;

View file

@ -49,7 +49,7 @@ protected:
public: public:
// Shoot a ray from ray_start to ray_end and return the closest hit as a fractional value between 0 and 1. Returns 1 if no line was hit. // Shoot a ray from ray_start to ray_end and return the closest hit as a fractional value between 0 and 1. Returns 1 if no line was hit.
double RayTest(const DVector3 &ray_start, const DVector3 &ray_end); double RayTest(const DVector2 &ray_start, const DVector2 &ray_end);
const void *Nodes() const { return nodes.Data(); } const void *Nodes() const { return nodes.Data(); }
const void *Lines() const { return treelines.Data(); } const void *Lines() const { return treelines.Data(); }

View file

@ -83,7 +83,7 @@ CUSTOM_CVAR(Int, gl_shadowmap_quality, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
} }
} }
bool IShadowMap::ShadowTest(const DVector3 &lpos, const DVector3 &pos) bool IShadowMap::ShadowTest(const DVector2 &lpos, const DVector2 &pos)
{ {
if (mAABBTree && gl_light_shadowmap) if (mAABBTree && gl_light_shadowmap)
return mAABBTree->RayTest(lpos, pos) >= 1.0f; return mAABBTree->RayTest(lpos, pos) >= 1.0f;

View file

@ -17,7 +17,7 @@ public:
void Reset(); void Reset();
// Test if a world position is in shadow relative to the specified light and returns false if it is // Test if a world position is in shadow relative to the specified light and returns false if it is
bool ShadowTest(const DVector3 &lpos, const DVector3 &pos); bool ShadowTest(const DVector2 &lpos, const DVector2 &pos);
static cycle_t UpdateCycles; static cycle_t UpdateCycles;
static int LightsProcessed; static int LightsProcessed;

View file

@ -88,11 +88,6 @@ struct TVector2
TVector2(const TVector2 &other) = default; TVector2(const TVector2 &other) = default;
TVector2 (const TVector3<vec_t> &other) // Copy the X and Y from the 3D vector and discard the Z
: X(other.X), Y(other.Y)
{
}
TVector2(vec_t *o) TVector2(vec_t *o)
: X(o[0]), Y(o[1]) : X(o[0]), Y(o[1])
{ {

View file

@ -559,7 +559,7 @@ double intersectWallSprite(DCoreActor* actor, const DVector3& start, const DVect
{ {
DVector2 points[2]; DVector2 points[2];
GetWallSpritePosition(&actor->spr, actor->spr.pos, points, false); GetWallSpritePosition(&actor->spr, actor->spr.pos.XY(), points, false);
points[1] -= points[0]; points[1] -= points[0];
if ((actor->spr.cstat & CSTAT_SPRITE_ONE_SIDE)) //check for back side of one way sprite if ((actor->spr.cstat & CSTAT_SPRITE_ONE_SIDE)) //check for back side of one way sprite
@ -617,7 +617,7 @@ double intersectFloorSprite(DCoreActor* actor, const DVector3& start, const DVec
} }
DVector2 points[4]; DVector2 points[4];
GetFlatSpritePosition(actor, actor->spr.pos, points, nullptr, false); GetFlatSpritePosition(actor, actor->spr.pos.XY(), points, nullptr, false);
double factor = (actor->spr.pos.Z - start.Z) / direction.Z; double factor = (actor->spr.pos.Z - start.Z) / direction.Z;
if (factor <= 0 || factor > maxfactor) return -1; if (factor <= 0 || factor > maxfactor) return -1;
result = start + factor * direction; result = start + factor * direction;
@ -635,7 +635,7 @@ double intersectSlopeSprite(DCoreActor* actor, const DVector3& start, const DVec
{ {
DVector2 points[4]; DVector2 points[4];
double ptz[4]; double ptz[4];
GetFlatSpritePosition(actor, actor->spr.pos, points, ptz, false); GetFlatSpritePosition(actor, actor->spr.pos.XY(), points, ptz, false);
DVector3 pt1(points[0], ptz[0]); DVector3 pt1(points[0], ptz[0]);
DVector3 pt2(points[1], ptz[1]); DVector3 pt2(points[1], ptz[1]);
DVector3 pt3(points[2], ptz[2]); DVector3 pt3(points[2], ptz[2]);
@ -854,8 +854,8 @@ bool checkRangeOfWall(walltype* wal, EWallFlags flagmask, const DVector3& pos, d
auto pos2 = wal->point2Wall()->pos; auto pos2 = wal->point2Wall()->pos;
// Checks borrowed from GZDoom. // Checks borrowed from GZDoom.
DVector2 boxtl = pos - DVector2(maxdist, maxdist); DVector2 boxtl = pos.XY() - DVector2(maxdist, maxdist);
DVector2 boxbr = pos + DVector2(maxdist, maxdist); DVector2 boxbr = pos.XY() + DVector2(maxdist, maxdist);
if (!BoxInRange(boxtl, boxbr, pos1, pos2)) return false; if (!BoxInRange(boxtl, boxbr, pos1, pos2)) return false;
if (BoxOnLineSide(boxtl, boxbr, pos1, pos2 - pos1) != -1) return false; if (BoxOnLineSide(boxtl, boxbr, pos1, pos2 - pos1) != -1) return false;
@ -1211,7 +1211,7 @@ int pushmove(DVector3& pos, sectortype** pSect, double walldist, double ceildist
for (int t = 0; t < 16; t++) for (int t = 0; t < 16; t++)
{ {
pos += dv; pos += dv;
if (IsCloseToWall(pos, wal, (walldist - 0.25)) == EClose::Outside) break; if (IsCloseToWall(pos.XY(), wal, (walldist - 0.25)) == EClose::Outside) break;
} }
pushed = true; pushed = true;

View file

@ -380,8 +380,8 @@ void HWDrawInfo::CreateScene(bool portal)
if(!portal) mClipper->SetVisibleRange(vp.RotAngle, a1); if(!portal) mClipper->SetVisibleRange(vp.RotAngle, a1);
if (a1 != 0xffffffff) mDrawer.Init(this, mClipper, vp.Pos, vp.RotAngle - a1, vp.RotAngle + a1); if (a1 != 0xffffffff) mDrawer.Init(this, mClipper, vp.Pos.XY(), vp.RotAngle - a1, vp.RotAngle + a1);
else mDrawer.Init(this, mClipper, vp.Pos, 0, 0); else mDrawer.Init(this, mClipper, vp.Pos.XY(), 0, 0);
if (vp.SectNums) if (vp.SectNums)
mDrawer.RenderScene(vp.SectNums, vp.SectCount, portal); mDrawer.RenderScene(vp.SectNums, vp.SectCount, portal);
else else
@ -417,8 +417,8 @@ void HWDrawInfo::CreateScene(bool portal)
if (eff.geosector[i] == drawsectp) drawsectp = eff.geosectorwarp[i]; if (eff.geosector[i] == drawsectp) drawsectp = eff.geosectorwarp[i];
} }
if (a1 != 0xffffffff) mDrawer.Init(this, mClipper, vp.Pos, vp.RotAngle - a1, vp.RotAngle + a1); if (a1 != 0xffffffff) mDrawer.Init(this, mClipper, vp.Pos.XY(), vp.RotAngle - a1, vp.RotAngle + a1);
else mDrawer.Init(this, mClipper, vp.Pos, 0, 0); else mDrawer.Init(this, mClipper, vp.Pos.XY(), 0, 0);
int drawsect = sectindex(drawsectp); int drawsect = sectindex(drawsectp);
mDrawer.RenderScene(&drawsect, 1, false); mDrawer.RenderScene(&drawsect, 1, false);
@ -449,8 +449,8 @@ void HWDrawInfo::CreateScene(bool portal)
if (eff.geosector[i] == orgdrawsectp) drawsectp = eff.geosectorwarp2[i]; if (eff.geosector[i] == orgdrawsectp) drawsectp = eff.geosectorwarp2[i];
} }
if (a1 != 0xffffffff) mDrawer.Init(this, mClipper, vp.Pos, vp.RotAngle - a1, vp.RotAngle + a1); if (a1 != 0xffffffff) mDrawer.Init(this, mClipper, vp.Pos.XY(), vp.RotAngle - a1, vp.RotAngle + a1);
else mDrawer.Init(this, mClipper, vp.Pos, 0, 0); else mDrawer.Init(this, mClipper, vp.Pos.XY(), 0, 0);
drawsect = sectindex(drawsectp); drawsect = sectindex(drawsectp);
mDrawer.RenderScene(&drawsect, 1, false); mDrawer.RenderScene(&drawsect, 1, false);

View file

@ -472,7 +472,7 @@ bool P_ClipLineToPortal(walltype* line, walltype* portal, DVector2 view)
int HWLinePortal::ClipSeg(walltype *seg, const DVector3 &viewpos) int HWLinePortal::ClipSeg(walltype *seg, const DVector3 &viewpos)
{ {
return P_ClipLineToPortal(seg, line, viewpos) ? PClip_InFront : PClip_Inside; return P_ClipLineToPortal(seg, line, viewpos.XY()) ? PClip_InFront : PClip_Inside;
} }
int HWLinePortal::ClipSector(sectortype *sub) int HWLinePortal::ClipSector(sectortype *sub)
@ -607,7 +607,7 @@ bool HWLineToLinePortal::Setup(HWDrawInfo *di, FRenderState &rstate, Clipper *cl
auto destcenter = line->center(); auto destcenter = line->center();
destcenter.Y = -destcenter.Y; destcenter.Y = -destcenter.Y;
DVector2 npos = vp.Pos - srccenter + destcenter; DVector2 npos = vp.Pos.XY() - srccenter + destcenter;
#if 0 // Blood does not rotate these. Needs map checking to make sure it can be added. #if 0 // Blood does not rotate these. Needs map checking to make sure it can be added.
int dx = origin->point2Wall()->x - origin->x; int dx = origin->point2Wall()->x - origin->x;
@ -674,7 +674,7 @@ bool HWLineToSpritePortal::Setup(HWDrawInfo* di, FRenderState& rstate, Clipper*
auto srccenter = origin->center(); auto srccenter = origin->center();
srccenter.Y = -srccenter.Y; srccenter.Y = -srccenter.Y;
DVector2 destcenter = { camera->spr.pos.X, -camera->spr.pos.Y }; DVector2 destcenter = { camera->spr.pos.X, -camera->spr.pos.Y };
DVector2 npos = vp.Pos - srccenter + destcenter; DVector2 npos = vp.Pos.XY() - srccenter + destcenter;
double origx = vp.Pos.X; double origx = vp.Pos.X;
double origy = vp.Pos.Y; double origy = vp.Pos.Y;

View file

@ -5084,11 +5084,11 @@ void MoveDude(DBloodActor* actor)
switch (tileGetSurfType(floorColl)) switch (tileGetSurfType(floorColl))
{ {
case kSurfWater: case kSurfWater:
gFX.fxSpawnActor(FX_9, actor->sector(), DVector3(actor->spr.pos, floorZ)); gFX.fxSpawnActor(FX_9, actor->sector(), DVector3(actor->spr.pos.XY(), floorZ));
break; break;
case kSurfLava: case kSurfLava:
{ {
auto pFX = gFX.fxSpawnActor(FX_10, actor->sector(), DVector3(actor->spr.pos, floorZ)); auto pFX = gFX.fxSpawnActor(FX_10, actor->sector(), DVector3(actor->spr.pos.XY(), floorZ));
if (pFX) if (pFX)
{ {
for (int i = 0; i < 7; i++) for (int i = 0; i < 7; i++)

View file

@ -278,7 +278,7 @@ static void cultThinkChase(DBloodActor* actor)
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning && (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning
&& Chance(0x8000)) && Chance(0x8000))
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -299,7 +299,7 @@ static void cultThinkChase(DBloodActor* actor)
} }
else if (nDist < 0x460 && nDeltaAngle < DAngle1 * 5) else if (nDist < 0x460 && nDeltaAngle < DAngle1 * 5)
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -346,7 +346,7 @@ static void cultThinkChase(DBloodActor* actor)
&& (target->spr.flags & 2) && gGameOptions.nDifficulty >= 2 && target->IsPlayerActor() && !getPlayer(target)->isRunning && (target->spr.flags & 2) && gGameOptions.nDifficulty >= 2 && target->IsPlayerActor() && !getPlayer(target)->isRunning
&& Chance(0x8000)) && Chance(0x8000))
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -367,7 +367,7 @@ static void cultThinkChase(DBloodActor* actor)
} }
else if (nDist < 0x320 && nDeltaAngle < DAngle1 * 5) else if (nDist < 0x320 && nDeltaAngle < DAngle1 * 5)
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -414,7 +414,7 @@ static void cultThinkChase(DBloodActor* actor)
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning && (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning
&& Chance(0x8000)) && Chance(0x8000))
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -436,7 +436,7 @@ static void cultThinkChase(DBloodActor* actor)
else if (nDist < 0x320 && nDeltaAngle < DAngle1 * 5) else if (nDist < 0x320 && nDeltaAngle < DAngle1 * 5)
{ {
AISTATE *pCultistTsProneFire = !cl_bloodvanillaenemies && !VanillaMode() ? &cultistTsProneFireFixed : &cultistTsProneFire; AISTATE *pCultistTsProneFire = !cl_bloodvanillaenemies && !VanillaMode() ? &cultistTsProneFireFixed : &cultistTsProneFire;
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -481,7 +481,7 @@ static void cultThinkChase(DBloodActor* actor)
case kDudeCultistTNT: case kDudeCultistTNT:
if (nDist < 0x2c0 && nDist > 0x140 && nDeltaAngle < DAngle15 && (target->spr.flags & 2) && target->IsPlayerActor()) if (nDist < 0x2c0 && nDist > 0x140 && nDeltaAngle < DAngle15 && (target->spr.flags & 2) && target->IsPlayerActor())
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -501,7 +501,7 @@ static void cultThinkChase(DBloodActor* actor)
} }
else if (nDist < 0x140 && nDeltaAngle < DAngle15 && (target->spr.flags & 2) && target->IsPlayerActor()) else if (nDist < 0x140 && nDeltaAngle < DAngle15 && (target->spr.flags & 2) && target->IsPlayerActor())
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -525,7 +525,7 @@ static void cultThinkChase(DBloodActor* actor)
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning && (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning
&& Chance(0x8000)) && Chance(0x8000))
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -546,7 +546,7 @@ static void cultThinkChase(DBloodActor* actor)
} }
else if (nDist < 0x320 && abs(nDeltaAngle) < DAngle1 * 5) else if (nDist < 0x320 && abs(nDeltaAngle) < DAngle1 * 5)
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:

View file

@ -486,7 +486,7 @@ static void unicultThinkChase(DBloodActor* actor)
if (inAttack(actor->xspr.aiState)) if (inAttack(actor->xspr.aiState))
velocity.X = velocity.Y = max(actor->clipdist, 0.5) / 32768; velocity.X = velocity.Y = max(actor->clipdist, 0.5) / 32768;
aiGenDudeChooseDirection(actor, nAngle, velocity); aiGenDudeChooseDirection(actor, nAngle, velocity.XY());
GENDUDEEXTRA* pExtra = &actor->genDudeExtra; GENDUDEEXTRA* pExtra = &actor->genDudeExtra;
if (!pExtra->canAttack) if (!pExtra->canAttack)

View file

@ -136,7 +136,7 @@ static void zombfThinkChase(DBloodActor* actor)
aiSetTarget(actor, actor->GetTarget()); aiSetTarget(actor, actor->GetTarget());
if (nDist < 0x100 && nDist > 0xe0 && abs(nDeltaAngle) < DAngle15) if (nDist < 0x100 && nDist > 0xe0 && abs(nDeltaAngle) < DAngle15)
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dv, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dv.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -155,7 +155,7 @@ static void zombfThinkChase(DBloodActor* actor)
} }
else if (nDist < 0x140 && nDist > 0x60 && nDeltaAngle < DAngle15) else if (nDist < 0x140 && nDist > 0x60 && nDeltaAngle < DAngle15)
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dv, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dv.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:
@ -174,7 +174,7 @@ static void zombfThinkChase(DBloodActor* actor)
} }
else if (nDist < 0x40 && nDeltaAngle < DAngle15) else if (nDist < 0x40 && nDeltaAngle < DAngle15)
{ {
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dv, 0), CLIPMASK1, 0); int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dv.XY(), 0), CLIPMASK1, 0);
switch (hit) switch (hit)
{ {
case -1: case -1:

View file

@ -452,7 +452,7 @@ void fxBloodBits(DBloodActor* actor, sectortype*) // 14
DAngle nAngle = RandomAngle(); DAngle nAngle = RandomAngle();
int nDist = Random(16); int nDist = Random(16);
auto pos = actor->spr.pos + nAngle.ToVector() * nDist * 4; auto pos = actor->spr.pos + nAngle.ToVector() * nDist * 4;
gFX.fxSpawnActor(FX_48, actor->sector(), DVector3(pos, actor->spr.pos.Z)); gFX.fxSpawnActor(FX_48, actor->sector(), DVector3(pos.XY(), actor->spr.pos.Z));
if (actor->spr.Angles.Yaw == DAngle180) if (actor->spr.Angles.Yaw == DAngle180)
{ {
int nChannel = 28 + (actor->GetIndex() & 2); // this is a little stupid... int nChannel = 28 + (actor->GetIndex() & 2); // this is a little stupid...
@ -460,7 +460,7 @@ void fxBloodBits(DBloodActor* actor, sectortype*) // 14
} }
if (Chance(0x5000)) if (Chance(0x5000))
{ {
auto pFX = gFX.fxSpawnActor(FX_36, actor->sector(), DVector3(pos, floorZ - 0.25)); auto pFX = gFX.fxSpawnActor(FX_36, actor->sector(), DVector3(pos.XY(), floorZ - 0.25));
if (pFX) if (pFX)
pFX->spr.Angles.Yaw = nAngle; pFX->spr.Angles.Yaw = nAngle;
} }

View file

@ -1837,7 +1837,7 @@ void debrisMove(int listIndex)
if ((floorColl.actor()->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == 0) if ((floorColl.actor()->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == 0)
{ {
actor->vel.XY() += (actor->spr.pos - floorColl.actor()->spr.pos) / 4096.; actor->vel.XY() += (actor->spr.pos.XY() - floorColl.actor()->spr.pos.XY()) / 4096.;
return; return;
} }
} }
@ -8238,10 +8238,10 @@ void aiPatrolAlarmLite(DBloodActor* actor, DBloodActor* targetactor)
double eaz2 = (getDudeInfo(targetactor)->eyeHeight * targetactor->spr.scale.Y); double eaz2 = (getDudeInfo(targetactor)->eyeHeight * targetactor->spr.scale.Y);
double nDist = (dudeactor->spr.pos.XY() - actor->spr.pos.XY()).LengthSquared(); double nDist = (dudeactor->spr.pos.XY() - actor->spr.pos.XY()).LengthSquared();
if (nDist >= kPatrolAlarmSeeDistSq || !cansee(DVector3(actor->spr.pos, zt1), actor->sector(), dudeactor->spr.pos.plusZ(-eaz2), dudeactor->sector())) if (nDist >= kPatrolAlarmSeeDistSq || !cansee(DVector3(actor->spr.pos.XY(), zt1), actor->sector(), dudeactor->spr.pos.plusZ(-eaz2), dudeactor->sector()))
{ {
nDist = (dudeactor->spr.pos.XY() - targetactor->spr.pos.XY()).LengthSquared(); nDist = (dudeactor->spr.pos.XY() - targetactor->spr.pos.XY()).LengthSquared();
if (nDist >= kPatrolAlarmSeeDistSq || !cansee(DVector3(targetactor->spr.pos, zt2), targetactor->sector(), dudeactor->spr.pos.plusZ(-eaz2), dudeactor->sector())) if (nDist >= kPatrolAlarmSeeDistSq || !cansee(DVector3(targetactor->spr.pos.XY(), zt2), targetactor->sector(), dudeactor->spr.pos.plusZ(-eaz2), dudeactor->sector()))
continue; continue;
} }

View file

@ -906,7 +906,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
if (actor->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD) if (actor->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD)
{ {
auto spot = rotatepoint(pivot, actor->basePoint, ptang_w2); auto spot = rotatepoint(pivot, actor->basePoint.XY(), ptang_w2);
viewBackupSpriteLoc(actor); viewBackupSpriteLoc(actor);
actor->spr.pos.XY() = spot + pt_w2 - pivot; actor->spr.pos.XY() = spot + pt_w2 - pivot;
actor->spr.Angles.Yaw += angleofs; actor->spr.Angles.Yaw += angleofs;
@ -917,7 +917,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
// fix Y arg in RotatePoint for reverse (green) moving sprites. (Original Blood bug?) // fix Y arg in RotatePoint for reverse (green) moving sprites. (Original Blood bug?)
DVector2 pivotDy(pivot.X, gModernMap ? pivot.Y : pivot.X); DVector2 pivotDy(pivot.X, gModernMap ? pivot.Y : pivot.X);
auto spot = rotatepoint(pivotDy, actor->basePoint, ptang_w2); auto spot = rotatepoint(pivotDy, actor->basePoint.XY(), ptang_w2);
viewBackupSpriteLoc(actor); viewBackupSpriteLoc(actor);
actor->spr.pos.XY() = spot - pt_w2 + pivot; actor->spr.pos.XY() = spot - pt_w2 + pivot;
actor->spr.Angles.Yaw += angleofs; actor->spr.Angles.Yaw += angleofs;
@ -956,7 +956,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
if (ac->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD) if (ac->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD)
{ {
auto spot = rotatepoint(pivot, ac->basePoint, ptang_w2); auto spot = rotatepoint(pivot, ac->basePoint.XY(), ptang_w2);
viewBackupSpriteLoc(ac); viewBackupSpriteLoc(ac);
ac->spr.pos.XY() = spot + pt_w2 - pivot; ac->spr.pos.XY() = spot + pt_w2 - pivot;
ac->spr.Angles.Yaw += angleofs; ac->spr.Angles.Yaw += angleofs;
@ -964,7 +964,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
} }
else if (ac->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE) else if (ac->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE)
{ {
auto spot = rotatepoint(pivot, ac->basePoint, ptang_w2); auto spot = rotatepoint(pivot, ac->basePoint.XY(), ptang_w2);
viewBackupSpriteLoc(ac); viewBackupSpriteLoc(ac);
ac->spr.pos.XY() = spot - pt_w2 + pivot; ac->spr.pos.XY() = spot - pt_w2 + pivot;
ac->spr.Angles.Yaw += angleofs; ac->spr.Angles.Yaw += angleofs;
@ -1360,7 +1360,7 @@ int HDoorBusy(sectortype* pSector, unsigned int a2, DBloodActor* initiator)
if (!pXSector->marker0 || !pXSector->marker1) return 0; if (!pXSector->marker0 || !pXSector->marker1) return 0;
auto marker0 = pXSector->marker0; auto marker0 = pXSector->marker0;
auto marker1 = pXSector->marker1; auto marker1 = pXSector->marker1;
TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos, marker0->spr.pos, marker0->spr.Angles.Yaw, marker1->spr.pos, marker1->spr.Angles.Yaw, pSector->type == kSectorSlide); TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos.XY(), marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, marker1->spr.pos.XY(), marker1->spr.Angles.Yaw, pSector->type == kSectorSlide);
ZTranslateSector(pSector, pXSector, a2, nWave); ZTranslateSector(pSector, pXSector, a2, nWave);
pXSector->busy = a2; pXSector->busy = a2;
if (pXSector->command == kCmdLink && pXSector->txID) if (pXSector->command == kCmdLink && pXSector->txID)
@ -1391,7 +1391,7 @@ int RDoorBusy(sectortype* pSector, unsigned int a2, DBloodActor* initiator)
nWave = pXSector->busyWaveB; nWave = pXSector->busyWaveB;
if (!pXSector->marker0) return 0; if (!pXSector->marker0) return 0;
auto marker0 = pXSector->marker0; auto marker0 = pXSector->marker0;
TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos, marker0->spr.pos, nullAngle, marker0->spr.pos, marker0->spr.Angles.Yaw, pSector->type == kSectorRotate); TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos.XY(), marker0->spr.pos.XY(), nullAngle, marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, pSector->type == kSectorRotate);
ZTranslateSector(pSector, pXSector, a2, nWave); ZTranslateSector(pSector, pXSector, a2, nWave);
pXSector->busy = a2; pXSector->busy = a2;
if (pXSector->command == kCmdLink && pXSector->txID) if (pXSector->command == kCmdLink && pXSector->txID)
@ -1424,13 +1424,13 @@ int StepRotateBusy(sectortype* pSector, unsigned int a2, DBloodActor* initiator)
{ {
ang2 = ang1 + marker0->spr.Angles.Yaw; ang2 = ang1 + marker0->spr.Angles.Yaw;
int nWave = pXSector->busyWaveA; int nWave = pXSector->busyWaveA;
TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos, marker0->spr.pos, ang1, marker0->spr.pos, ang2, true); TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos.XY(), marker0->spr.pos.XY(), ang1, marker0->spr.pos.XY(), ang2, true);
} }
else else
{ {
ang2 = ang1 - marker0->spr.Angles.Yaw; ang2 = ang1 - marker0->spr.Angles.Yaw;
int nWave = pXSector->busyWaveB; int nWave = pXSector->busyWaveB;
TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos, marker0->spr.pos, ang2, marker0->spr.pos, ang1, true); TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), marker0->spr.pos.XY(), marker0->spr.pos.XY(), ang2, marker0->spr.pos.XY(), ang1, true);
} }
pXSector->busy = a2; pXSector->busy = a2;
if (pXSector->command == kCmdLink && pXSector->txID) if (pXSector->command == kCmdLink && pXSector->txID)
@ -1484,7 +1484,7 @@ int PathBusy(sectortype* pSector, unsigned int a2, DBloodActor* initiator)
if (!basepath || !marker0 || !marker1) return 0; if (!basepath || !marker0 || !marker1) return 0;
int nWave = marker0->xspr.wave; int nWave = marker0->xspr.wave;
TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), basepath->spr.pos, marker0->spr.pos, marker0->spr.Angles.Yaw, marker1->spr.pos, marker1->spr.Angles.Yaw, true); TranslateSector(pSector, GetWaveValue(pXSector->busy, nWave), GetWaveValue(a2, nWave), basepath->spr.pos.XY(), marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, marker1->spr.pos.XY(), marker1->spr.Angles.Yaw, true);
ZTranslateSector(pSector, pXSector, a2, nWave); ZTranslateSector(pSector, pXSector, a2, nWave);
pXSector->busy = a2; pXSector->busy = a2;
if ((a2 & 0xffff) == 0) if ((a2 & 0xffff) == 0)
@ -2324,9 +2324,9 @@ void trInit(TArray<DBloodActor*>& actors)
{ {
auto marker0 = pXSector->marker0; auto marker0 = pXSector->marker0;
auto marker1 = pXSector->marker1; auto marker1 = pXSector->marker1;
TranslateSector(pSector, 0, -1, marker0->spr.pos, marker0->spr.pos, marker0->spr.Angles.Yaw, marker1->spr.pos, marker1->spr.Angles.Yaw, pSector->type == kSectorSlide); TranslateSector(pSector, 0, -1, marker0->spr.pos.XY(), marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, marker1->spr.pos.XY(), marker1->spr.Angles.Yaw, pSector->type == kSectorSlide);
UpdateBasePoints(pSector); UpdateBasePoints(pSector);
TranslateSector(pSector, 0, FixedToFloat(pXSector->busy), marker0->spr.pos, marker0->spr.pos, marker0->spr.Angles.Yaw, marker1->spr.pos, marker1->spr.Angles.Yaw, pSector->type == kSectorSlide); TranslateSector(pSector, 0, FixedToFloat(pXSector->busy), marker0->spr.pos.XY(), marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, marker1->spr.pos.XY(), marker1->spr.Angles.Yaw, pSector->type == kSectorSlide);
ZTranslateSector(pSector, pXSector, pXSector->busy, 1); ZTranslateSector(pSector, pXSector, pXSector->busy, 1);
break; break;
} }
@ -2334,9 +2334,9 @@ void trInit(TArray<DBloodActor*>& actors)
case kSectorRotate: case kSectorRotate:
{ {
auto marker0 = pXSector->marker0; auto marker0 = pXSector->marker0;
TranslateSector(pSector, 0, -1, marker0->spr.pos, marker0->spr.pos, nullAngle, marker0->spr.pos, marker0->spr.Angles.Yaw, pSector->type == kSectorRotate); TranslateSector(pSector, 0, -1, marker0->spr.pos.XY(), marker0->spr.pos.XY(), nullAngle, marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, pSector->type == kSectorRotate);
UpdateBasePoints(pSector); UpdateBasePoints(pSector);
TranslateSector(pSector, 0, FixedToFloat(pXSector->busy), marker0->spr.pos, marker0->spr.pos, nullAngle, marker0->spr.pos, marker0->spr.Angles.Yaw, pSector->type == kSectorRotate); TranslateSector(pSector, 0, FixedToFloat(pXSector->busy), marker0->spr.pos.XY(), marker0->spr.pos.XY(), nullAngle, marker0->spr.pos.XY(), marker0->spr.Angles.Yaw, pSector->type == kSectorRotate);
ZTranslateSector(pSector, pXSector, pXSector->busy, 1); ZTranslateSector(pSector, pXSector, pXSector->busy, 1);
break; break;
} }

View file

@ -1224,7 +1224,7 @@ int movesprite_ex(DDukeActor* actor, const DVector3& change, unsigned int clipty
if (bg) if (bg)
{ {
if (actor->spr.scale.X > 0.9375) if (actor->spr.scale.X > 0.9375)
clipmove(ppos, &dasectp, change * 0.5, 64., 4., 4., cliptype, result); clipmove(ppos, &dasectp, change.XY() * 0.5, 64., 4., 4., cliptype, result);
else else
{ {
// todo: move this mess to the actor definitions once we have them all available. // todo: move this mess to the actor definitions once we have them all available.
@ -1237,7 +1237,7 @@ int movesprite_ex(DDukeActor* actor, const DVector3& change, unsigned int clipty
clipdist = 12; clipdist = 12;
} }
clipmove(ppos, &dasectp, change * 0.5, clipdist, 4., 4., cliptype, result); clipmove(ppos, &dasectp, change.XY() * 0.5, clipdist, 4., 4., cliptype, result);
} }
// conditional code from hell... // conditional code from hell...
@ -1262,9 +1262,9 @@ int movesprite_ex(DDukeActor* actor, const DVector3& change, unsigned int clipty
else else
{ {
if (actor->spr.statnum == STAT_PROJECTILE) if (actor->spr.statnum == STAT_PROJECTILE)
clipmove(ppos, &dasectp, change * 0.5, 0.5, 4., 4., cliptype, result); clipmove(ppos, &dasectp, change.XY() * 0.5, 0.5, 4., 4., cliptype, result);
else else
clipmove(ppos, &dasectp, change * 0.5, actor->clipdist, 4., 4., cliptype, result); clipmove(ppos, &dasectp, change.XY() * 0.5, actor->clipdist, 4., 4., cliptype, result);
} }
actor->spr.pos.XY() = ppos.XY(); actor->spr.pos.XY() = ppos.XY();
@ -1640,7 +1640,7 @@ void handle_se00(DDukeActor* actor)
pact->spr.Angles.Yaw += ang_amount * direction; pact->spr.Angles.Yaw += ang_amount * direction;
pact->spr.pos.Z += zchange; pact->spr.pos.Z += zchange;
auto result = rotatepoint(Owner->spr.pos, pact->spr.pos.XY(), ang_amount * direction); auto result = rotatepoint(Owner->spr.pos.XY(), pact->spr.pos.XY(), ang_amount * direction);
p->bobpos += (result - pact->spr.pos.XY()); p->bobpos += (result - pact->spr.pos.XY());
pact->spr.pos.XY() = result; pact->spr.pos.XY() = result;
} }
@ -1660,7 +1660,7 @@ void handle_se00(DDukeActor* actor)
act2->spr.pos.Z += zchange; act2->spr.pos.Z += zchange;
auto pos = rotatepoint(Owner->spr.pos, act2->spr.pos.XY(), ang_amount * direction); 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;
} }

View file

@ -1451,7 +1451,7 @@ int ifcansee(DDukeActor* actor, DDukePlayer* p)
{ {
// else, they did see it. // else, they did see it.
// save where we were looking.. // save where we were looking..
actor->ovel = tosee->spr.pos; actor->ovel = tosee->spr.pos.XY();
} }
if (j == 1 && (actor->spr.statnum == STAT_ACTOR || actor->spr.statnum == STAT_STANDABLE)) if (j == 1 && (actor->spr.statnum == STAT_ACTOR || actor->spr.statnum == STAT_STANDABLE))

View file

@ -1840,7 +1840,7 @@ HORIZONLY:
ChangeActorSect(pact, p->cursector); ChangeActorSect(pact, p->cursector);
} }
else else
clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, p->vel.XY(), 10.25, 4., iif, CLIPMASK0, clip);
if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
p->GetActor()->spr.pos.Z += 32; p->GetActor()->spr.pos.Z += 32;

View file

@ -2722,7 +2722,7 @@ HORIZONLY:
ChangeActorSect(pact, p->cursector); ChangeActorSect(pact, p->cursector);
} }
else else
clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, p->vel, 10.25, 4., iif, CLIPMASK0, clip); clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, p->vel.XY(), 10.25, 4., iif, CLIPMASK0, clip);
if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk)
p->GetActor()->spr.pos.Z += 32; p->GetActor()->spr.pos.Z += 32;

View file

@ -173,7 +173,7 @@ static int BelowNear(DExhumedActor* pActor, const Collision& loHit, double walld
{ {
if (!search.Check(wal.nextSector())) if (!search.Check(wal.nextSector()))
{ {
if (IsCloseToWall(pActor->spr.pos, &wal, walldist) != EClose::Outside) if (IsCloseToWall(pActor->spr.pos.XY(), &wal, walldist) != EClose::Outside)
{ {
search.Add(wal.nextSector()); search.Add(wal.nextSector());
} }

View file

@ -2317,7 +2317,7 @@ void ProcessTrailSprite(DExhumedActor* pActor, int nLotag, int nHitag)
{ {
auto nPoint = sTrailPoint.Reserve(1); auto nPoint = sTrailPoint.Reserve(1);
sTrailPoint[nPoint].pos = pActor->spr.pos; sTrailPoint[nPoint].pos = pActor->spr.pos.XY();
int nTrail = FindTrail(nHitag); int nTrail = FindTrail(nHitag);

View file

@ -573,7 +573,7 @@ DSWActor* ConnectCopySprite(spritetypebase const* tsp)
testz = GetSpriteZOfTop(tsp) - 10; testz = GetSpriteZOfTop(tsp) - 10;
if (testz < tsp->sectp->ceilingz) if (testz < tsp->sectp->ceilingz)
updatesectorz(DVector3(tsp->pos, testz), &newsector); updatesectorz(DVector3(tsp->pos.XY(), testz), &newsector);
if (newsector != nullptr && newsector != tsp->sectp) if (newsector != nullptr && newsector != tsp->sectp)
{ {
@ -587,7 +587,7 @@ DSWActor* ConnectCopySprite(spritetypebase const* tsp)
testz = GetSpriteZOfBottom(tsp) + 10; testz = GetSpriteZOfBottom(tsp) + 10;
if (testz > tsp->sectp->floorz) if (testz > tsp->sectp->floorz)
updatesectorz(DVector3(tsp->pos, testz), &newsector); updatesectorz(DVector3(tsp->pos.XY(), testz), &newsector);
if (newsector != nullptr && newsector != tsp->sectp) if (newsector != nullptr && newsector != tsp->sectp)
{ {

View file

@ -451,7 +451,7 @@ void JS_DrawCameras(DSWPlayer* pp, const DVector3& campos, double smoothratio)
if (tex && tex->isSeen(true)) if (tex && tex->isSeen(true))
{ {
DSWActor* camactor = mirror[cnt].camspriteActor; DSWActor* camactor = mirror[cnt].camspriteActor;
DVector2 vec = camactor->spr.pos - campos.XY(); DVector2 vec = camactor->spr.pos.XY() - campos.XY();
dist = abs(vec.X) + abs(vec.Y); dist = abs(vec.X) + abs(vec.Y);

View file

@ -1215,7 +1215,7 @@ int SpawnRadiationCloud(DSWActor* actor)
int DoRadiationCloud(DSWActor* actor) int DoRadiationCloud(DSWActor* actor)
{ {
actor->spr.pos.XY() += actor->user.change; actor->spr.pos.XY() += actor->user.change.XY();
actor->spr.pos.Z -= actor->vel.Z; actor->spr.pos.Z -= actor->vel.Z;
if (actor->user.ID) if (actor->user.ID)

View file

@ -60,7 +60,7 @@ Collision MultiClipMove(DSWPlayer* pp, double zz, double floordist)
// move the box to position instead of using offset- this prevents small rounding errors // move the box to position instead of using offset- this prevents small rounding errors
// allowing you to move through wall // allowing you to move through wall
DAngle ang = (pp->GetActor()->spr.Angles.Yaw + sop->clipbox_ang[i]); DAngle ang = (pp->GetActor()->spr.Angles.Yaw + sop->clipbox_ang[i]);
DVector3 spos(pp->GetActor()->getPosWithOffsetZ(), zz); DVector3 spos(pp->GetActor()->spr.pos.XY(), zz);
DVector2 vect = ang.ToVector() * sop->clipbox_vdist[i]; DVector2 vect = ang.ToVector() * sop->clipbox_vdist[i];
Collision coll; Collision coll;
@ -73,7 +73,7 @@ Collision MultiClipMove(DSWPlayer* pp, double zz, double floordist)
min_dist = 0; min_dist = 0;
min_ndx = i; min_ndx = i;
// ox is where it should be // ox is where it should be
opos[i].XY() = pp->GetActor()->getPosWithOffsetZ() + ang.ToVector() * sop->clipbox_vdist[i]; opos[i].XY() = pp->GetActor()->spr.pos.XY() + ang.ToVector() * sop->clipbox_vdist[i];
// spos.x is where it hit // spos.x is where it hit
pos[i].XY() = spos.XY(); pos[i].XY() = spos.XY();
@ -133,7 +133,7 @@ int MultiClipTurn(DSWPlayer* pp, DAngle new_ang, double zz, double floordist)
{ {
DAngle ang = new_ang + sop->clipbox_ang[i]; DAngle ang = new_ang + sop->clipbox_ang[i];
DVector3 spos(pp->GetActor()->getPosWithOffsetZ(), zz); DVector3 spos(pp->GetActor()->spr.pos.XY(), zz);
DVector2 vect = ang.ToVector() * sop->clipbox_vdist[i]; DVector2 vect = ang.ToVector() * sop->clipbox_vdist[i];
Collision coll; Collision coll;

View file

@ -326,7 +326,7 @@ void MorphTornado(SECTOR_OBJECT* sop)
return; return;
// place at correct x,y offset from center // place at correct x,y offset from center
DVector2 pos = sop->pmid - sop->morph_off; DVector2 pos = sop->pmid.XY() - sop->morph_off;
DVector2 spos = pos; DVector2 spos = pos;
// move it from last x,y // move it from last x,y
@ -343,7 +343,7 @@ void MorphTornado(SECTOR_OBJECT* sop)
} }
// save x,y back as offset info // save x,y back as offset info
sop->morph_off = sop->pmid - mpos; sop->morph_off = sop->pmid.XY() - mpos;
if ((RANDOM_P2(1024<<4)>>4) < sop->morph_rand_freq) if ((RANDOM_P2(1024<<4)>>4) < sop->morph_rand_freq)
sop->morph_ang = RandomAngle(); sop->morph_ang = RandomAngle();
@ -399,10 +399,10 @@ void MorphFloor(SECTOR_OBJECT* sop)
auto pos = sop->pmid - sop->morph_off; auto pos = sop->pmid - sop->morph_off;
// move it from last x,y // move it from last x,y
DVector2 mpos = pos + sop->morph_ang.ToVector() * sop->morph_speed; DVector2 mpos = pos.XY() + sop->morph_ang.ToVector() * sop->morph_speed;
// save x,y back as offset info // save x,y back as offset info
sop->morph_off = sop->pmid - mpos; sop->morph_off = sop->pmid.XY() - mpos;
// bound check radius // bound check radius
if ((sop->pmid - mpos).Length() > sop->morph_dist_max) if ((sop->pmid - mpos).Length() > sop->morph_dist_max)
@ -411,8 +411,8 @@ void MorphFloor(SECTOR_OBJECT* sop)
sop->morph_ang = sop->morph_ang + DAngle180; sop->morph_ang = sop->morph_ang + DAngle180;
// back it up and save it off // back it up and save it off
mpos = pos + sop->morph_ang.ToVector() * sop->morph_speed; mpos = pos.XY() + sop->morph_ang.ToVector() * sop->morph_speed;
sop->morph_off = sop->pmid - mpos; sop->morph_off = sop->pmid.XY() - mpos;
} }
if ((RANDOM_P2(1024<<4)>>4) < sop->morph_rand_freq) if ((RANDOM_P2(1024<<4)>>4) < sop->morph_rand_freq)

View file

@ -2239,7 +2239,7 @@ void DriveCrush(DSWPlayer* pp, DVector2* quad)
SWSectIterator it(sop->op_main_sector); SWSectIterator it(sop->op_main_sector);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (testpointinquad(actor->spr.pos, quad)) if (testpointinquad(actor->spr.pos.XY(), quad))
{ {
if ((actor->spr.extra & SPRX_BREAKABLE) && HitBreakSprite(actor, 0)) if ((actor->spr.extra & SPRX_BREAKABLE) && HitBreakSprite(actor, 0))
continue; continue;
@ -2274,7 +2274,7 @@ void DriveCrush(DSWPlayer* pp, DVector2* quad)
SWStatIterator it2(STAT_ENEMY); SWStatIterator it2(STAT_ENEMY);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (testpointinquad(actor->spr.pos, quad)) if (testpointinquad(actor->spr.pos.XY(), quad))
{ {
//if (actor->spr.z < pp->posz) //if (actor->spr.z < pp->posz)
if (actor->spr.pos.Z < sop->crush_z) if (actor->spr.pos.Z < sop->crush_z)
@ -2301,7 +2301,7 @@ void DriveCrush(DSWPlayer* pp, DVector2* quad)
it2.Reset(STAT_DEAD_ACTOR); it2.Reset(STAT_DEAD_ACTOR);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (testpointinquad(actor->spr.pos, quad)) if (testpointinquad(actor->spr.pos.XY(), quad))
{ {
if (actor->spr.pos.Z < sop->crush_z) if (actor->spr.pos.Z < sop->crush_z)
continue; continue;
@ -2323,7 +2323,7 @@ void DriveCrush(DSWPlayer* pp, DVector2* quad)
if (actor->user.PlayerP == pp) if (actor->user.PlayerP == pp)
continue; continue;
if (testpointinquad(actor->spr.pos, quad)) if (testpointinquad(actor->spr.pos.XY(), quad))
{ {
int damage; int damage;
@ -2437,7 +2437,7 @@ void DoPlayerMoveVehicle(DSWPlayer* pp)
if (wal.extra && (wal.extra & (WALLFX_LOOP_OUTER|WALLFX_LOOP_OUTER_SECONDARY)) == WALLFX_LOOP_OUTER) if (wal.extra && (wal.extra & (WALLFX_LOOP_OUTER|WALLFX_LOOP_OUTER_SECONDARY)) == WALLFX_LOOP_OUTER)
{ {
pos[count] = wal.pos; pos[count] = wal.pos;
opos[count] = sop->pmid - sop->orig[wallcount]; opos[count] = sop->pmid.XY() - sop->orig[wallcount];
count++; count++;
} }
@ -2613,7 +2613,7 @@ void DoPlayerMoveTurret(DSWPlayer* pp)
pact->spr.Angles.Yaw = new_ang; pact->spr.Angles.Yaw = new_ang;
} }
OperateSectorObject(pp->sop, pact->spr.Angles.Yaw, pp->sop->pmid); OperateSectorObject(pp->sop, pact->spr.Angles.Yaw, pp->sop->pmid.XY());
if (PLAYER_MOVING(pp) == 0) if (PLAYER_MOVING(pp) == 0)
pp->Flags &= ~(PF_PLAYER_MOVED); pp->Flags &= ~(PF_PLAYER_MOVED);
@ -3626,7 +3626,7 @@ bool PlayerOnLadder(DSWPlayer* pp)
// set players "view" distance from the ladder - needs to be farther than // set players "view" distance from the ladder - needs to be farther than
// the sprite // the sprite
pp->LadderPosition = lActor->spr.pos + npos; pp->LadderPosition = lActor->spr.pos.XY() + npos;
pp->GetActor()->spr.Angles.Yaw = lActor->spr.Angles.Yaw + DAngle180; pp->GetActor()->spr.Angles.Yaw = lActor->spr.Angles.Yaw + DAngle180;
return true; return true;
@ -3975,7 +3975,7 @@ void DoPlayerWarpToUnderwater(DSWPlayer* pp)
auto over = over_act->sector(); auto over = over_act->sector();
auto under = under_act->sector(); auto under = under_act->sector();
if (GetOverlapSector(pp->GetActor()->getPosWithOffsetZ(), &over, &under) == 2) if (GetOverlapSector(pp->GetActor()->spr.pos.XY(), &over, &under) == 2)
{ {
pp->setcursector(under); pp->setcursector(under);
} }
@ -4047,7 +4047,7 @@ void DoPlayerWarpToSurface(DSWPlayer* pp)
auto over = over_act->sector(); auto over = over_act->sector();
auto under = under_act->sector(); auto under = under_act->sector();
if (GetOverlapSector(pp->GetActor()->getPosWithOffsetZ(), &over, &under)) if (GetOverlapSector(pp->GetActor()->spr.pos.XY(), &over, &under))
{ {
pp->setcursector(over); pp->setcursector(over);
} }
@ -4378,7 +4378,7 @@ void DoPlayerDive(DSWPlayer* pp)
auto sect = pp->cursector; auto sect = pp->cursector;
// check for sector above to see if it is an underwater sector also // check for sector above to see if it is an underwater sector also
updatesectorz(DVector3(pp->GetActor()->getPosWithOffsetZ(), pp->cursector->ceilingz - 8), &sect); updatesectorz(DVector3(plActor->spr.pos.XY(), pp->cursector->ceilingz - 8), &sect);
if (!SectorIsUnderwaterArea(sect)) if (!SectorIsUnderwaterArea(sect))
{ {

View file

@ -396,7 +396,7 @@ int DoRotator(DSWActor* actor)
ndx = 0; ndx = 0;
for(auto& wal : actor->sector()->walls) for(auto& wal : actor->sector()->walls)
{ {
auto nxy = rotatepoint(pivot->spr.pos, r->orig[ndx], DAngle::fromBuild(r->pos)); auto nxy = rotatepoint(pivot->spr.pos.XY(), r->orig[ndx], DAngle::fromBuild(r->pos));
dragpoint(&wal, nxy); dragpoint(&wal, nxy);
ndx++; ndx++;

View file

@ -1150,7 +1150,7 @@ bool TestKillSectorObject(SECTOR_OBJECT* sop)
{ {
KillMatchingCrackSprites(sop->match_event); KillMatchingCrackSprites(sop->match_event);
// get new sectnums // get new sectnums
CollapseSectorObject(sop, sop->pmid); CollapseSectorObject(sop, sop->pmid.XY());
DoSpawnSpotsForKill(sop->match_event); DoSpawnSpotsForKill(sop->match_event);
KillSectorObjectSprites(sop); KillSectorObjectSprites(sop);
return true; return true;
@ -1315,7 +1315,7 @@ void DoDeleteSpriteMatch(short match)
if (actor->spr.lotag == match) if (actor->spr.lotag == match)
{ {
found = actor; found = actor;
del = actor->spr.pos; del = actor->spr.pos.XY();
break; break;
} }
} }
@ -1328,7 +1328,7 @@ void DoDeleteSpriteMatch(short match)
it.Reset(StatList[stat]); it.Reset(StatList[stat]);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
if (del == actor->spr.pos) if (del == actor->spr.pos.XY())
{ {
// special case lighting delete of Fade On/off after fades // special case lighting delete of Fade On/off after fades
if (StatList[stat] == STAT_LIGHTING) if (StatList[stat] == STAT_LIGHTING)

View file

@ -6232,7 +6232,7 @@ Collision move_sprite(DSWActor* actor, const DVector3& change, double ceildist,
} }
clipmove(clip_pos, &dasect, change * numtics * 0.125, actor->clipdist, ceildist, flordist, cliptype, retval, 1); clipmove(clip_pos, &dasect, change.XY() * numtics * 0.125, actor->clipdist, ceildist, flordist, cliptype, retval, 1);
actor->spr.pos.XY() = clip_pos.XY(); actor->spr.pos.XY() = clip_pos.XY();
@ -6451,7 +6451,7 @@ Collision move_missile(DSWActor* actor, const DVector3& change, double ceil_dist
} }
clipmove(clip_pos, &dasect, change * numtics * 0.125, actor->clipdist, ceil_dist, flor_dist, cliptype, retval, 1); clipmove(clip_pos, &dasect, change.XY() * numtics * 0.125, actor->clipdist, ceil_dist, flor_dist, cliptype, retval, 1);
actor->spr.pos.XY() = clip_pos.XY(); actor->spr.pos.XY() = clip_pos.XY();
if (dasect == nullptr) if (dasect == nullptr)

View file

@ -599,7 +599,7 @@ void TrackSetup(void)
it.Reset(STAT_TRACK + ndx); it.Reset(STAT_TRACK + ndx);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
dist = Distance((tp + t->NumPoints - 1)->pos, actor->spr.pos); dist = Distance((tp + t->NumPoints - 1)->pos.XY(), actor->spr.pos.XY());
if (dist < low_dist) if (dist < low_dist)
{ {
@ -683,7 +683,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop)
I_Error("SOP bound sprite with hitag %d not found", 500 + (int(sop - SectorObject) * 5)); I_Error("SOP bound sprite with hitag %d not found", 500 + (int(sop - SectorObject) * 5));
} }
DVector2 vlow = BoundActor->spr.pos; DVector2 vlow = BoundActor->spr.pos.XY();
KillActor(BoundActor); KillActor(BoundActor);
@ -692,7 +692,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop)
{ {
I_Error("SOP bound sprite with hitag %d not found", 501 + (int(sop - SectorObject) * 5)); I_Error("SOP bound sprite with hitag %d not found", 501 + (int(sop - SectorObject) * 5));
} }
DVector2 vhigh = BoundActor->spr.pos; DVector2 vhigh = BoundActor->spr.pos.XY();
KillActor(BoundActor); KillActor(BoundActor);
@ -1348,7 +1348,7 @@ void PlaceSectorObjectsOnTracks(void)
// move all walls in sectors // move all walls in sectors
for (auto& wal : sop->sectp[j]->walls) for (auto& wal : sop->sectp[j]->walls)
{ {
sop->orig[sop->num_walls] = sop->pmid - wal.pos; sop->orig[sop->num_walls] = sop->pmid.XY() - wal.pos;
sop->num_walls++; sop->num_walls++;
} }
} }
@ -1367,7 +1367,7 @@ void PlaceSectorObjectsOnTracks(void)
{ {
tpoint = Track[sop->track].TrackPoint; tpoint = Track[sop->track].TrackPoint;
dist = Distance((tpoint + j)->pos, sop->pmid); dist = Distance((tpoint + j)->pos.XY(), sop->pmid.XY());
if (dist < low_dist) if (dist < low_dist)
{ {
@ -1430,7 +1430,7 @@ void PlaceActorsOnTracks(void)
{ {
tpoint = Track[actor->user.track].TrackPoint; tpoint = Track[actor->user.track].TrackPoint;
dist = Distance((tpoint + j)->pos, actor->spr.pos); dist = Distance((tpoint + j)->pos.XY(), actor->spr.pos.XY());
if (dist < low_dist) if (dist < low_dist)
{ {
@ -2655,7 +2655,7 @@ void DoTornadoObject(SECTOR_OBJECT* sop)
} }
TornadoSpin(sop); TornadoSpin(sop);
RefreshPoints(sop, pos - sop->pmid.XY(), true); RefreshPoints(sop, pos.XY() - sop->pmid.XY(), true);
} }
void DoAutoTurretObject(SECTOR_OBJECT* sop) void DoAutoTurretObject(SECTOR_OBJECT* sop)
@ -2744,7 +2744,7 @@ void DoAutoTurretObject(SECTOR_OBJECT* sop)
} }
} }
OperateSectorObjectForTics(sop, sop->ang, sop->pmid, 2*synctics); OperateSectorObjectForTics(sop, sop->ang, sop->pmid.XY(), 2*synctics);
} }
} }

View file

@ -123,7 +123,7 @@ int DoWallMove(DSWActor* actor)
} }
else else
{ {
wal.move(actor->spr.pos + nvec); wal.move(actor->spr.pos.XY() + nvec);
} }
if (shade1) if (shade1)

View file

@ -3571,7 +3571,7 @@ int DoVomit(DSWActor* actor)
{ {
actor->user.Counter = NORM_ANGLE(actor->user.Counter + (30*MISSILEMOVETICS)); actor->user.Counter = NORM_ANGLE(actor->user.Counter + (30*MISSILEMOVETICS));
// notreallypos // notreallypos
auto v = actor->user.pos + mapangle(actor->user.Counter).ToVector() * 12 * REPEAT_SCALE; auto v = actor->user.pos.XY() + mapangle(actor->user.Counter).ToVector() * 12 * REPEAT_SCALE;
actor->spr.scale = v; actor->spr.scale = v;
if (actor->user.Flags & (SPR_JUMPING)) if (actor->user.Flags & (SPR_JUMPING))
{ {
@ -11791,7 +11791,7 @@ int InitEnemyNapalm(DSWActor* actor)
for (i = 0; i < SIZ(mp); i++) for (i = 0; i < SIZ(mp); i++)
{ {
auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL1, s_Napalm, actor->sector(), auto actorNew = SpawnActor(STAT_MISSILE, FIREBALL1, s_Napalm, actor->sector(),
DVector3(actor->spr.pos, ActorZOfTop(actor) + (ActorSizeZ(actor) * 0.25)), actor->spr.Angles.Yaw, NAPALM_VELOCITY); DVector3(actor->spr.pos.XY(), ActorZOfTop(actor) + (ActorSizeZ(actor) * 0.25)), actor->spr.Angles.Yaw, NAPALM_VELOCITY);
actorNew->spr.hitag = LUMINOUS; //Always full brightness actorNew->spr.hitag = LUMINOUS; //Always full brightness
if (i==0) // Only attach sound to first projectile if (i==0) // Only attach sound to first projectile
@ -11893,7 +11893,7 @@ int InitEnemyMirv(DSWActor* actor)
PlaySound(DIGI_MIRVFIRE, actor, v3df_none); PlaySound(DIGI_MIRVFIRE, actor, v3df_none);
auto actorNew = SpawnActor(STAT_MISSILE, MIRV_METEOR, s_Mirv, actor->sector(), auto actorNew = SpawnActor(STAT_MISSILE, MIRV_METEOR, s_Mirv, actor->sector(),
DVector3(actor->spr.pos, ActorZOfTop(actor) + (ActorSizeZ(actor) * 0.25)), actor->spr.Angles.Yaw, MIRV_VELOCITY); DVector3(actor->spr.pos.XY(), ActorZOfTop(actor) + (ActorSizeZ(actor) * 0.25)), actor->spr.Angles.Yaw, MIRV_VELOCITY);
PlaySound(DIGI_MIRVWIZ, actorNew, v3df_follow); PlaySound(DIGI_MIRVWIZ, actorNew, v3df_follow);
@ -13975,7 +13975,7 @@ int InitSerpSlash(DSWActor* actor)
bool WallSpriteInsideSprite(DSWActor* wactor, DSWActor* actor) bool WallSpriteInsideSprite(DSWActor* wactor, DSWActor* actor)
{ {
DVector2 out[2]; DVector2 out[2];
GetWallSpritePosition(&wactor->spr, wactor->spr.pos, out); GetWallSpritePosition(&wactor->spr, wactor->spr.pos.XY(), out);
return IsCloseToLine(actor->spr.pos.XY(), out[0], out[1], actor->clipdist) != EClose::Outside; return IsCloseToLine(actor->spr.pos.XY(), out[0], out[1], actor->clipdist) != EClose::Outside;
} }
@ -16758,7 +16758,7 @@ int InitEnemyFireball(DSWActor* actor)
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
{ {
auto actorNew = SpawnActor(STAT_MISSILE, GORO_FIREBALL, s_Fireball, actor->sector(), auto actorNew = SpawnActor(STAT_MISSILE, GORO_FIREBALL, s_Fireball, actor->sector(),
DVector3(actor->spr.pos, nz), actor->spr.Angles.Yaw, GORO_FIREBALL_VELOCITY); DVector3(actor->spr.pos.XY(), nz), actor->spr.Angles.Yaw, GORO_FIREBALL_VELOCITY);
actorNew->spr.hitag = LUMINOUS; //Always full brightness actorNew->spr.hitag = LUMINOUS; //Always full brightness
actorNew->spr.scale = DVector2(0.3125, 0.3125); actorNew->spr.scale = DVector2(0.3125, 0.3125);
@ -16858,7 +16858,7 @@ bool WarpToUnderwater(DVector3& pos, sectortype** psectu)
spos = overActor->spr.pos.XY() - pos.XY(); spos = overActor->spr.pos.XY() - pos.XY();
// update to the new x y position // update to the new x y position
pos.XY() = underActor->spr.pos - spos; pos.XY() = underActor->spr.pos.XY() - spos;
auto over = overActor->sector(); auto over = overActor->sector();
auto under = underActor->sector(); auto under = underActor->sector();
@ -17001,7 +17001,7 @@ bool SpriteWarpToUnderwater(DSWActor* actor)
auto over = overActor->sector(); auto over = overActor->sector();
auto under = underActor->sector(); auto under = underActor->sector();
if (GetOverlapSector(actor->spr.pos, &over, &under) == 2) if (GetOverlapSector(actor->spr.pos.XY(), &over, &under) == 2)
{ {
ChangeActorSect(actor, under); ChangeActorSect(actor, under);
} }
@ -17077,7 +17077,7 @@ bool SpriteWarpToSurface(DSWActor* actor)
auto over = overActor->sector(); auto over = overActor->sector();
auto under = underActor->sector(); auto under = underActor->sector();
if (GetOverlapSector(actor->spr.pos, &over, &under)) if (GetOverlapSector(actor->spr.pos.XY(), &over, &under))
{ {
ChangeActorSect(actor, over); ChangeActorSect(actor, over);
} }