Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions source/common/utility/vectors.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ struct TVector2
{
}

constexpr TVector2(std::nullptr_t nul) = delete;

template<typename U>
constexpr explicit operator TVector2<U> () const noexcept {
return TVector2<U>(static_cast<U>(X), static_cast<U>(Y));
Expand Down Expand Up @@ -544,6 +546,12 @@ struct TVector3
return Vector2(X, Y);
}

void SetXY(const Vector2 &v)
{
X = v.X;
Y = v.Y;
}

// Add a 3D vector and a 2D vector.
constexpr friend TVector3 operator+ (const TVector3 &v3, const Vector2 &v2)
{
Expand Down
4 changes: 2 additions & 2 deletions source/core/coreactor.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ class DCoreActor : public DObject

void backupvec2()
{
opos.XY() = spr.pos.XY();
opos.SetXY(spr.pos.XY());
}

void backuppos()
Expand Down Expand Up @@ -139,7 +139,7 @@ class DCoreActor : public DObject

void restorevec2()
{
spr.pos.XY() = opos.XY();
spr.pos.SetXY(opos.XY());
}

void restorepos()
Expand Down
2 changes: 1 addition & 1 deletion source/core/coreplayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class DCorePlayer : public DObject
virtual bool canSlopeTilt() const { return false; }
virtual unsigned getCrouchFlags() const = 0;
virtual double GetMaxInputVel() const = 0;
virtual const DVector2& GetInputVelocity() const { return actor->vel.XY(); }
virtual const DVector2 GetInputVelocity() const { return actor->vel.XY(); }

// Angle prototypes.
void doPitchInput();
Expand Down
4 changes: 2 additions & 2 deletions source/core/gamefuncs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -693,8 +693,8 @@ double checkSectorPlaneHit(sectortype* sec, const DVector3& start, const DVector
double startcz, startfz;
double p3cz, p3fz;

pt1.XY() = wal->pos;
pt2.XY() = wal->point2Wall()->pos;
pt1.SetXY(wal->pos);
pt2.SetXY(wal->point2Wall()->pos);
pt3.X = pt1.X + pt2.Y - pt1.Y;
pt3.Y = pt1.Y + pt2.X - pt1.X; // somewhere off the first line.

Expand Down
4 changes: 2 additions & 2 deletions source/core/rendering/scene/hw_drawinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -316,11 +316,11 @@ void HWDrawInfo::DispatchSprites()

if (actor->sprext.renderflags & SPREXT_AWAY1)
{
tspr->pos.XY() += tspr->Angles.Yaw.ToVector() * 0.125;
tspr->pos += tspr->Angles.Yaw.ToVector() * 0.125;
}
else if (actor->sprext.renderflags & SPREXT_AWAY2)
{
tspr->pos.XY() -= tspr->Angles.Yaw.ToVector() * 0.125;
tspr->pos -= tspr->Angles.Yaw.ToVector() * 0.125;
}

switch (tspr->cstat & CSTAT_SPRITE_ALIGNMENT_MASK)
Expand Down
36 changes: 18 additions & 18 deletions source/games/blood/src/actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2594,7 +2594,7 @@ void actWallBounceVector(DBloodActor* actor, walltype* pWall, double factor)
auto vel = actor->vel.XY();
double t = vel.X * -delta.Y + vel.Y * delta.X;
double t2 = t * (factor+1);
actor->vel.XY() = (vel - DVector2(-delta.Y * t2, delta.X * t2));
actor->vel.SetXY(vel - DVector2(-delta.Y * t2, delta.X * t2));
}

//---------------------------------------------------------------------------
Expand Down Expand Up @@ -2936,7 +2936,7 @@ static bool actKillModernDude(DBloodActor* actor, DAMAGE_TYPE damageType)
actDropObject(actor, actor->xspr.dropMsg);

actor->spr.flags &= ~kPhysMove;
actor->vel.XY().Zero();
actor->vel.SetXY(DVector2(0, 0));

playGenDudeSound(actor, kGenDudeSndTransforming);
int seqId = actor->xspr.data2 + kGenDudeSeqTransform;
Expand Down Expand Up @@ -4137,7 +4137,7 @@ static void checkCeilHit(DBloodActor* actor)
if ((actor2->spr.statnum == kStatThing || actor2->spr.statnum == kStatDude) && !actor->vel.isZero())
{
auto adelta = actor2->spr.pos - actor->spr.pos;
actor2->vel.XY() += adelta.XY() * (1. / SLOPEVAL_FACTOR);
actor2->vel += adelta.XY() * (1. / SLOPEVAL_FACTOR);

if (actor2->spr.statnum == kStatThing)
{
Expand Down Expand Up @@ -4583,7 +4583,7 @@ static Collision MoveThing(DBloodActor* actor)
actor->spr.flags |= 4;

auto vec4 = actFloorBounceVector(actor, veldiff, actor->sector(), FixedToFloat(pThingInfo->elastic));
actor->vel.XY() = vec4.XY();
actor->vel.SetXY(vec4.XY());
int vax = FloatToFixed(vec4.W);

int nDamage = MulScale(vax, vax, 30) - pThingInfo->dmgResist;
Expand Down Expand Up @@ -4636,7 +4636,7 @@ static Collision MoveThing(DBloodActor* actor)
actor->spr.pos.Z += max(ceilZ - top, 0.);
if (actor->vel.Z < 0)
{
actor->vel.XY() *= 0.75;
actor->vel.SetXY(actor->vel.XY() * 0.75);
actor->vel.Z *= -0.25;

switch (actor->spr.type)
Expand Down Expand Up @@ -4669,13 +4669,13 @@ static Collision MoveThing(DBloodActor* actor)
auto hitActor = coll.actor();
if ((hitActor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_FACING)
{
actor->vel.XY() += (actor->spr.pos.XY() - hitActor->spr.pos.XY()) / SLOPEVAL_FACTOR;
actor->vel += (actor->spr.pos.XY() - hitActor->spr.pos.XY()) / SLOPEVAL_FACTOR;
lhit = actor->hit.hit;
}
}
if (nVel > 0)
{
actor->vel.XY() -= actor->vel.XY() * nVelClipped / nVel;
actor->vel -= actor->vel.XY() * nVelClipped / nVel;
}
}
if (actor->vel.X != 0 || actor->vel.Y != 0)
Expand Down Expand Up @@ -5057,7 +5057,7 @@ void MoveDude(DBloodActor* actor)
if (veldiff > 0)
{
auto vec4 = actFloorBounceVector(actor, veldiff, actor->sector(), 0);
actor->vel.XY() = vec4.XY();
actor->vel.SetXY(vec4.XY());
int vax = FloatToFixed(vec4.W);

int nDamage = MulScale(vax, vax, 30);
Expand Down Expand Up @@ -5139,7 +5139,7 @@ void MoveDude(DBloodActor* actor)
auto hitAct = floorColl.actor();
if ((hitAct->spr.cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == CSTAT_SPRITE_ALIGNMENT_FACING)
{
actor->vel.XY() += (actor->spr.pos - hitAct->spr.pos).XY() * (1. / SLOPEVAL_FACTOR);
actor->vel += (actor->spr.pos - hitAct->spr.pos).XY() * (1. / SLOPEVAL_FACTOR);
return;
}
}
Expand All @@ -5157,7 +5157,7 @@ void MoveDude(DBloodActor* actor)

if (actor->vel.XY().Length() < 0.0625)
{
actor->vel.XY().Zero();
actor->vel.SetXY(DVector2(0, 0));
}
}
}
Expand Down Expand Up @@ -5191,7 +5191,7 @@ int MoveMissile(DBloodActor* actor)
if (target->spr.statnum == kStatDude && target->hasX() && target->xspr.health > 0)
{
double vel = missileInfo[actor->spr.type - kMissileBase].fVelocity();
actor->vel.XY() = DVector2(vel, 0).Rotated((target->spr.pos - actor->spr.pos).Angle());
actor->vel.SetXY(DVector2(vel, 0).Rotated((target->spr.pos - actor->spr.pos).Angle()));

double deltaz = (target->spr.pos.Z - actor->spr.pos.Z) / (10 * 256);

Expand Down Expand Up @@ -5265,7 +5265,7 @@ int MoveMissile(DBloodActor* actor)
if (cliptype >= 0 && cliptype != 3)
{
double nVel = actor->vel.XY().Length();
ppos.XY() -= actor->vel.XY() / nVel;
ppos -= actor->vel.XY() / nVel;
vel.Z -= actor->vel.Z / nVel;
updatesector(ppos, &pSector);
pSector2 = pSector;
Expand Down Expand Up @@ -5945,7 +5945,7 @@ static void actCheckDudes()
// handle incarnations of custom dude
if (actor->spr.type == kDudeModernCustom && actor->xspr.txID > 0 && actor->xspr.sysData1 == kGenDudeTransformStatus)
{
actor->vel.XY().Zero();
actor->vel.SetXY(DVector2(0, 0));
if (seqGetStatus(actor) < 0) genDudeTransform(actor);
}
#endif
Expand Down Expand Up @@ -6088,7 +6088,7 @@ void actCheckFlares()
if (target->hasX() && target->xspr.health > 0)
{
DVector3 pos = target->spr.pos;
pos.XY() += (actor->xspr.goalAng + target->spr.Angles.Yaw).ToVector() * target->clipdist * 0.5;
pos += (actor->xspr.goalAng + target->spr.Angles.Yaw).ToVector() * target->clipdist * 0.5;
pos.Z += actor->xspr.TargetPos.Z;
SetActor(actor, pos);
actor->vel = target->vel;
Expand Down Expand Up @@ -6183,7 +6183,7 @@ DBloodActor* actSpawnDude(DBloodActor* source, int nType, double dist)

if (dist >= 0)
{
pos.XY() += angle.ToVector() * dist;
pos += angle.ToVector() * dist;
}
spawned->spr.type = nType;
if (!VanillaMode())
Expand Down Expand Up @@ -6340,7 +6340,7 @@ DBloodActor* actFireThing(DBloodActor* actor, double xyoff, double zoff, double

if (HitScan(actor, vect.Z, DVector3(vect.XY() - actor->spr.pos.XY(), 0), CLIPMASK0, actor->clipdist * 0.25) != -1)
{
vect.XY() = gHitInfo.hitpos.XY() - actor->spr.Angles.Yaw.ToVector() * actor->clipdist * 2;
vect.SetXY(gHitInfo.hitpos.XY() - actor->spr.Angles.Yaw.ToVector() * actor->clipdist * 2);
}
auto fired = actSpawnThing(actor->sector(), vect, thingType);
fired->SetOwner(actor);
Expand Down Expand Up @@ -6453,11 +6453,11 @@ DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, DVect
if (hit == 3 || hit == 0)
{
impact = true;
vect.XY() = gHitInfo.hitpos.XY() - actor->spr.Angles.Yaw.ToVector() * 1;
vect.SetXY(gHitInfo.hitpos.XY() - actor->spr.Angles.Yaw.ToVector() * 1);
}
else
{
vect.XY() = gHitInfo.hitpos.XY() - actor->spr.Angles.Yaw.ToVector() * pMissileInfo->fClipDist() * 2;
vect.SetXY(gHitInfo.hitpos.XY() - actor->spr.Angles.Yaw.ToVector() * pMissileInfo->fClipDist() * 2);
}
}
auto spawned = actSpawnSprite(actor->sector(), vect, 5, 1);
Expand Down
4 changes: 2 additions & 2 deletions source/games/blood/src/ai.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ bool CanMove(DBloodActor* actor, DBloodActor* target, DAngle nAngle, double nRan
return false;
return true;
}
pos.XY() += nRange / 16 * nAngVect; // see above - same weird mixup.
pos += nRange / 16 * nAngVect; // see above - same weird mixup.
auto pSector = actor->sector();
assert(pSector);
auto ps2 = pSector;
Expand Down Expand Up @@ -300,7 +300,7 @@ void aiMoveForward(DBloodActor* actor)
actor->spr.Angles.Yaw += clamp(nAng, -nTurnRange, nTurnRange);
if (abs(nAng) > DAngle60)
return;
actor->vel.XY() += actor->spr.Angles.Yaw.ToVector() * pDudeInfo->FrontSpeed();
actor->vel += actor->spr.Angles.Yaw.ToVector() * pDudeInfo->FrontSpeed();
}

//---------------------------------------------------------------------------
Expand Down
11 changes: 6 additions & 5 deletions source/games/blood/src/aibeast.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,11 @@ void SlashSeqCallback(int, DBloodActor* actor)
{
if (!actor->ValidateTarget(__FUNCTION__)) return;
auto target = actor->GetTarget();
DVector3 dv;
dv.XY() = actor->spr.Angles.Yaw.ToVector();
// Correct ?
dv.Z = (actor->spr.pos.Z - target->spr.pos.Z) / 64;
DVector3 dv(
actor->spr.Angles.Yaw.ToVector(),
// Correct ?
(actor->spr.pos.Z - target->spr.pos.Z) / 64
);

dv.X += Random3(4000 - 700 * gGameOptions.nDifficulty) / 16384.;
dv.Y += Random3(4000 - 700 * gGameOptions.nDifficulty) / 16384.;
Expand Down Expand Up @@ -400,7 +401,7 @@ static void beastMoveForward(DBloodActor* actor)
double nDist = dvec.Length();
if (nDist <= 0x40 && Random(64) < 32)
return;
actor->vel.XY() += actor->spr.Angles.Yaw.ToVector() * pDudeInfo->FrontSpeed();
actor->vel += actor->spr.Angles.Yaw.ToVector() * pDudeInfo->FrontSpeed();
}

static void sub_628A0(DBloodActor* actor)
Expand Down
17 changes: 8 additions & 9 deletions source/games/blood/src/aicerber.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,10 @@ void cerberusBiteSeqCallback(int, DBloodActor* actor)
if (!actor->ValidateTarget(__FUNCTION__)) return;
auto target = actor->GetTarget();

DVector3 vec;
vec.XY() = actor->spr.Angles.Yaw.ToVector() * 64;
vec.Z = target->spr.pos.Z - actor->spr.pos.Z;
DVector3 vec(
actor->spr.Angles.Yaw.ToVector() * 64,
target->spr.pos.Z - actor->spr.pos.Z
);
actFireVector(actor, Cerberus_XYOff, -Cerberus_ZOff, vec, kVectorCerberusHack);
actFireVector(actor, -Cerberus_XYOff, 0, vec, kVectorCerberusHack);
actFireVector(actor, 0, 0, vec, kVectorCerberusHack);
Expand Down Expand Up @@ -99,7 +100,7 @@ void cerberusBurnSeqCallback(int, DBloodActor* actor)
pos2 += actor->vel * nDist * (65536. / 0x1aaaaa);

DVector3 tvec = pos;
tvec.XY() += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec.Z += actor->dudeSlope * nDist;
double tsr = nDist * 9.23828125;
double top, bottom;
Expand All @@ -117,8 +118,7 @@ void cerberusBurnSeqCallback(int, DBloodActor* actor)
if (cansee(pos, actor->sector(), pos2, actor2->sector()))
{
nClosest = nDist2;
Aim.XY() = nAngle.ToVector();
Aim.Z = tz1 / nDist;
Aim = DVector3(nAngle.ToVector(), tz1 / nDist);
}
else
Aim.Z = tz1 / 64.;
Expand Down Expand Up @@ -164,7 +164,7 @@ void cerberusBurnSeqCallback2(int, DBloodActor* actor)
pos2 += actor->vel * nDist * (65536. / 0x1aaaaa);

DVector3 tvec = pos;
tvec.XY() += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec.Z += actor->dudeSlope * nDist;

double tsr = nDist * 9.23828125;
Expand All @@ -187,8 +187,7 @@ void cerberusBurnSeqCallback2(int, DBloodActor* actor)
if (cansee(pos, actor->sector(), pos2, actor2->sector()))
{
nClosest = nDist2;
Aim.XY() = nAngle.ToVector();
Aim.Z = tz1 / nDist;
Aim = DVector3(nAngle.ToVector(), tz1 / nDist);
}
else
Aim.Z = tz1 / 64.;
Expand Down
5 changes: 2 additions & 3 deletions source/games/blood/src/aigarg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void BlastSSeqCallback(int, DBloodActor* actor)
pos2 += actor->vel * nDist * (65536. / 0x1aaaaa);

DVector3 tvec = pos;
tvec.XY() += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec.Z += actor->dudeSlope * nDist;

double tsr = nDist * 9.23828125;
Expand All @@ -145,8 +145,7 @@ void BlastSSeqCallback(int, DBloodActor* actor)
if (cansee(pos, actor->sector(), pos2, actor2->sector()))
{
nClosest = nDist2;
Aim.XY() = nAngle.ToVector();
Aim.Z = tz1 / nDist;
Aim = DVector3(nAngle.ToVector(), tz1 / nDist);

// This does not make any sense...
if (tz1 < -3.2 && tz1 > -48)
Expand Down
5 changes: 2 additions & 3 deletions source/games/blood/src/aighost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ void ghostBlastSeqCallback(int, DBloodActor* actor)
pos2 += actor->vel * nDist * (65536. / 0x1aaaaa);

DVector3 tvec = pos;
tvec.XY() += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec += actor->spr.Angles.Yaw.ToVector() * nDist;
tvec.Z += actor->dudeSlope * nDist;

double tsr = nDist * 9.23828125;
Expand All @@ -132,8 +132,7 @@ void ghostBlastSeqCallback(int, DBloodActor* actor)
if (cansee(pos, actor->sector(), pos2, actor2->sector()))
{
nClosest = nDist2;
Aim.XY() = nAngle.ToVector();
Aim.Z = tz1 / nDist;
Aim = DVector3(nAngle.ToVector(), tz1 / nDist);

// This does not make any sense...
if (tz1 < -3.2 && tz1 > -48)
Expand Down
Loading