mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-20 18:52:43 +00:00
- first xwall[] removal in Blood.
This commit is contained in:
parent
19f3365efc
commit
70da9e2526
4 changed files with 33 additions and 29 deletions
|
@ -4551,20 +4551,19 @@ static void ProcessTouchObjects(DBloodActor* actor)
|
|||
|
||||
// Touch walls
|
||||
Collision coll = actor->hit.hit;
|
||||
int nHWall = -1;
|
||||
walltype* pHWall = nullptr;
|
||||
if (coll.type == kHitWall)
|
||||
{
|
||||
nHWall = coll.index;
|
||||
if (wallRangeIsFine(nHWall) && xwallRangeIsFine(wall[nHWall].extra))
|
||||
pHWall = coll.wall();
|
||||
if (pHWall && pHWall->hasX())
|
||||
{
|
||||
XWALL* pXHWall = &xwall[wall[nHWall].extra];
|
||||
if (pXHWall->triggerTouch && !pXHWall->isTriggered && (!pXHWall->dudeLockout || actor->IsPlayerActor()))
|
||||
trTriggerWall(nHWall, pXHWall, kCmdWallTouch);
|
||||
if (pHWall->xw().triggerTouch && !pHWall->xw().isTriggered && (!pHWall->xw().dudeLockout || actor->IsPlayerActor()))
|
||||
trTriggerWall(pHWall, kCmdWallTouch);
|
||||
}
|
||||
}
|
||||
|
||||
// enough to reset SpriteHit values
|
||||
if (nHWall != -1 || actor2) actor->xvel += 5;
|
||||
if (pHWall != nullptr || actor2) actor->xvel += 5;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -609,9 +609,9 @@ void evSendSector(int index, int rxId, COMMAND_ID command)
|
|||
evSend(nullptr, index, SS_SECTOR, rxId, command);
|
||||
}
|
||||
|
||||
void evSendWall(int index, int rxId, COMMAND_ID command)
|
||||
void evSendWall(walltype* wal, int rxId, COMMAND_ID command)
|
||||
{
|
||||
evSend(nullptr, index, SS_WALL, rxId, command);
|
||||
evSend(nullptr, wallnum(wal), SS_WALL, rxId, command);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
@ -87,9 +87,9 @@ bool SetWallState(int nWall, XWALL *pXWall, int nState)
|
|||
if (pXWall->txID)
|
||||
{
|
||||
if (pXWall->command != kCmdLink && pXWall->triggerOn && pXWall->state)
|
||||
evSendWall(nWall, pXWall->txID, (COMMAND_ID)pXWall->command);
|
||||
evSendWall(&wall[nWall], pXWall->txID, (COMMAND_ID)pXWall->command);
|
||||
if (pXWall->command != kCmdLink && pXWall->triggerOff && !pXWall->state)
|
||||
evSendWall(nWall, pXWall->txID, (COMMAND_ID)pXWall->command);
|
||||
evSendWall(&wall[nWall], pXWall->txID, (COMMAND_ID)pXWall->command);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -646,9 +646,9 @@ void SetupGibWallState(walltype *pWall, XWALL *pXWall)
|
|||
}
|
||||
}
|
||||
|
||||
void OperateWall(int nWall, XWALL *pXWall, EVENT event) {
|
||||
walltype *pWall = &wall[nWall];
|
||||
|
||||
void OperateWall(walltype* pWall, EVENT event) {
|
||||
auto pXWall = &pWall->xw();
|
||||
|
||||
switch (event.cmd) {
|
||||
case kCmdLock:
|
||||
pXWall->locked = 1;
|
||||
|
@ -662,24 +662,24 @@ void OperateWall(int nWall, XWALL *pXWall, EVENT event) {
|
|||
}
|
||||
|
||||
#ifdef NOONE_EXTENSIONS
|
||||
if (gModernMap && modernTypeOperateWall(nWall, pWall, pXWall, event))
|
||||
if (gModernMap && modernTypeOperateWall(wallnum(pWall), pWall, pXWall, event))
|
||||
return;
|
||||
#endif
|
||||
|
||||
switch (pWall->type) {
|
||||
case kWallGib:
|
||||
if (GetWallType(nWall) != pWall->type) break;
|
||||
if (GetWallType(wallnum(pWall)) != pWall->type) break;
|
||||
bool bStatus;
|
||||
switch (event.cmd) {
|
||||
case kCmdOn:
|
||||
case kCmdWallImpact:
|
||||
bStatus = SetWallState(nWall, pXWall, 1);
|
||||
bStatus = SetWallState(wallnum(pWall), pXWall, 1);
|
||||
break;
|
||||
case kCmdOff:
|
||||
bStatus = SetWallState(nWall, pXWall, 0);
|
||||
bStatus = SetWallState(wallnum(pWall), pXWall, 0);
|
||||
break;
|
||||
default:
|
||||
bStatus = SetWallState(nWall, pXWall, pXWall->state ^ 1);
|
||||
bStatus = SetWallState(wallnum(pWall), pXWall, pXWall->state ^ 1);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -689,20 +689,20 @@ void OperateWall(int nWall, XWALL *pXWall, EVENT event) {
|
|||
CGibVelocity vel(100, 100, 250);
|
||||
int nType = ClipRange(pXWall->data, 0, 31);
|
||||
if (nType > 0)
|
||||
GibWall(nWall, (GIBTYPE)nType, &vel);
|
||||
GibWall(wallnum(pWall), (GIBTYPE)nType, &vel);
|
||||
}
|
||||
}
|
||||
return;
|
||||
default:
|
||||
switch (event.cmd) {
|
||||
case kCmdOff:
|
||||
SetWallState(nWall, pXWall, 0);
|
||||
SetWallState(wallnum(pWall), pXWall, 0);
|
||||
break;
|
||||
case kCmdOn:
|
||||
SetWallState(nWall, pXWall, 1);
|
||||
SetWallState(wallnum(pWall), pXWall, 1);
|
||||
break;
|
||||
default:
|
||||
SetWallState(nWall, pXWall, pXWall->state ^ 1);
|
||||
SetWallState(wallnum(pWall), pXWall, pXWall->state ^ 1);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
|
@ -1738,20 +1738,21 @@ void trTriggerSector(unsigned int nSector, XSECTOR *pXSector, int command) {
|
|||
}
|
||||
}
|
||||
|
||||
void trTriggerWall(unsigned int nWall, XWALL *pXWall, int command) {
|
||||
assert(nWall < (unsigned int)numwalls);
|
||||
void trTriggerWall(walltype* pWall, int command)
|
||||
{
|
||||
auto pXWall = &pWall->xw();
|
||||
if (!pXWall->locked && !pXWall->isTriggered) {
|
||||
|
||||
if (pXWall->triggerOnce)
|
||||
pXWall->isTriggered = 1;
|
||||
|
||||
if (pXWall->decoupled && pXWall->txID > 0)
|
||||
evSendWall(nWall, pXWall->txID, (COMMAND_ID)pXWall->command);
|
||||
evSendWall(pWall, pXWall->txID, (COMMAND_ID)pXWall->command);
|
||||
|
||||
else {
|
||||
EVENT event;
|
||||
event.cmd = command;
|
||||
OperateWall(nWall, pXWall, event);
|
||||
OperateWall(pWall, event);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1815,7 +1816,7 @@ void trMessageWall(unsigned int nWall, EVENT event) {
|
|||
break;
|
||||
#endif
|
||||
default:
|
||||
OperateWall(nWall, pXWall, event);
|
||||
OperateWall(&wall[nWall], event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,11 @@ extern int gBusyCount;
|
|||
|
||||
void trTriggerSector(unsigned int nSector, XSECTOR *pXSector, int command);
|
||||
void trMessageSector(unsigned int nSector, EVENT event);
|
||||
void trTriggerWall(unsigned int nWall, XWALL *pXWall, int command);
|
||||
void trTriggerWall(walltype*, int command);
|
||||
inline void trTriggerWall(unsigned int nWall, XWALL* pXWall, int command)
|
||||
{
|
||||
trTriggerWall(&wall[nWall], command);
|
||||
}
|
||||
void trMessageWall(unsigned int nWall, EVENT event);
|
||||
void trTriggerSprite(DBloodActor* actor, int command);
|
||||
void trMessageSprite(DBloodActor* actor, EVENT event);
|
||||
|
|
Loading…
Reference in a new issue