mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-16 01:11:44 +00:00
- eliminated actFloorBounceVector wrapper
This commit is contained in:
parent
9f235b56f3
commit
92532bb007
1 changed files with 13 additions and 19 deletions
|
@ -2606,17 +2606,18 @@ int actWallBounceVector(int* x, int* y, walltype* pWall, int a4)
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
int actFloorBounceVector(int* x, int* y, int* z, sectortype* pSector, int a5)
|
DVector4 actFloorBounceVector(DBloodActor* actor, double oldz, sectortype* pSector, double factor)
|
||||||
{
|
{
|
||||||
int t = 0x10000 - a5;
|
DVector4 retval;
|
||||||
|
double t = 1. - factor;
|
||||||
if (pSector->floorheinum == 0)
|
if (pSector->floorheinum == 0)
|
||||||
{
|
{
|
||||||
int t2 = MulScale(*z, t, 16);
|
double t2 = oldz * t;
|
||||||
*z = -(*z - t2);
|
return { actor->fVel().X, actor->fVel().Y, oldz - t2, t2};
|
||||||
return t2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
walltype* pWall = pSector->firstWall();
|
walltype* pWall = pSector->firstWall();
|
||||||
|
auto p = actor->int_vel();
|
||||||
int angle = getangle(pWall->delta()) + 512;
|
int angle = getangle(pWall->delta()) + 512;
|
||||||
int t2 = pSector->floorheinum << 4;
|
int t2 = pSector->floorheinum << 4;
|
||||||
int t3 = approxDist(-0x10000, t2);
|
int t3 = approxDist(-0x10000, t2);
|
||||||
|
@ -2624,20 +2625,13 @@ int actFloorBounceVector(int* x, int* y, int* z, sectortype* pSector, int a5)
|
||||||
int t5 = DivScale(t2, t3, 16);
|
int t5 = DivScale(t2, t3, 16);
|
||||||
int t6 = MulScale(t5, Cos(angle), 30);
|
int t6 = MulScale(t5, Cos(angle), 30);
|
||||||
int t7 = MulScale(t5, Sin(angle), 30);
|
int t7 = MulScale(t5, Sin(angle), 30);
|
||||||
int t8 = TMulScale(*x, t6, *y, t7, *z, t4, 16);
|
int t8 = TMulScale(p.X, t6, p.Y, t7, oldz, t4, 16);
|
||||||
int t9 = MulScale(t8, 0x10000 + a5, 16);
|
int t9 = MulScale(t8, 0x10000 + FloatToFixed(factor), 16);
|
||||||
*x -= MulScale(t6, t9, 16);
|
retval.X = FixedToFloat(p.X - MulScale(t6, t9, 16));
|
||||||
*y -= MulScale(t7, t9, 16);
|
retval.Y = FixedToFloat(p.Y - MulScale(t7, t9, 16));
|
||||||
*z -= MulScale(t4, t9, 16);
|
retval.Z = FixedToFloat(oldz - MulScale(t4, t9, 16));
|
||||||
return mulscale16r(t8, t);
|
retval.W = FixedToFloat(t8 * t);
|
||||||
}
|
return retval;
|
||||||
|
|
||||||
DVector4 actFloorBounceVector(DBloodActor* actor, double oldz, sectortype* pSector, double factor)
|
|
||||||
{
|
|
||||||
int ioldz = FloatToFixed(oldz);
|
|
||||||
auto vel = actor->int_vel();
|
|
||||||
int v4 = actFloorBounceVector(&vel.X, &vel.Y, &ioldz, pSector, FloatToFixed(factor));
|
|
||||||
return { FixedToFloat(vel.X), FixedToFloat(vel.Y), FixedToFloat(ioldz), FixedToFloat(v4) };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue