mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-13 20:42:11 +00:00
- first step of replacing hitinfo.hitsect with a pointer.
This takes care of easy to handle common patterns
This commit is contained in:
parent
1162442068
commit
f495097663
8 changed files with 46 additions and 37 deletions
|
@ -285,7 +285,7 @@ int CanHitPlayer(DSWActor* actor)
|
|||
zvect,
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return false;
|
||||
|
||||
if (hitinfo.hitactor == u->targetActor)
|
||||
|
|
|
@ -3436,11 +3436,11 @@ int DoPlayerWadeSuperJump(PLAYERp pp)
|
|||
bsin(pp->angle.ang.asbuild() + angs[i]), // Y vector of 3D ang
|
||||
0, &hitinfo, CLIPMASK_MISSILE); // Z vector of 3D ang
|
||||
|
||||
if (hitinfo.hitwall >= 0 && hitinfo.hitsect >= 0)
|
||||
if (hitinfo.hitwall >= 0 && hitinfo.sector() != nullptr)
|
||||
{
|
||||
hitinfo.hitsect = hitinfo.wall()->nextsector;
|
||||
hitinfo.setSector(hitinfo.wall()->nextSector());
|
||||
|
||||
if (hitinfo.hitsect >= 0 && labs(hitinfo.sector()->floorz - pp->posz) < Z(50))
|
||||
if (hitinfo.sector() != nullptr && labs(hitinfo.sector()->floorz - pp->posz) < Z(50))
|
||||
{
|
||||
if (Distance(pp->posx, pp->posy, hitinfo.pos.x, hitinfo.pos.y) < ((((int)pp->Actor()->s().clipdist)<<2) + 256))
|
||||
return true;
|
||||
|
|
|
@ -951,7 +951,7 @@ int InitRipperHang(DSWActor* actor)
|
|||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
//ASSERT(hitinfo.sect >= 0);
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
continue;
|
||||
|
||||
dist = Distance(sp->x, sp->y, hitinfo.pos.x, hitinfo.pos.y);
|
||||
|
|
|
@ -953,7 +953,7 @@ int InitRipper2Hang(DSWActor* actor)
|
|||
0, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
continue;
|
||||
|
||||
dist = Distance(sp->x, sp->y, hitinfo.pos.x, hitinfo.pos.y);
|
||||
|
|
|
@ -2089,7 +2089,7 @@ bool NearThings(PLAYERp pp)
|
|||
0, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return false;
|
||||
|
||||
if (Distance(hitinfo.pos.x, hitinfo.pos.y, pp->posx, pp->posy) > 1500)
|
||||
|
|
|
@ -200,6 +200,7 @@ inline int Collision::setFromEngine(int value)
|
|||
|
||||
struct HITINFO {
|
||||
DSWActor* hitactor;
|
||||
sectortype* hitSector;
|
||||
int hitsect;
|
||||
int hitwall;
|
||||
short hitsprite;
|
||||
|
@ -211,18 +212,26 @@ struct HITINFO {
|
|||
hitsect = hitwall = -1;
|
||||
hitsprite = -1;
|
||||
hitactor = nullptr;
|
||||
hitSector = nullptr;
|
||||
}
|
||||
void set(hitdata_t* hit)
|
||||
{
|
||||
hitsect = hit->sect;
|
||||
hitSector = &::sector[hit->sect];
|
||||
hitwall = hit->wall;
|
||||
hitsprite = hit->sprite;
|
||||
hitactor = hit->sprite >= 0 ? &swActors[hit->sprite] : nullptr;
|
||||
pos = hit->pos;
|
||||
}
|
||||
|
||||
void setSector(sectortype* sect)
|
||||
{
|
||||
hitSector = sect;
|
||||
hitsect = sectnum(sect);
|
||||
}
|
||||
|
||||
walltype* wall() const { return hitwall == -1? nullptr : &::wall[hitwall]; }
|
||||
sectortype* sector() const { return hitsect == -1 ? nullptr : &::sector[hitsect]; }
|
||||
sectortype* sector() const { return hitSector; }
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -3142,7 +3142,7 @@ bool ActorTrackDecide(TRACK_POINTp tpoint, DSWActor* actor)
|
|||
|
||||
SET(sp->cstat, CSTAT_SPRITE_BLOCK);
|
||||
|
||||
ASSERT(hitinfo.hitsect >= 0);
|
||||
ASSERT(hitinfo.sector() != nullptr);
|
||||
|
||||
if (hitinfo.hitactor != nullptr)
|
||||
return false;
|
||||
|
|
|
@ -12548,7 +12548,7 @@ int InitSwordAttack(PLAYERp pp)
|
|||
daz, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return 0;
|
||||
|
||||
if (FindDistance3D(pp->posx - hitinfo.pos.x, pp->posy - hitinfo.pos.y, pp->posz - hitinfo.pos.z) < 700)
|
||||
|
@ -12738,7 +12738,7 @@ int InitFistAttack(PLAYERp pp)
|
|||
daz, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return 0;
|
||||
|
||||
if (FindDistance3D(pp->posx - hitinfo.pos.x, pp->posy - hitinfo.pos.y, pp->posz - hitinfo.pos.z) < 700)
|
||||
|
@ -13508,18 +13508,18 @@ int ContinueHitscan(PLAYERp pp, short sectnum, int x, int y, int z, short ang, i
|
|||
xvect, yvect, zvect,
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return 0;
|
||||
|
||||
if (hitinfo.hitactor == nullptr && hitinfo.hitwall < 0)
|
||||
{
|
||||
if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].ceilingz) <= Z(1))
|
||||
if (labs(hitinfo.pos.z - hitinfo.sector()->ceilingz) <= Z(1))
|
||||
{
|
||||
hitinfo.pos.z += Z(16);
|
||||
if (TEST(sector[hitinfo.hitsect].ceilingstat, CEILING_STAT_PLAX))
|
||||
if (TEST(hitinfo.sector()->ceilingstat, CEILING_STAT_PLAX))
|
||||
return 0;
|
||||
}
|
||||
else if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].floorz) <= Z(1))
|
||||
else if (labs(hitinfo.pos.z - hitinfo.sector()->floorz) <= Z(1))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -13642,19 +13642,19 @@ int InitShotgun(PLAYERp pp)
|
|||
xvect, yvect, zvect,
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hitinfo.hitactor == nullptr && hitinfo.hitwall < 0)
|
||||
{
|
||||
if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].ceilingz) <= Z(1))
|
||||
if (labs(hitinfo.pos.z - hitinfo.sector()->ceilingz) <= Z(1))
|
||||
{
|
||||
hitinfo.pos.z += Z(16);
|
||||
SET(cstat, CSTAT_SPRITE_YFLIP);
|
||||
|
||||
if (TEST(sector[hitinfo.hitsect].ceilingstat, CEILING_STAT_PLAX))
|
||||
if (TEST(hitinfo.sector()->ceilingstat, CEILING_STAT_PLAX))
|
||||
continue;
|
||||
|
||||
if (SectorIsUnderwaterArea(hitinfo.sector()))
|
||||
|
@ -13664,9 +13664,9 @@ int InitShotgun(PLAYERp pp)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
else if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].floorz) <= Z(1))
|
||||
else if (labs(hitinfo.pos.z - hitinfo.sector()->floorz) <= Z(1))
|
||||
{
|
||||
if (TEST(sector[hitinfo.hitsect].extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
if (TEST(hitinfo.sector()->extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
{
|
||||
SpawnSplashXY(hitinfo.pos.x,hitinfo.pos.y,hitinfo.pos.z,hitinfo.hitsect);
|
||||
|
||||
|
@ -16201,7 +16201,7 @@ int InitUzi(PLAYERp pp)
|
|||
xvect,yvect,zvect,
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -16211,12 +16211,12 @@ int InitUzi(PLAYERp pp)
|
|||
// check to see what you hit
|
||||
if (hitinfo.hitactor == nullptr && hitinfo.hitwall < 0)
|
||||
{
|
||||
if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].ceilingz) <= Z(1))
|
||||
if (labs(hitinfo.pos.z - hitinfo.sector()->ceilingz) <= Z(1))
|
||||
{
|
||||
hitinfo.pos.z += Z(16);
|
||||
SET(cstat, CSTAT_SPRITE_YFLIP);
|
||||
|
||||
if (TEST(sector[hitinfo.hitsect].ceilingstat, CEILING_STAT_PLAX))
|
||||
if (TEST(hitinfo.sector()->ceilingstat, CEILING_STAT_PLAX))
|
||||
return 0;
|
||||
|
||||
if (SectorIsUnderwaterArea(hitinfo.sector()))
|
||||
|
@ -16226,9 +16226,9 @@ int InitUzi(PLAYERp pp)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
else if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].floorz) <= Z(1))
|
||||
else if (labs(hitinfo.pos.z - hitinfo.sector()->floorz) <= Z(1))
|
||||
{
|
||||
if (TEST(sector[hitinfo.hitsect].extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
if (TEST(hitinfo.sector()->extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
{
|
||||
SpawnSplashXY(hitinfo.pos.x,hitinfo.pos.y,hitinfo.pos.z,hitinfo.hitsect);
|
||||
|
||||
|
@ -16749,24 +16749,24 @@ int InitSobjMachineGun(DSWActor* actor, PLAYERp pp)
|
|||
daz, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (hitinfo.hitactor == nullptr && hitinfo.hitwall < 0)
|
||||
{
|
||||
if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].ceilingz) <= Z(1))
|
||||
if (labs(hitinfo.pos.z - hitinfo.sector()->ceilingz) <= Z(1))
|
||||
{
|
||||
hitinfo.pos.z += Z(16);
|
||||
SET(cstat, CSTAT_SPRITE_YFLIP);
|
||||
|
||||
if (TEST(sector[hitinfo.hitsect].ceilingstat, CEILING_STAT_PLAX))
|
||||
if (TEST(hitinfo.sector()->ceilingstat, CEILING_STAT_PLAX))
|
||||
return 0;
|
||||
}
|
||||
else if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].floorz) <= Z(1))
|
||||
else if (labs(hitinfo.pos.z - hitinfo.sector()->floorz) <= Z(1))
|
||||
{
|
||||
if (TEST(sector[hitinfo.hitsect].extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
if (TEST(hitinfo.sector()->extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
{
|
||||
SpawnSplashXY(hitinfo.pos.x,hitinfo.pos.y,hitinfo.pos.z,hitinfo.hitsect);
|
||||
return 0;
|
||||
|
@ -17158,22 +17158,22 @@ int InitTurretMgun(SECTOR_OBJECTp sop)
|
|||
xvect>>4, yvect>>4, zvect>>4);
|
||||
}
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
continue;
|
||||
|
||||
if (hitinfo.hitactor == nullptr && hitinfo.hitwall < 0)
|
||||
{
|
||||
if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].ceilingz) <= Z(1))
|
||||
if (labs(hitinfo.pos.z - hitinfo.sector()->ceilingz) <= Z(1))
|
||||
{
|
||||
hitinfo.pos.z += Z(16);
|
||||
SET(cstat, CSTAT_SPRITE_YFLIP);
|
||||
|
||||
if (TEST(sector[hitinfo.hitsect].ceilingstat, CEILING_STAT_PLAX))
|
||||
if (TEST(hitinfo.sector()->ceilingstat, CEILING_STAT_PLAX))
|
||||
continue;
|
||||
}
|
||||
else if (labs(hitinfo.pos.z - sector[hitinfo.hitsect].floorz) <= Z(1))
|
||||
else if (labs(hitinfo.pos.z - hitinfo.sector()->floorz) <= Z(1))
|
||||
{
|
||||
if (TEST(sector[hitinfo.hitsect].extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
if (TEST(hitinfo.sector()->extra, SECTFX_LIQUID_MASK) != SECTFX_LIQUID_NONE)
|
||||
{
|
||||
SpawnSplashXY(hitinfo.pos.x,hitinfo.pos.y,hitinfo.pos.z,hitinfo.hitsect);
|
||||
continue;
|
||||
|
@ -17297,7 +17297,7 @@ int InitEnemyUzi(DSWActor* actor)
|
|||
daz, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return 0;
|
||||
|
||||
if (RANDOM_P2(1024<<4)>>4 > 700)
|
||||
|
@ -18912,7 +18912,7 @@ DSWActor* QueueWallBlood(DSWActor* actor, short ang)
|
|||
daz, // Z vector of 3D ang
|
||||
&hitinfo, CLIPMASK_MISSILE);
|
||||
|
||||
if (hitinfo.hitsect < 0)
|
||||
if (hitinfo.sector() == nullptr)
|
||||
return nullptr;
|
||||
|
||||
const int WALLBLOOD_DIST_MAX = 2500;
|
||||
|
|
Loading…
Reference in a new issue