mirror of
https://github.com/DrBeef/Raze.git
synced 2025-01-19 07:31:03 +00:00
- converted all dist() calls to vector math and deleted the utilities
This commit is contained in:
parent
2bcc552ce0
commit
0432930e5b
8 changed files with 30 additions and 61 deletions
|
@ -62,22 +62,3 @@ double fFindDistance2D(int x, int y)
|
||||||
|
|
||||||
return (x - (x * (1. / 32.)) - (x * (1. / 128.)) + (t * (1. / 4.)) + (t * (1. / 64.)));
|
return (x - (x * (1. / 32.)) - (x * (1. / 128.)) + (t * (1. / 4.)) + (t * (1. / 64.)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int FindDistance3D(int x, int y, int z)
|
|
||||||
{
|
|
||||||
x= abs(x); /* absolute values */
|
|
||||||
y= abs(y);
|
|
||||||
z= abs(z >> 4);
|
|
||||||
|
|
||||||
if (x<y)
|
|
||||||
std::swap(x,y);
|
|
||||||
|
|
||||||
if (x<z)
|
|
||||||
std::swap(x,z);
|
|
||||||
|
|
||||||
int t = y + z;
|
|
||||||
|
|
||||||
return (x - (x>>4) + (t>>2) + (t>>3));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,8 @@
|
||||||
|
|
||||||
int FindDistance2D(int x, int y);
|
int FindDistance2D(int x, int y);
|
||||||
double fFindDistance2D(int x, int y);
|
double fFindDistance2D(int x, int y);
|
||||||
int FindDistance3D(int x, int y, int z);
|
|
||||||
|
|
||||||
inline int FindDistance3D(const vec3_t& vec)
|
|
||||||
{
|
|
||||||
return FindDistance3D(vec.X, vec.Y, vec.Z);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline int FindDistance2D(const vec2_t& vec)
|
inline int FindDistance2D(const vec2_t& vec)
|
||||||
{
|
{
|
||||||
return FindDistance2D(vec.X, vec.Y);
|
return FindDistance2D(vec.X, vec.Y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -525,7 +525,6 @@ void moveplayers(void)
|
||||||
void movefx(void)
|
void movefx(void)
|
||||||
{
|
{
|
||||||
int p;
|
int p;
|
||||||
int x, ht;
|
|
||||||
|
|
||||||
DukeStatIterator iti(STAT_FX);
|
DukeStatIterator iti(STAT_FX);
|
||||||
while (auto act = iti.Next())
|
while (auto act = iti.Next())
|
||||||
|
@ -550,8 +549,8 @@ void movefx(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MUSICANDSFX:
|
case MUSICANDSFX:
|
||||||
|
{
|
||||||
ht = act->spr.hitag;
|
double maxdist = act->spr.hitag * inttoworld;
|
||||||
|
|
||||||
if (act->temp_data[1] != (int)SoundEnabled())
|
if (act->temp_data[1] != (int)SoundEnabled())
|
||||||
{
|
{
|
||||||
|
@ -561,13 +560,13 @@ void movefx(void)
|
||||||
|
|
||||||
if (act->spr.lotag >= 1000 && act->spr.lotag < 2000)
|
if (act->spr.lotag >= 1000 && act->spr.lotag < 2000)
|
||||||
{
|
{
|
||||||
x = ldist(ps[screenpeek].GetActor(), act);
|
double dist = (ps[screenpeek].GetActor()->spr.pos.XY() - act->spr.pos.XY()).Length();
|
||||||
if (x < ht && act->temp_data[0] == 0)
|
if (dist < maxdist && act->temp_data[0] == 0)
|
||||||
{
|
{
|
||||||
FX_SetReverb(act->spr.lotag - 1100);
|
FX_SetReverb(act->spr.lotag - 1100);
|
||||||
act->temp_data[0] = 1;
|
act->temp_data[0] = 1;
|
||||||
}
|
}
|
||||||
if (x >= ht && act->temp_data[0] == 1)
|
if (dist >= maxdist && act->temp_data[0] == 1)
|
||||||
{
|
{
|
||||||
FX_SetReverb(0);
|
FX_SetReverb(0);
|
||||||
FX_SetReverbDelay(0);
|
FX_SetReverbDelay(0);
|
||||||
|
@ -579,15 +578,15 @@ void movefx(void)
|
||||||
int flags = S_GetUserFlags(act->spr.lotag);
|
int flags = S_GetUserFlags(act->spr.lotag);
|
||||||
if (flags & SF_MSFX)
|
if (flags & SF_MSFX)
|
||||||
{
|
{
|
||||||
int distance = dist(ps[screenpeek].GetActor(), act);
|
double distance = (ps[screenpeek].GetActor()->spr.pos - act->spr.pos).Length();
|
||||||
|
|
||||||
if (distance < ht && act->temp_data[0] == 0)
|
if (distance < maxdist && act->temp_data[0] == 0)
|
||||||
{
|
{
|
||||||
// Start playing an ambience sound.
|
// Start playing an ambience sound.
|
||||||
S_PlayActorSound(act->spr.lotag, act, CHAN_AUTO, CHANF_LOOP);
|
S_PlayActorSound(act->spr.lotag, act, CHAN_AUTO, CHANF_LOOP);
|
||||||
act->temp_data[0] = 1; // AMBIENT_SFX_PLAYING
|
act->temp_data[0] = 1; // AMBIENT_SFX_PLAYING
|
||||||
}
|
}
|
||||||
else if (distance >= ht && act->temp_data[0] == 1)
|
else if (distance >= maxdist && act->temp_data[0] == 1)
|
||||||
{
|
{
|
||||||
// Stop playing ambience sound because we're out of its range.
|
// Stop playing ambience sound because we're out of its range.
|
||||||
S_StopSound(act->spr.lotag, act);
|
S_StopSound(act->spr.lotag, act);
|
||||||
|
@ -606,6 +605,7 @@ void movefx(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,6 +259,7 @@ bool ifsquished(DDukeActor* actor, int p)
|
||||||
|
|
||||||
void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int hp4)
|
void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int hp4)
|
||||||
{
|
{
|
||||||
|
double radius = r * inttoworld;
|
||||||
static const uint8_t statlist[] = { STAT_DEFAULT, STAT_ACTOR, STAT_STANDABLE, STAT_PLAYER, STAT_FALLER, STAT_ZOMBIEACTOR, STAT_MISC };
|
static const uint8_t statlist[] = { STAT_DEFAULT, STAT_ACTOR, STAT_STANDABLE, STAT_PLAYER, STAT_FALLER, STAT_ZOMBIEACTOR, STAT_MISC };
|
||||||
|
|
||||||
if(actor->spr.picnum != SHRINKSPARK && !(actor->spr.picnum == RPG && actor->spr.xrepeat < 11))
|
if(actor->spr.picnum != SHRINKSPARK && !(actor->spr.picnum == RPG && actor->spr.xrepeat < 11))
|
||||||
|
@ -326,7 +327,7 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h
|
||||||
if (x == 0 || x >= 5 || actorflag(act2, SFLAG_HITRADIUS_FLAG1))
|
if (x == 0 || x >= 5 || actorflag(act2, SFLAG_HITRADIUS_FLAG1))
|
||||||
{
|
{
|
||||||
if (actor->spr.picnum != SHRINKSPARK || (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
|
if (actor->spr.picnum != SHRINKSPARK || (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL))
|
||||||
if (dist(actor, act2) < r)
|
if ((actor->spr.pos - act2->spr.pos).Length() < radius)
|
||||||
{
|
{
|
||||||
if (badguy(act2) && !cansee(act2->spr.pos.plusZ(q), act2->sector(), actor->spr.pos.plusZ(q), actor->sector()))
|
if (badguy(act2) && !cansee(act2->spr.pos.plusZ(q), act2->sector(), actor->spr.pos.plusZ(q), actor->sector()))
|
||||||
continue;
|
continue;
|
||||||
|
@ -345,10 +346,10 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h
|
||||||
}
|
}
|
||||||
|
|
||||||
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z -= gs.playerheight;
|
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z -= gs.playerheight;
|
||||||
int d = dist(actor, act2);
|
double dist = (actor->spr.pos - act2->spr.pos).Length();
|
||||||
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z += gs.playerheight;
|
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z += gs.playerheight;
|
||||||
|
|
||||||
if (d < r && cansee(act2->spr.pos.plusZ(-8), act2->sector(), actor->spr.pos.plusZ(-12), actor->sector()))
|
if (dist < radius && cansee(act2->spr.pos.plusZ(-8), act2->sector(), actor->spr.pos.plusZ(-12), actor->sector()))
|
||||||
{
|
{
|
||||||
act2->hitang = VecToAngle(act2->spr.pos - actor->spr.pos);
|
act2->hitang = VecToAngle(act2->spr.pos - actor->spr.pos);
|
||||||
|
|
||||||
|
@ -377,17 +378,17 @@ void hitradius_d(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h
|
||||||
|
|
||||||
if (actor->spr.picnum != SHRINKSPARK && (!isWorldTour() || actor->spr.picnum != LAVAPOOL))
|
if (actor->spr.picnum != SHRINKSPARK && (!isWorldTour() || actor->spr.picnum != LAVAPOOL))
|
||||||
{
|
{
|
||||||
if (d < r / 3)
|
if (dist < radius / 3)
|
||||||
{
|
{
|
||||||
if (hp4 == hp3) hp4++;
|
if (hp4 == hp3) hp4++;
|
||||||
act2->hitextra = hp3 + (krand() % (hp4 - hp3));
|
act2->hitextra = hp3 + (krand() % (hp4 - hp3));
|
||||||
}
|
}
|
||||||
else if (d < 2 * r / 3)
|
else if (dist < 2 * radius / 3)
|
||||||
{
|
{
|
||||||
if (hp3 == hp2) hp3++;
|
if (hp3 == hp2) hp3++;
|
||||||
act2->hitextra = hp2 + (krand() % (hp3 - hp2));
|
act2->hitextra = hp2 + (krand() % (hp3 - hp2));
|
||||||
}
|
}
|
||||||
else if (d < r)
|
else if (dist < radius)
|
||||||
{
|
{
|
||||||
if (hp2 == hp1) hp2++;
|
if (hp2 == hp1) hp2++;
|
||||||
act2->hitextra = hp1 + (krand() % (hp2 - hp1));
|
act2->hitextra = hp1 + (krand() % (hp2 - hp1));
|
||||||
|
@ -1043,14 +1044,14 @@ static void movefireext(DDukeActor* actor)
|
||||||
|
|
||||||
static void moveviewscreen(DDukeActor* actor)
|
static void moveviewscreen(DDukeActor* actor)
|
||||||
{
|
{
|
||||||
const int VIEWSCR_DIST = 8192; // was originally 2048, was increased to this by EDuke32 and RedNukem.
|
const double VIEWSCR_DIST = 1024; // was originally 2048, was increased to 8192 by EDuke32 and RedNukem, but with high resolutions the resulting 512 map units are still too low.
|
||||||
if (actor->spr.xrepeat == 0) deletesprite(actor);
|
if (actor->spr.xrepeat == 0) deletesprite(actor);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int x;
|
double a;
|
||||||
int p = findplayer(actor, &x);
|
int p = findplayer(actor, &a);
|
||||||
|
|
||||||
x = dist(actor, ps[p].GetActor()); // the result from findplayer is not really useful.
|
double x = (actor->spr.pos - ps[p].GetActor()->spr.pos).Length(); // the result from findplayer is not really useful.
|
||||||
if (x >= VIEWSCR_DIST && camsprite == actor)
|
if (x >= VIEWSCR_DIST && camsprite == actor)
|
||||||
{
|
{
|
||||||
camsprite = nullptr;
|
camsprite = nullptr;
|
||||||
|
|
|
@ -217,6 +217,7 @@ void addweapon_r(player_struct* p, int weapon)
|
||||||
|
|
||||||
void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int hp4)
|
void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int hp4)
|
||||||
{
|
{
|
||||||
|
double radius = r * inttoworld;
|
||||||
static const uint8_t statlist[] = { STAT_DEFAULT, STAT_ACTOR, STAT_STANDABLE, STAT_PLAYER, STAT_FALLER, STAT_ZOMBIEACTOR, STAT_MISC };
|
static const uint8_t statlist[] = { STAT_DEFAULT, STAT_ACTOR, STAT_STANDABLE, STAT_PLAYER, STAT_FALLER, STAT_ZOMBIEACTOR, STAT_MISC };
|
||||||
|
|
||||||
if (actor->spr.xrepeat >= 11 || !(actor->spr.picnum == RPG || ((isRRRA()) && actor->spr.picnum == RPG2)))
|
if (actor->spr.xrepeat >= 11 || !(actor->spr.picnum == RPG || ((isRRRA()) && actor->spr.picnum == RPG2)))
|
||||||
|
@ -271,7 +272,7 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h
|
||||||
if (x == 0 || x >= 5 || actorflag(act2, SFLAG_HITRADIUS_FLAG1))
|
if (x == 0 || x >= 5 || actorflag(act2, SFLAG_HITRADIUS_FLAG1))
|
||||||
{
|
{
|
||||||
if (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL)
|
if (act2->spr.cstat & CSTAT_SPRITE_BLOCK_ALL)
|
||||||
if (dist(actor, act2) < r)
|
if ((actor->spr.pos - act2->spr.pos).Length() < radius)
|
||||||
{
|
{
|
||||||
if (badguy(act2) && !cansee(act2->spr.pos.plusZ(q), act2->sector(), actor->spr.pos.plusZ(q), actor->sector()))
|
if (badguy(act2) && !cansee(act2->spr.pos.plusZ(q), act2->sector(), actor->spr.pos.plusZ(q), actor->sector()))
|
||||||
continue;
|
continue;
|
||||||
|
@ -291,10 +292,10 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h
|
||||||
}
|
}
|
||||||
|
|
||||||
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z -= gs.playerheight;
|
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z -= gs.playerheight;
|
||||||
int d = dist(actor, act2);
|
double dist = (actor->spr.pos - act2->spr.pos).Length();
|
||||||
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z += gs.playerheight;
|
if (act2->spr.picnum == APLAYER) act2->spr.pos.Z += gs.playerheight;
|
||||||
|
|
||||||
if (d < r && cansee(act2->spr.pos.plusZ(-8), act2->sector(), actor->spr.pos.plusZ(-12), actor->sector()))
|
if (dist < radius && cansee(act2->spr.pos.plusZ(-8), act2->sector(), actor->spr.pos.plusZ(-12), actor->sector()))
|
||||||
{
|
{
|
||||||
if ((isRRRA()) && act2->spr.picnum == MINION && act2->spr.pal == 19)
|
if ((isRRRA()) && act2->spr.picnum == MINION && act2->spr.pal == 19)
|
||||||
{
|
{
|
||||||
|
@ -310,17 +311,17 @@ void hitradius_r(DDukeActor* actor, int r, int hp1, int hp2, int hp3, int h
|
||||||
else
|
else
|
||||||
act2->attackertype = RADIUSEXPLOSION;
|
act2->attackertype = RADIUSEXPLOSION;
|
||||||
|
|
||||||
if (d < r / 3)
|
if (dist < radius / 3)
|
||||||
{
|
{
|
||||||
if (hp4 == hp3) hp4++;
|
if (hp4 == hp3) hp4++;
|
||||||
act2->hitextra = hp3 + (krand() % (hp4 - hp3));
|
act2->hitextra = hp3 + (krand() % (hp4 - hp3));
|
||||||
}
|
}
|
||||||
else if (d < 2 * r / 3)
|
else if (dist < 2 * radius / 3)
|
||||||
{
|
{
|
||||||
if (hp3 == hp2) hp3++;
|
if (hp3 == hp2) hp3++;
|
||||||
act2->hitextra = hp2 + (krand() % (hp3 - hp2));
|
act2->hitextra = hp2 + (krand() % (hp3 - hp2));
|
||||||
}
|
}
|
||||||
else if (d < r)
|
else if (dist < radius)
|
||||||
{
|
{
|
||||||
if (hp2 == hp1) hp2++;
|
if (hp2 == hp1) hp2++;
|
||||||
act2->hitextra = hp1 + (krand() % (hp2 - hp1));
|
act2->hitextra = hp1 + (krand() % (hp2 - hp1));
|
||||||
|
|
|
@ -109,14 +109,6 @@ inline int ldist(const DDukeActor* s1, const tspritetype* s2)
|
||||||
vy = s1->int_pos().Y - s2->int_pos().Y;
|
vy = s1->int_pos().Y - s2->int_pos().Y;
|
||||||
return(FindDistance2D(vx, vy) + 1);
|
return(FindDistance2D(vx, vy) + 1);
|
||||||
}
|
}
|
||||||
inline int dist(DDukeActor* s1, DDukeActor* s2)
|
|
||||||
{
|
|
||||||
int vx, vy, vz;
|
|
||||||
vx = s1->int_pos().X - s2->int_pos().X;
|
|
||||||
vy = s1->int_pos().Y - s2->int_pos().Y;
|
|
||||||
vz = s1->int_pos().Z - s2->int_pos().Z;
|
|
||||||
return(FindDistance3D(vx, vy, vz));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool isIn(int value, int first)
|
inline bool isIn(int value, int first)
|
||||||
{
|
{
|
||||||
|
|
|
@ -506,7 +506,7 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
while (auto l = it.Next())
|
while (auto l = it.Next())
|
||||||
{
|
{
|
||||||
if (l->spr.picnum == BULLETHOLE)
|
if (l->spr.picnum == BULLETHOLE)
|
||||||
if (dist(l, spark) < (12 + (krand() & 7)))
|
if ((l->spr.pos - spark->spr.pos).Length() < 0.75 + krandf(0.5))
|
||||||
goto SKIPBULLETHOLE;
|
goto SKIPBULLETHOLE;
|
||||||
}
|
}
|
||||||
auto hole = spawn(spark, BULLETHOLE);
|
auto hole = spawn(spark, BULLETHOLE);
|
||||||
|
|
|
@ -403,7 +403,7 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
while (auto l = it.Next())
|
while (auto l = it.Next())
|
||||||
{
|
{
|
||||||
if (l->spr.picnum == BULLETHOLE)
|
if (l->spr.picnum == BULLETHOLE)
|
||||||
if (dist(l, spark) < (12 + (krand() & 7)))
|
if ((l->spr.pos - spark->spr.pos).Length() < 0.75 + krandf(0.5))
|
||||||
goto SKIPBULLETHOLE;
|
goto SKIPBULLETHOLE;
|
||||||
}
|
}
|
||||||
auto hole = spawn(spark, BULLETHOLE);
|
auto hole = spawn(spark, BULLETHOLE);
|
||||||
|
|
Loading…
Reference in a new issue