mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-17 17:41:23 +00:00
- fixed a float/fixed mixup in R_PointOnSideSlow.
This commit is contained in:
parent
9412ce45d6
commit
8f5ac9b73f
5 changed files with 15 additions and 12 deletions
|
@ -1333,7 +1333,7 @@ CCMD(clearnodecache)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
subsector_t *P_PointInSubsector (fixed_t x, fixed_t y)
|
subsector_t *P_PointInSubsector (double x, double y)
|
||||||
{
|
{
|
||||||
node_t *node;
|
node_t *node;
|
||||||
int side;
|
int side;
|
||||||
|
|
|
@ -1791,12 +1791,14 @@ static AActor *RoughBlockCheck (AActor *mo, int index, void *param)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
static int R_PointOnSideSlow(double x, double y, node_t *node)
|
static int R_PointOnSideSlow(double xx, double yy, node_t *node)
|
||||||
{
|
{
|
||||||
// [RH] This might have been faster than two multiplies and an
|
// [RH] This might have been faster than two multiplies and an
|
||||||
// add on a 386/486, but it certainly isn't on anything newer than that.
|
// add on a 386/486, but it certainly isn't on anything newer than that.
|
||||||
fixed_t dx;
|
fixed_t dx;
|
||||||
fixed_t dy;
|
fixed_t dy;
|
||||||
|
fixed_t x = FloatToFixed(xx);
|
||||||
|
fixed_t y = FloatToFixed(yy);
|
||||||
double left;
|
double left;
|
||||||
double right;
|
double right;
|
||||||
|
|
||||||
|
@ -1815,8 +1817,8 @@ static int R_PointOnSideSlow(double x, double y, node_t *node)
|
||||||
return node->dx > 0;
|
return node->dx > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dx = (FloatToFixed(x) - node->x);
|
dx = (x - node->x);
|
||||||
dy = (FloatToFixed(y) - node->y);
|
dy = (y - node->y);
|
||||||
|
|
||||||
// Try to quickly decide by looking at sign bits.
|
// Try to quickly decide by looking at sign bits.
|
||||||
if ((node->dy ^ node->dx ^ dx ^ dy) & 0x80000000)
|
if ((node->dy ^ node->dx ^ dx ^ dy) & 0x80000000)
|
||||||
|
|
11
src/r_defs.h
11
src/r_defs.h
|
@ -1574,20 +1574,17 @@ struct visstyle_t
|
||||||
// not the same as R_PointInSubsector
|
// not the same as R_PointInSubsector
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
subsector_t *P_PointInSubsector(fixed_t x, fixed_t y);
|
subsector_t *P_PointInSubsector(double x, double y);
|
||||||
inline sector_t *P_PointInSector(fixed_t x, fixed_t y)
|
sector_t *P_PointInSector(fixed_t x, fixed_t y) = delete;
|
||||||
{
|
|
||||||
return P_PointInSubsector(x, y)->sector;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline sector_t *P_PointInSector(const DVector2 &pos)
|
inline sector_t *P_PointInSector(const DVector2 &pos)
|
||||||
{
|
{
|
||||||
return P_PointInSubsector(FLOAT2FIXED(pos.X), FLOAT2FIXED(pos.Y))->sector;
|
return P_PointInSubsector(pos.X, pos.Y)->sector;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline sector_t *P_PointInSector(double X, double Y)
|
inline sector_t *P_PointInSector(double X, double Y)
|
||||||
{
|
{
|
||||||
return P_PointInSubsector(FLOAT2FIXED(X), FLOAT2FIXED(Y))->sector;
|
return P_PointInSubsector(X, Y)->sector;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline DVector3 AActor::PosRelative(int portalgroup) const
|
inline DVector3 AActor::PosRelative(int portalgroup) const
|
||||||
|
|
|
@ -55,6 +55,10 @@ inline int R_PointOnSide (fixed_t x, fixed_t y, const node_t *node)
|
||||||
{
|
{
|
||||||
return DMulScale32 (y-node->y, node->dx, node->x-x, node->dy) > 0;
|
return DMulScale32 (y-node->y, node->dx, node->x-x, node->dy) > 0;
|
||||||
}
|
}
|
||||||
|
inline int R_PointOnSide(double x, double y, const node_t *node)
|
||||||
|
{
|
||||||
|
return DMulScale32(FLOAT2FIXED(y) - node->y, node->dx, node->x - FLOAT2FIXED(x), node->dy) > 0;
|
||||||
|
}
|
||||||
inline int R_PointOnSide(const DVector2 &pos, const node_t *node)
|
inline int R_PointOnSide(const DVector2 &pos, const node_t *node)
|
||||||
{
|
{
|
||||||
return DMulScale32(FLOAT2FIXED(pos.Y) - node->y, node->dx, node->x - FLOAT2FIXED(pos.X), node->dy) > 0;
|
return DMulScale32(FLOAT2FIXED(pos.Y) - node->y, node->dx, node->x - FLOAT2FIXED(pos.X), node->dy) > 0;
|
||||||
|
|
|
@ -763,7 +763,7 @@ static void CalcSectorSoundOrg(const sector_t *sec, int channum, fixed_t *x, fix
|
||||||
if (!(i_compatflags & COMPATF_SECTORSOUNDS))
|
if (!(i_compatflags & COMPATF_SECTORSOUNDS))
|
||||||
{
|
{
|
||||||
// Are we inside the sector? If yes, the closest point is the one we're on.
|
// Are we inside the sector? If yes, the closest point is the one we're on.
|
||||||
if (P_PointInSector(*x, *y) == sec)
|
if (P_PointInSector(FIXED2DBL(*x), FIXED2DBL(*y)) == sec)
|
||||||
{
|
{
|
||||||
FVector3 p = players[consoleplayer].camera->SoundPos();
|
FVector3 p = players[consoleplayer].camera->SoundPos();
|
||||||
*x = FLOAT2FIXED(p.X);
|
*x = FLOAT2FIXED(p.X);
|
||||||
|
|
Loading…
Reference in a new issue