- Exhumed: Initial setup to convert PlayerArray array to array of ExhumedPlayer pointers.

This commit is contained in:
Mitchell Richters 2023-10-02 14:44:13 +11:00
parent 6d2124dd01
commit f9c3a64f35
4 changed files with 21 additions and 13 deletions

View file

@ -417,6 +417,13 @@ void GameInterface::SetupSpecialTextures(TilesetBuildInfo& info)
void GameInterface::app_init()
{
// Initialise player array.
for (unsigned i = 0; i < kMaxPlayers; i++)
{
PlayerArray[i] = new ExhumedPlayer;
*PlayerArray[i] = {};
}
GC::AddMarkerFunc(markgcroots);
InitTextureIDs();

View file

@ -132,7 +132,7 @@ void ResetPlayerWeapons(int nPlayer)
void InitWeapons()
{
for (auto& p : PlayerArray) p.pPlayerGrenade = nullptr;
for (auto p : PlayerArray) p->pPlayerGrenade = nullptr;
}
//---------------------------------------------------------------------------

View file

@ -69,7 +69,7 @@ static constexpr int16_t nItemText[] = {
};
int nLocalPlayer = 0;
ExhumedPlayer PlayerArray[kMaxPlayers];
ExhumedPlayer* PlayerArray[kMaxPlayers];
TObjPtr<DExhumedActor*> nNetStartSprite[kMaxPlayers] = { };
int PlayerCount;
int nNetStartSprites;
@ -84,13 +84,13 @@ int nCurStartSprite;
size_t MarkPlayers()
{
for (auto& p : PlayerArray)
for (auto p : PlayerArray)
{
GC::Mark(p.actor);
GC::Mark(p.pDoppleSprite);
GC::Mark(p.pPlayerFloorSprite);
GC::Mark(p.pPlayerGrenade);
GC::Mark(p.pTarget);
GC::Mark(p->actor);
GC::Mark(p->pDoppleSprite);
GC::Mark(p->pPlayerFloorSprite);
GC::Mark(p->pPlayerGrenade);
GC::Mark(p->pTarget);
}
GC::MarkArray(nNetStartSprite, kMaxPlayers);
return 6 * kMaxPlayers;
@ -2182,8 +2182,9 @@ void SerializePlayer(FSerializer& arc)
("netstartsprites", nNetStartSprites)
("localplayer", nLocalPlayer)
("curstartsprite", nCurStartSprite)
.Array("netstartsprite", nNetStartSprite, kMaxPlayers)
.Array("list", PlayerArray, PlayerCount);
.Array("netstartsprite", nNetStartSprite, kMaxPlayers);
#pragma message("Exhumed: Fix saving!")
//.Array("list", PlayerArray, PlayerCount);
arc.EndObject();
}
@ -2237,7 +2238,7 @@ DEFINE_ACTION_FUNCTION(_Exhumed, GetPlayerClip)
DEFINE_ACTION_FUNCTION(_ExhumedPlayer, IsUnderwater)
{
PARAM_SELF_STRUCT_PROLOGUE(ExhumedPlayer);
auto nLocalPlayer = self - PlayerArray;
auto nLocalPlayer = self - *PlayerArray;
ACTION_RETURN_BOOL(getPlayer(nLocalPlayer)->pPlayerViewSect->Flag & kSectUnderwater);
}

View file

@ -117,11 +117,11 @@ struct ExhumedPlayer final : public CorePlayer
extern int PlayerCount;
extern ExhumedPlayer PlayerArray[kMaxPlayers];
extern ExhumedPlayer* PlayerArray[kMaxPlayers];
inline ExhumedPlayer* getPlayer(int index)
{
return &PlayerArray[index];
return PlayerArray[index];
}
extern TObjPtr<DExhumedActor*> nNetStartSprite[kMaxPlayers];