mirror of
https://github.com/ZDoom/Raze.git
synced 2025-06-01 09:42:27 +00:00
- the rest of triggers.cpp.
This commit is contained in:
parent
9349e7bcb1
commit
d2bc254e03
4 changed files with 46 additions and 47 deletions
|
@ -298,6 +298,11 @@ class BloodLinearSpriteIterator
|
||||||
int index = 0;
|
int index = 0;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
DBloodActor* Next()
|
DBloodActor* Next()
|
||||||
{
|
{
|
||||||
while (index < MAXSPRITES)
|
while (index < MAXSPRITES)
|
||||||
|
|
|
@ -424,7 +424,7 @@ void evSend(DBloodActor* actor, int nIndex, int nType, int rxId, COMMAND_ID comm
|
||||||
{
|
{
|
||||||
XSPRITE* pXSprite = &actor->x();
|
XSPRITE* pXSprite = &actor->x();
|
||||||
if (pXSprite->rxID == rxId)
|
if (pXSprite->rxID == rxId)
|
||||||
trMessageSprite(actor->s().index, event);
|
trMessageSprite(actor, event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -442,7 +442,7 @@ void evSend(DBloodActor* actor, int nIndex, int nType, int rxId, COMMAND_ID comm
|
||||||
{
|
{
|
||||||
XSPRITE* pXSprite = &actor->x();
|
XSPRITE* pXSprite = &actor->x();
|
||||||
if (pXSprite->rxID == rxId)
|
if (pXSprite->rxID == rxId)
|
||||||
trMessageSprite(actor->s().index, event);
|
trMessageSprite(actor, event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -459,14 +459,14 @@ void evSend(DBloodActor* actor, int nIndex, int nType, int rxId, COMMAND_ID comm
|
||||||
if (playerRXRngIsFine(rxId))
|
if (playerRXRngIsFine(rxId))
|
||||||
{
|
{
|
||||||
if ((pPlayer = getPlayerById((rxId - kChannelPlayer7) + kMaxPlayers)) != nullptr)
|
if ((pPlayer = getPlayerById((rxId - kChannelPlayer7) + kMaxPlayers)) != nullptr)
|
||||||
trMessageSprite(pPlayer->nSprite, event);
|
trMessageSprite(pPlayer->actor(), event);
|
||||||
}
|
}
|
||||||
else if (rxId == kChannelAllPlayers)
|
else if (rxId == kChannelAllPlayers)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < kMaxPlayers; i++)
|
for (int i = 0; i < kMaxPlayers; i++)
|
||||||
{
|
{
|
||||||
if ((pPlayer = getPlayerById(i)) != nullptr)
|
if ((pPlayer = getPlayerById(i)) != nullptr)
|
||||||
trMessageSprite(pPlayer->nSprite, event);
|
trMessageSprite(pPlayer->actor(), event);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -493,7 +493,7 @@ void evSend(DBloodActor* actor, int nIndex, int nType, int rxId, COMMAND_ID comm
|
||||||
{
|
{
|
||||||
XSPRITE* pXSprite = &actor->x();
|
XSPRITE* pXSprite = &actor->x();
|
||||||
if (actor->x().rxID > 0)
|
if (actor->x().rxID > 0)
|
||||||
trMessageSprite(actor->s().index, event);
|
trMessageSprite(actor, event);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -650,7 +650,7 @@ void evProcess(unsigned int time)
|
||||||
trMessageWall(event.index_, event);
|
trMessageWall(event.index_, event);
|
||||||
break;
|
break;
|
||||||
case SS_SPRITE:
|
case SS_SPRITE:
|
||||||
trMessageSprite(event.actor->s().index, event);
|
trMessageSprite(event.actor, event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,7 +273,7 @@ void LifeLeechOperate(DBloodActor* actor, EVENT event)
|
||||||
actPostSprite(actor, kStatFree);
|
actPostSprite(actor, kStatFree);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivateGenerator(int);
|
void ActivateGenerator(DBloodActor*);
|
||||||
|
|
||||||
void OperateSprite(DBloodActor* actor, EVENT event)
|
void OperateSprite(DBloodActor* actor, EVENT event)
|
||||||
{
|
{
|
||||||
|
@ -556,7 +556,7 @@ void OperateSprite(DBloodActor* actor, EVENT event)
|
||||||
SetSpriteState(actor, 0);
|
SetSpriteState(actor, 0);
|
||||||
break;
|
break;
|
||||||
case kCmdRepeat:
|
case kCmdRepeat:
|
||||||
if (pSprite->type != kGenTrigger) ActivateGenerator(pSprite->index);
|
if (pSprite->type != kGenTrigger) ActivateGenerator(actor);
|
||||||
if (pXSprite->txID) evSendActor(actor, pXSprite->txID, (COMMAND_ID)pXSprite->command);
|
if (pXSprite->txID) evSendActor(actor, pXSprite->txID, (COMMAND_ID)pXSprite->command);
|
||||||
if (pXSprite->busyTime > 0) {
|
if (pXSprite->busyTime > 0) {
|
||||||
int nRand = Random2(pXSprite->data1);
|
int nRand = Random2(pXSprite->data1);
|
||||||
|
@ -1823,8 +1823,8 @@ void trMessageWall(unsigned int nWall, EVENT event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void trMessageSprite(unsigned int nSprite, EVENT event) {
|
void trMessageSprite(DBloodActor* actor, EVENT event)
|
||||||
auto actor = &bloodActors[nSprite];
|
{
|
||||||
auto pSprite = &actor->s();
|
auto pSprite = &actor->s();
|
||||||
auto pXSprite = &actor->x();
|
auto pXSprite = &actor->x();
|
||||||
if (pSprite->statnum != kStatFree) {
|
if (pSprite->statnum != kStatFree) {
|
||||||
|
@ -1993,7 +1993,7 @@ void trProcessBusy(void)
|
||||||
AlignSlopes();
|
AlignSlopes();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitGenerator(int);
|
void InitGenerator(DBloodActor*);
|
||||||
|
|
||||||
void trInit(void)
|
void trInit(void)
|
||||||
{
|
{
|
||||||
|
@ -2099,16 +2099,17 @@ void trInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i < kMaxSprites; i++)
|
|
||||||
|
it.Reset();
|
||||||
|
while (auto actor = it.Next())
|
||||||
{
|
{
|
||||||
int nXSprite = sprite[i].extra;
|
auto pSprite = &actor->s();
|
||||||
if (sprite[i].statnum < kStatFree && nXSprite > 0)
|
if (pSprite->statnum < kStatFree && actor->hasX())
|
||||||
{
|
{
|
||||||
assert(nXSprite < kMaxXSprites);
|
auto pXSprite = &actor->x();
|
||||||
XSPRITE *pXSprite = &xsprite[nXSprite];
|
|
||||||
if (pXSprite->state)
|
if (pXSprite->state)
|
||||||
pXSprite->busy = 65536;
|
pXSprite->busy = 65536;
|
||||||
switch (sprite[i].type) {
|
switch (pSprite->type) {
|
||||||
case kSwitchPadlock:
|
case kSwitchPadlock:
|
||||||
pXSprite->triggerOnce = 1;
|
pXSprite->triggerOnce = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -2117,9 +2118,9 @@ void trInit(void)
|
||||||
case kModernRandom2:
|
case kModernRandom2:
|
||||||
|
|
||||||
if (!gModernMap || pXSprite->state == pXSprite->restState) break;
|
if (!gModernMap || pXSprite->state == pXSprite->restState) break;
|
||||||
evPostActor(&bloodActors[i], (120 * pXSprite->busyTime) / 10, kCmdRepeat);
|
evPostActor(actor, (120 * pXSprite->busyTime) / 10, kCmdRepeat);
|
||||||
if (pXSprite->waitTime > 0)
|
if (pXSprite->waitTime > 0)
|
||||||
evPostActor(&bloodActors[i], (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff);
|
evPostActor(actor, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff);
|
||||||
break;
|
break;
|
||||||
case kModernSeqSpawner:
|
case kModernSeqSpawner:
|
||||||
case kModernObjDataAccumulator:
|
case kModernObjDataAccumulator:
|
||||||
|
@ -2127,9 +2128,9 @@ void trInit(void)
|
||||||
case kModernEffectSpawner:
|
case kModernEffectSpawner:
|
||||||
case kModernWindGenerator:
|
case kModernWindGenerator:
|
||||||
if (pXSprite->state == pXSprite->restState) break;
|
if (pXSprite->state == pXSprite->restState) break;
|
||||||
evPostActor(&bloodActors[i], 0, kCmdRepeat);
|
evPostActor(actor, 0, kCmdRepeat);
|
||||||
if (pXSprite->waitTime > 0)
|
if (pXSprite->waitTime > 0)
|
||||||
evPostActor(&bloodActors[i], (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff);
|
evPostActor(actor, (pXSprite->waitTime * 120) / 10, pXSprite->restState ? kCmdOn : kCmdOff);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case kGenTrigger:
|
case kGenTrigger:
|
||||||
|
@ -2141,18 +2142,18 @@ void trInit(void)
|
||||||
case kGenBubbleMulti:
|
case kGenBubbleMulti:
|
||||||
case kGenMissileEctoSkull:
|
case kGenMissileEctoSkull:
|
||||||
case kGenSound:
|
case kGenSound:
|
||||||
InitGenerator(i);
|
InitGenerator(actor);
|
||||||
break;
|
break;
|
||||||
case kThingArmedProxBomb:
|
case kThingArmedProxBomb:
|
||||||
pXSprite->Proximity = 1;
|
pXSprite->Proximity = 1;
|
||||||
break;
|
break;
|
||||||
case kThingFallingRock:
|
case kThingFallingRock:
|
||||||
if (pXSprite->state) sprite[i].flags |= 7;
|
if (pXSprite->state) pSprite->flags |= 7;
|
||||||
else sprite[i].flags &= ~7;
|
else pSprite->flags &= ~7;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pXSprite->Vector) sprite[i].cstat |= CSTAT_SPRITE_BLOCK_HITSCAN;
|
if (pXSprite->Vector) pSprite->cstat |= CSTAT_SPRITE_BLOCK_HITSCAN;
|
||||||
if (pXSprite->Push) sprite[i].cstat |= 4096;
|
if (pXSprite->Push) pSprite->cstat |= 4096;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2178,38 +2179,31 @@ void trTextOver(int nId)
|
||||||
viewSetMessage(pzMessage, VanillaMode() ? 0 : 8, MESSAGE_PRIORITY_INI); // 8: gold
|
viewSetMessage(pzMessage, VanillaMode() ? 0 : 8, MESSAGE_PRIORITY_INI); // 8: gold
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitGenerator(int nSprite)
|
void InitGenerator(DBloodActor* actor)
|
||||||
{
|
{
|
||||||
assert(nSprite < kMaxSprites);
|
spritetype *pSprite = &actor->s();
|
||||||
spritetype *pSprite = &sprite[nSprite];
|
assert(actor->hasX());
|
||||||
assert(pSprite->statnum != kMaxStatus);
|
XSPRITE *pXSprite = &actor->x();
|
||||||
int nXSprite = pSprite->extra;
|
switch (pSprite->type) {
|
||||||
assert(nXSprite > 0);
|
|
||||||
XSPRITE *pXSprite = &xsprite[nXSprite];
|
|
||||||
switch (sprite[nSprite].type) {
|
|
||||||
case kGenTrigger:
|
case kGenTrigger:
|
||||||
pSprite->cstat &= ~CSTAT_SPRITE_BLOCK;
|
pSprite->cstat &= ~CSTAT_SPRITE_BLOCK;
|
||||||
pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
|
pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pXSprite->state != pXSprite->restState && pXSprite->busyTime > 0)
|
if (pXSprite->state != pXSprite->restState && pXSprite->busyTime > 0)
|
||||||
evPostActor(&bloodActors[nSprite], (120*(pXSprite->busyTime+Random2(pXSprite->data1)))/10, kCmdRepeat);
|
evPostActor(actor, (120*(pXSprite->busyTime+Random2(pXSprite->data1)))/10, kCmdRepeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivateGenerator(int nSprite)
|
void ActivateGenerator(DBloodActor* actor)
|
||||||
{
|
{
|
||||||
assert(nSprite < kMaxSprites);
|
spritetype *pSprite = &actor->s();
|
||||||
auto actor = &bloodActors[nSprite];
|
assert(actor->hasX());
|
||||||
spritetype *pSprite = &sprite[nSprite];
|
XSPRITE *pXSprite = &actor->x();
|
||||||
assert(pSprite->statnum != kMaxStatus);
|
|
||||||
int nXSprite = pSprite->extra;
|
|
||||||
assert(nXSprite > 0);
|
|
||||||
XSPRITE *pXSprite = &xsprite[nXSprite];
|
|
||||||
switch (pSprite->type) {
|
switch (pSprite->type) {
|
||||||
case kGenDripWater:
|
case kGenDripWater:
|
||||||
case kGenDripBlood: {
|
case kGenDripBlood: {
|
||||||
int top, bottom;
|
int top, bottom;
|
||||||
GetSpriteExtents(pSprite, &top, &bottom);
|
GetActorExtents(actor, &top, &bottom);
|
||||||
actSpawnThing(pSprite->sectnum, pSprite->x, pSprite->y, bottom, (pSprite->type == kGenDripWater) ? kThingDripWater : kThingDripBlood);
|
actSpawnThing(pSprite->sectnum, pSprite->x, pSprite->y, bottom, (pSprite->type == kGenDripWater) ? kThingDripWater : kThingDripBlood);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2219,7 +2213,7 @@ void ActivateGenerator(int nSprite)
|
||||||
case kGenMissileFireball:
|
case kGenMissileFireball:
|
||||||
switch (pXSprite->data2) {
|
switch (pXSprite->data2) {
|
||||||
case 0:
|
case 0:
|
||||||
FireballTrapSeqCallback(3, &bloodActors[nSprite]);
|
FireballTrapSeqCallback(3, actor);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
seqSpawn(35, actor, nFireballTrapClient);
|
seqSpawn(35, actor, nFireballTrapClient);
|
||||||
|
@ -2234,7 +2228,7 @@ void ActivateGenerator(int nSprite)
|
||||||
case kGenBubble:
|
case kGenBubble:
|
||||||
case kGenBubbleMulti: {
|
case kGenBubbleMulti: {
|
||||||
int top, bottom;
|
int top, bottom;
|
||||||
GetSpriteExtents(pSprite, &top, &bottom);
|
GetActorExtents(actor, &top, &bottom);
|
||||||
gFX.fxSpawnActor((pSprite->type == kGenBubble) ? FX_23 : FX_26, pSprite->sectnum, pSprite->x, pSprite->y, top, 0);
|
gFX.fxSpawnActor((pSprite->type == kGenBubble) ? FX_23 : FX_26, pSprite->sectnum, pSprite->x, pSprite->y, top, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ void trMessageSector(unsigned int nSector, EVENT event);
|
||||||
void trTriggerWall(unsigned int nWall, XWALL *pXWall, int command);
|
void trTriggerWall(unsigned int nWall, XWALL *pXWall, int command);
|
||||||
void trMessageWall(unsigned int nWall, EVENT event);
|
void trMessageWall(unsigned int nWall, EVENT event);
|
||||||
void trTriggerSprite(DBloodActor* actor, int command);
|
void trTriggerSprite(DBloodActor* actor, int command);
|
||||||
void trMessageSprite(unsigned int nSprite, EVENT event);
|
void trMessageSprite(DBloodActor* actor, EVENT event);
|
||||||
void trProcessBusy(void);
|
void trProcessBusy(void);
|
||||||
void trInit(void);
|
void trInit(void);
|
||||||
void trTextOver(int nId);
|
void trTextOver(int nId);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue