mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-07 15:31:11 +00:00
- converted FuncPlayer into a class
This commit is contained in:
parent
f13e1f2127
commit
93b0a35927
2 changed files with 1900 additions and 1884 deletions
|
@ -555,6 +555,14 @@ struct AIObject : public ExhumedAI
|
||||||
void RadialDamage(RunListEvent* ev) override;
|
void RadialDamage(RunListEvent* ev) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AIPlayer : public ExhumedAI
|
||||||
|
{
|
||||||
|
void Tick(RunListEvent* ev) override;
|
||||||
|
void Damage(RunListEvent* ev) override;
|
||||||
|
void Draw(RunListEvent* ev) override;
|
||||||
|
void RadialDamage(RunListEvent* ev) override;
|
||||||
|
};
|
||||||
|
|
||||||
void runlist_DispatchEvent(ExhumedAI* ai, int nObject, int nMessage, int nDamage, int nRun);
|
void runlist_DispatchEvent(ExhumedAI* ai, int nObject, int nMessage, int nDamage, int nRun);
|
||||||
|
|
||||||
typedef void(*AiFunc)(int, int, int, int nRun);
|
typedef void(*AiFunc)(int, int, int, int nRun);
|
||||||
|
|
|
@ -652,66 +652,50 @@ void UpdatePlayerSpriteAngle(Player* pPlayer)
|
||||||
inita = sprite[pPlayer->nSprite].ang = pPlayer->angle.ang.asbuild();
|
inita = sprite[pPlayer->nSprite].ang = pPlayer->angle.ang.asbuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FuncPlayer(int nObject, int nMessage, int nDamage, int nRun)
|
void AIPlayer::Draw(RunListEvent* ev)
|
||||||
{
|
{
|
||||||
int var_48 = 0;
|
short nPlayer = RunData[ev->nRun].nVal;
|
||||||
int var_40;
|
assert(nPlayer >= 0 && nPlayer < kMaxPlayers);
|
||||||
bool mplevel = (currentLevel->gameflags & LEVEL_EX_MULTI);
|
short nAction = PlayerList[nPlayer].nAction;
|
||||||
|
|
||||||
short nPlayer = RunData[nRun].nVal;
|
seq_PlotSequence(ev->nIndex, SeqOffsets[PlayerList[nPlayer].nSeq] + PlayerSeq[nAction].a, PlayerList[nPlayer].field_2, PlayerSeq[nAction].b);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIPlayer::RadialDamage(RunListEvent* ev)
|
||||||
|
{
|
||||||
|
short nPlayer = RunData[ev->nRun].nVal;
|
||||||
assert(nPlayer >= 0 && nPlayer < kMaxPlayers);
|
assert(nPlayer >= 0 && nPlayer < kMaxPlayers);
|
||||||
|
|
||||||
short nPlayerSprite = PlayerList[nPlayer].nSprite;
|
short nPlayerSprite = PlayerList[nPlayer].nSprite;
|
||||||
auto pPlayerSprite = &sprite[nPlayerSprite];
|
|
||||||
|
|
||||||
|
if (PlayerList[nPlayer].nHealth <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ev->nDamage = runlist_CheckRadialDamage(nPlayerSprite);
|
||||||
|
Damage(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AIPlayer::Damage(RunListEvent* ev)
|
||||||
|
{
|
||||||
|
int nSprite2;
|
||||||
|
int nDamage = ev->nDamage;
|
||||||
|
short nPlayer = RunData[ev->nRun].nVal;
|
||||||
|
short nAction = PlayerList[nPlayer].nAction;
|
||||||
|
short nPlayerSprite = PlayerList[nPlayer].nSprite;
|
||||||
|
auto pPlayerSprite = &sprite[nPlayerSprite];
|
||||||
short nDopple = nDoppleSprite[nPlayer];
|
short nDopple = nDoppleSprite[nPlayer];
|
||||||
|
|
||||||
short nAction = PlayerList[nPlayer].nAction;
|
|
||||||
short nActionB = PlayerList[nPlayer].nAction;
|
|
||||||
|
|
||||||
short nSprite2;
|
|
||||||
|
|
||||||
PlayerList[nPlayer].angle.backup();
|
|
||||||
PlayerList[nPlayer].horizon.backup();
|
|
||||||
PlayerList[nPlayer].angle.resetadjustment();
|
|
||||||
PlayerList[nPlayer].horizon.resetadjustment();
|
|
||||||
oeyelevel[nPlayer] = eyelevel[nPlayer];
|
|
||||||
|
|
||||||
switch (nMessage)
|
|
||||||
{
|
|
||||||
case 0x90000:
|
|
||||||
{
|
|
||||||
seq_PlotSequence(nObject, SeqOffsets[PlayerList[nPlayer].nSeq] + PlayerSeq[nAction].a, PlayerList[nPlayer].field_2, PlayerSeq[nAction].b);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 0xA0000:
|
|
||||||
{
|
|
||||||
if (PlayerList[nPlayer].nHealth <= 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nDamage = runlist_CheckRadialDamage(nPlayerSprite);
|
|
||||||
if (!nDamage) {
|
if (!nDamage) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nSprite2 = nRadialOwner;
|
if (ev->nMessage != EMessageType::RadialDamage)
|
||||||
// fall through to case 0x80000
|
|
||||||
fallthrough__;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 0x80000:
|
|
||||||
{
|
{
|
||||||
// Dunno how to do this otherwise... we fall through from above but don't want to do this check..
|
nSprite2 = ev->nIndex;
|
||||||
if (nMessage != 0xA0000)
|
|
||||||
{
|
|
||||||
if (!nDamage) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nSprite2 = nObject;
|
|
||||||
}
|
}
|
||||||
|
else nSprite2 = nRadialOwner;
|
||||||
|
|
||||||
// ok continue case 0x80000 as normal, loc_1C57C
|
// ok continue case 0x80000 as normal, loc_1C57C
|
||||||
if (!PlayerList[nPlayer].nHealth) {
|
if (!PlayerList[nPlayer].nHealth) {
|
||||||
|
@ -787,7 +771,7 @@ void FuncPlayer(int nObject, int nMessage, int nDamage, int nRun)
|
||||||
nPlayerScore[nPlayer]--;
|
nPlayerScore[nPlayer]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nMessage == 0xA0000)
|
if (ev->nMessage == EMessageType::RadialDamage)
|
||||||
{
|
{
|
||||||
for (int i = 122; i <= 131; i++)
|
for (int i = 122; i <= 131; i++)
|
||||||
{
|
{
|
||||||
|
@ -801,12 +785,32 @@ void FuncPlayer(int nObject, int nMessage, int nDamage, int nRun)
|
||||||
StartDeathSeq(nPlayer, 0);
|
StartDeathSeq(nPlayer, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x20000:
|
|
||||||
|
void AIPlayer::Tick(RunListEvent* ev)
|
||||||
{
|
{
|
||||||
|
int var_48 = 0;
|
||||||
|
int var_40;
|
||||||
|
bool mplevel = (currentLevel->gameflags & LEVEL_EX_MULTI);
|
||||||
|
|
||||||
|
short nPlayer = RunData[ev->nRun].nVal;
|
||||||
|
assert(nPlayer >= 0 && nPlayer < kMaxPlayers);
|
||||||
|
|
||||||
|
short nPlayerSprite = PlayerList[nPlayer].nSprite;
|
||||||
|
auto pPlayerSprite = &sprite[nPlayerSprite];
|
||||||
|
|
||||||
|
short nDopple = nDoppleSprite[nPlayer];
|
||||||
|
|
||||||
|
short nAction = PlayerList[nPlayer].nAction;
|
||||||
|
short nActionB = PlayerList[nPlayer].nAction;
|
||||||
|
|
||||||
|
PlayerList[nPlayer].angle.backup();
|
||||||
|
PlayerList[nPlayer].horizon.backup();
|
||||||
|
PlayerList[nPlayer].angle.resetadjustment();
|
||||||
|
PlayerList[nPlayer].horizon.resetadjustment();
|
||||||
|
oeyelevel[nPlayer] = eyelevel[nPlayer];
|
||||||
|
|
||||||
pPlayerSprite->xvel = sPlayerInput[nPlayer].xVel >> 14;
|
pPlayerSprite->xvel = sPlayerInput[nPlayer].xVel >> 14;
|
||||||
pPlayerSprite->yvel = sPlayerInput[nPlayer].yVel >> 14;
|
pPlayerSprite->yvel = sPlayerInput[nPlayer].yVel >> 14;
|
||||||
|
|
||||||
|
@ -2663,10 +2667,14 @@ loc_1BD2E:
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveWeapons(nPlayer);
|
MoveWeapons(nPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
void FuncPlayer(int nObject, int nMessage, int nDamage, int nRun)
|
||||||
|
{
|
||||||
|
AIPlayer ai;
|
||||||
|
runlist_DispatchEvent(&ai, nObject, nMessage, nDamage, nRun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue