mirror of
https://github.com/DrBeef/Raze.git
synced 2025-01-31 21:20:39 +00:00
- TranslateSector cleanup.
This commit is contained in:
parent
c6e8f0bcdb
commit
2afea7c477
1 changed files with 22 additions and 35 deletions
|
@ -828,29 +828,17 @@ void PathSound(sectortype* pSector, int nSound)
|
|||
|
||||
void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVector2& pivot, const DVector2& pt1, DAngle ang1, const DVector2& pt2, DAngle ang2, bool bAllWalls)
|
||||
{
|
||||
int a4 = int(pivot.X * worldtoint);
|
||||
int a5 = int(pivot.Y * worldtoint);
|
||||
int a6 = int(pt1.X * worldtoint);
|
||||
int a7 = int(pt1.Y * worldtoint);
|
||||
int a8 = ang1.Buildang();
|
||||
int a9 = int(pt2.X * worldtoint);
|
||||
int a10 = int(pt2.Y * worldtoint);
|
||||
int a11 = ang2.Buildang();
|
||||
auto pt_w1 = interpolatedvalue(pt1, pt2, wave1);
|
||||
auto pt_w2 = interpolatedvalue(pt1, pt2, wave2);
|
||||
// the angles here may not be normalized before interpolation. Some setups contain multiple rotations!
|
||||
DAngle ptang_w1 = DAngle::fromDeg(interpolatedvalue(ang1.Degrees(), ang2.Degrees(), wave1));
|
||||
DAngle ptang_w2 = DAngle::fromDeg(interpolatedvalue(ang1.Degrees(), ang2.Degrees(), wave2));
|
||||
|
||||
XSECTOR* pXSector = &pSector->xs();
|
||||
int v20 = interpolatedvalue(a6, a9, wave1);
|
||||
int vc = interpolatedvalue(a6, a9, wave2);
|
||||
int v24 = interpolatedvalue(a7, a10, wave1);
|
||||
int v8 = interpolatedvalue(a7, a10, wave2);
|
||||
int v44 = interpolatedvalue(a8, a11, wave1);
|
||||
int ang = interpolatedvalue(a8, a11, wave2);
|
||||
int v14 = ang - v44;
|
||||
|
||||
DVector2 offset = { (vc - a4) * inttoworld, (v8 - a5) * inttoworld };
|
||||
DVector2 aoffset = { (vc) * inttoworld, (v8) * inttoworld };
|
||||
DVector2 position = { (vc - v20) * inttoworld, (v8 - v24) * inttoworld };
|
||||
auto angle = DAngle::fromBuild(ang);
|
||||
auto angleofs = DAngle::fromBuild(v14);
|
||||
DVector2 offset = pt_w2 - pivot;
|
||||
DVector2 position = pt_w2 - pt_w1;
|
||||
auto angleofs = ptang_w2 - ptang_w1;
|
||||
|
||||
auto rotatewall = [=](walltype* wal, DAngle angle, const DVector2& offset)
|
||||
{
|
||||
|
@ -870,7 +858,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
{
|
||||
for (auto& wal : wallsofsector(pSector))
|
||||
{
|
||||
rotatewall(&wal, angle, offset);
|
||||
rotatewall(&wal, ptang_w2, offset);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -880,21 +868,21 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
auto p2Wall = wal.point2Wall();
|
||||
if (wal.cstat & CSTAT_WALL_MOVE_FORWARD)
|
||||
{
|
||||
rotatewall(&wal, angle, offset);
|
||||
rotatewall(&wal, ptang_w2, offset);
|
||||
|
||||
if ((p2Wall->cstat & CSTAT_WALL_MOVE_MASK) == 0)
|
||||
{
|
||||
rotatewall(p2Wall, angle, offset);
|
||||
rotatewall(p2Wall, ptang_w2, offset);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (wal.cstat & CSTAT_WALL_MOVE_BACKWARD)
|
||||
{
|
||||
rotatewall(&wal, -angle, -offset);
|
||||
rotatewall(&wal, -ptang_w2, -offset);
|
||||
|
||||
if ((p2Wall->cstat & CSTAT_WALL_MOVE_MASK) == 0)
|
||||
{
|
||||
rotatewall(p2Wall, -angle, -offset);
|
||||
rotatewall(p2Wall, -ptang_w2, -offset);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -918,9 +906,9 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
|
||||
if (actor->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD)
|
||||
{
|
||||
auto spot = rotatepoint(pivot, actor->basePoint, angle);
|
||||
auto spot = rotatepoint(pivot, actor->basePoint, ptang_w2);
|
||||
viewBackupSpriteLoc(actor);
|
||||
actor->spr.pos.XY() = spot + aoffset - pivot;
|
||||
actor->spr.pos.XY() = spot + pt_w2 - pivot;
|
||||
actor->spr.angle += angleofs;
|
||||
}
|
||||
else if (actor->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE)
|
||||
|
@ -928,9 +916,9 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
// fix Y arg in RotatePoint for reverse (green) moving sprites. (Original Blood bug?)
|
||||
DVector2 pivotDy(pivot.X, gModernMap ? pivot.Y : pivot.X);
|
||||
|
||||
auto spot = rotatepoint(pivotDy, actor->basePoint, angle);
|
||||
auto spot = rotatepoint(pivotDy, actor->basePoint, ptang_w2);
|
||||
viewBackupSpriteLoc(actor);
|
||||
actor->spr.pos.XY() = spot - aoffset + pivot;
|
||||
actor->spr.pos.XY() = spot - pt_w2 + pivot;
|
||||
actor->spr.angle += angleofs;
|
||||
}
|
||||
else if (pXSector->Drag)
|
||||
|
@ -943,8 +931,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
viewBackupSpriteLoc(actor);
|
||||
if (angleofs != nullAngle)
|
||||
{
|
||||
DVector2 mypivot(v20 * inttoworld, v24 * inttoworld);
|
||||
actor->spr.pos.XY() = rotatepoint(mypivot, actor->spr.pos.XY(), angleofs);
|
||||
actor->spr.pos.XY() = rotatepoint(pt_w1, actor->spr.pos.XY(), angleofs);
|
||||
}
|
||||
actor->spr.angle += angleofs;
|
||||
actor->spr.pos += position;
|
||||
|
@ -968,16 +955,16 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
|
||||
if (ac->spr.cstat & CSTAT_SPRITE_MOVE_FORWARD)
|
||||
{
|
||||
auto spot = rotatepoint(pivot, ac->basePoint, angle);
|
||||
auto spot = rotatepoint(pivot, ac->basePoint, ptang_w2);
|
||||
viewBackupSpriteLoc(ac);
|
||||
ac->spr.pos.XY() = spot + aoffset - pivot;
|
||||
ac->spr.pos.XY() = spot + pt_w2 - pivot;
|
||||
ac->spr.angle += angleofs;
|
||||
}
|
||||
else if (ac->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE)
|
||||
{
|
||||
auto spot = rotatepoint(pivot, ac->basePoint, angle);
|
||||
auto spot = rotatepoint(pivot, ac->basePoint, ptang_w2);
|
||||
viewBackupSpriteLoc(ac);
|
||||
ac->spr.pos.XY() = spot - aoffset + pivot;
|
||||
ac->spr.pos.XY() = spot - pt_w2 + pivot;
|
||||
ac->spr.angle += angleofs;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue