@@ -210,8 +210,8 @@ int MetaMan::ReadProperty(const std::string_view& propName, Reader& reader) {
210210 MatchProperty (" GameName" , { reader >> m_GameName; });
211211 MatchProperty (" AddPlayer" ,
212212 {
213- MetaPlayer player;
214- reader >> player;
213+ MetaPlayer* player = new MetaPlayer () ;
214+ reader >> * player;
215215 m_Players.push_back (player);
216216 });
217217 MatchProperty (" TeamCount" , { reader >> m_TeamCount; });
@@ -255,8 +255,8 @@ int MetaMan::Save(Writer& writer) const {
255255 writer.NewPropertyWithValue (" Team3AISkill" , m_TeamAISkill[Activity::TeamThree]);
256256 writer.NewPropertyWithValue (" Team4AISkill" , m_TeamAISkill[Activity::TeamFour]);
257257
258- for (const MetaPlayer& metaPlayer: m_Players) {
259- writer.NewPropertyWithValue (" AddPlayer" , metaPlayer);
258+ for (const MetaPlayer* metaPlayer: m_Players) {
259+ writer.NewPropertyWithValue (" AddPlayer" , * metaPlayer);
260260 }
261261
262262 writer.NewPropertyWithValue (" TeamCount" , m_TeamCount);
@@ -301,6 +301,19 @@ int MetaMan::Save(Writer& writer) const {
301301 return 0 ;
302302}
303303
304+ void MetaMan::Destroy () {
305+ delete m_pMetaGUI;
306+
307+ for (std::vector<Scene*>::iterator sItr = m_Scenes.begin (); sItr != m_Scenes.end (); ++sItr )
308+ delete (*sItr );
309+ for (std::vector<GAScripted*>::iterator aItr = m_RoundOffensives.begin (); aItr != m_RoundOffensives.end (); ++aItr)
310+ delete (*aItr);
311+ for (std::vector<MetaPlayer*>::iterator pItr = m_Players.begin (); pItr != m_Players.end (); ++pItr)
312+ delete (*pItr);
313+
314+ Clear ();
315+ }
316+
304317int MetaMan::SaveSceneData (std::string pathBase) {
305318 for (std::vector<Scene*>::const_iterator sItr = m_Scenes.begin (); sItr != m_Scenes.end (); ++sItr ) {
306319 // Only save the data of revealed scenes that have already had their layers built and saved into files
@@ -333,17 +346,6 @@ int MetaMan::ClearSceneData() {
333346 return 0 ;
334347}
335348
336- void MetaMan::Destroy () {
337- delete m_pMetaGUI;
338-
339- for (std::vector<Scene*>::iterator sItr = m_Scenes.begin (); sItr != m_Scenes.end (); ++sItr )
340- delete (*sItr );
341- for (std::vector<GAScripted*>::iterator aItr = m_RoundOffensives.begin (); aItr != m_RoundOffensives.end (); ++aItr)
342- delete (*aItr);
343-
344- Clear ();
345- }
346-
347349int MetaMan::GetPlayerTurn () const {
348350 // Player 1's turn is coming up on this round
349351 if (g_MetaMan.m_GameState <= PLAYER1TURN)
@@ -357,9 +359,9 @@ int MetaMan::GetPlayerTurn() const {
357359}
358360
359361MetaPlayer* MetaMan::GetMetaPlayerOfInGamePlayer (int inGamePlayer) {
360- for (std::vector<MetaPlayer>::iterator itr = m_Players.begin (); itr != m_Players.end (); ++itr) {
361- if ((*itr). GetInGamePlayer () == inGamePlayer)
362- return &(*itr);
362+ for (std::vector<MetaPlayer* >::iterator itr = m_Players.begin (); itr != m_Players.end (); ++itr) {
363+ if ((*itr)-> GetInGamePlayer () == inGamePlayer)
364+ return &(** itr);
363365 }
364366
365367 // Didn't find any metaplayer that is using that in-game player
@@ -404,14 +406,14 @@ int MetaMan::GetTotalBrainCountOfPlayer(int metaPlayer, bool countPoolsOnly) con
404406 return 0 ;
405407
406408 // Count the pool first
407- int brainCount = m_Players[metaPlayer]. GetBrainPoolCount ();
409+ int brainCount = m_Players[metaPlayer]-> GetBrainPoolCount ();
408410 // Plus any that are out travelling between sites
409- brainCount += m_Players[metaPlayer]. GetBrainsInTransit ();
411+ brainCount += m_Players[metaPlayer]-> GetBrainsInTransit ();
410412
411413 if (!countPoolsOnly) {
412414 for (std::vector<Scene*>::const_iterator sItr = m_Scenes.begin (); sItr != m_Scenes.end (); ++sItr ) {
413415 // Add up any brains installed as resident on any sites
414- if ((*sItr )->IsRevealed () && (*sItr )->GetTeamOwnership () == GetTeamOfPlayer (metaPlayer) && (*sItr )->GetResidentBrain (m_Players[metaPlayer]. GetInGamePlayer ()))
416+ if ((*sItr )->IsRevealed () && (*sItr )->GetTeamOwnership () == GetTeamOfPlayer (metaPlayer) && (*sItr )->GetResidentBrain (m_Players[metaPlayer]-> GetInGamePlayer ()))
415417 brainCount += 1 ;
416418 }
417419 }
@@ -426,8 +428,8 @@ int MetaMan::GetGoldCountOfTeam(int team) const {
426428 float goldTotal = 0 ;
427429 // Go through all players and add up the funds of all who belong to this team
428430 for (int metaPlayer = Players::PlayerOne; metaPlayer < m_Players.size (); ++metaPlayer) {
429- if (m_Players[metaPlayer]. GetTeam () == team)
430- goldTotal += m_Players[metaPlayer]. GetFunds ();
431+ if (m_Players[metaPlayer]-> GetTeam () == team)
432+ goldTotal += m_Players[metaPlayer]-> GetFunds ();
431433 }
432434
433435 return goldTotal;
@@ -456,7 +458,7 @@ int MetaMan::GetTotalBrainCountOfTeam(int team, bool countPoolsOnly) const {
456458 int brainCount = 0 ;
457459
458460 for (int metaPlayer = Players::PlayerOne; metaPlayer < m_Players.size (); ++metaPlayer) {
459- if (m_Players[metaPlayer]. GetTeam () == team)
461+ if (m_Players[metaPlayer]-> GetTeam () == team)
460462 brainCount += GetTotalBrainCountOfPlayer (metaPlayer, countPoolsOnly);
461463 }
462464
@@ -535,8 +537,8 @@ int MetaMan::WhichTeamLeft()
535537
536538bool MetaMan::NoBrainsLeftInAnyPool () {
537539 // Go through all players and check each for any brains in any pool
538- for (std::vector<MetaPlayer>::iterator mpItr = m_Players.begin (); mpItr != m_Players.end (); ++mpItr) {
539- if ((*mpItr). GetBrainPoolCount () > 0 )
540+ for (std::vector<MetaPlayer* >::iterator mpItr = m_Players.begin (); mpItr != m_Players.end (); ++mpItr) {
541+ if ((*mpItr)-> GetBrainPoolCount () > 0 )
540542 return false ;
541543 }
542544 return true ;
@@ -616,15 +618,15 @@ float MetaMan::GetBudgetedRatioOfPlayer(int metaPlayer, const Scene* pException,
616618 for (std::vector<Scene*>::const_iterator sItr = g_MetaMan.m_Scenes .begin (); sItr != g_MetaMan.m_Scenes .end (); ++sItr ) {
617619 // Add up all the allocated funds so far this round, first of bases we're building
618620 if ((*sItr )->GetTeamOwnership () == g_MetaMan.GetTeamOfPlayer (metaPlayer) && *sItr != pException)
619- totalAllocated += (*sItr )->GetBuildBudget (m_Players[metaPlayer]. GetInGamePlayer ());
621+ totalAllocated += (*sItr )->GetBuildBudget (m_Players[metaPlayer]-> GetInGamePlayer ());
620622 }
621623 }
622624
623625 // Also the money allocated for offensive action
624- if (includeOffensive && !m_Players[metaPlayer]. GetOffensiveTargetName ().empty () && (!pException || (pException && pException->GetPresetName () != m_Players[metaPlayer]. GetOffensiveTargetName ())))
625- totalAllocated += m_Players[metaPlayer]. GetOffensiveBudget ();
626+ if (includeOffensive && !m_Players[metaPlayer]-> GetOffensiveTargetName ().empty () && (!pException || (pException && pException->GetPresetName () != m_Players[metaPlayer]-> GetOffensiveTargetName ())))
627+ totalAllocated += m_Players[metaPlayer]-> GetOffensiveBudget ();
626628
627- return totalAllocated / m_Players[metaPlayer]. GetFunds ();
629+ return totalAllocated / m_Players[metaPlayer]-> GetFunds ();
628630}
629631
630632void MetaMan::SetSuspend (bool suspend) {
@@ -761,7 +763,7 @@ void MetaMan::AIPlayerTurn(int metaPlayer) {
761763 if (metaPlayer < 0 || metaPlayer >= m_Players.size ())
762764 return ;
763765
764- MetaPlayer* pThisPlayer = &( m_Players[metaPlayer]) ;
766+ MetaPlayer* pThisPlayer = m_Players[metaPlayer];
765767
766768 // If this player has no brains at all left, then do nothing
767769 if (GetTotalBrainCountOfPlayer (metaPlayer) <= 0 ) {
@@ -1009,21 +1011,21 @@ void MetaMan::Update() {
10091011 int metaPlayer = m_GameState - PLAYER1TURN;
10101012
10111013 // If an AI player, do the AI player's logic now and go to next player immediately afterward
1012- if (!m_Players[metaPlayer]. IsHuman ())
1014+ if (!m_Players[metaPlayer]-> IsHuman ())
10131015 AIPlayerTurn (metaPlayer);
10141016
10151017 // State end - skip A.I. metaplayer turns in the GUI; also skip human player who have been knocked out of the game in previous rounds
1016- if (m_pMetaGUI->ContinuePhase () || !m_Players[metaPlayer]. IsHuman () || m_Players[metaPlayer]. IsGameOverByRound (m_CurrentRound)) {
1018+ if (m_pMetaGUI->ContinuePhase () || !m_Players[metaPlayer]-> IsHuman () || m_Players[metaPlayer]-> IsGameOverByRound (m_CurrentRound)) {
10171019 // If this player is now done for, mark him as such so he'll be completely skipped in future rounds
1018- if (GetTotalBrainCountOfPlayer (metaPlayer) <= 0 && !m_Players[metaPlayer]. IsGameOverByRound (m_CurrentRound))
1019- m_Players[metaPlayer]. SetGameOverRound (m_CurrentRound);
1020+ if (GetTotalBrainCountOfPlayer (metaPlayer) <= 0 && !m_Players[metaPlayer]-> IsGameOverByRound (m_CurrentRound))
1021+ m_Players[metaPlayer]-> SetGameOverRound (m_CurrentRound);
10201022
10211023 // Find the next player which is not out of the game yet
10221024 do {
10231025 // Next player, if any left
10241026 m_GameState++;
10251027 metaPlayer = m_GameState - PLAYER1TURN;
1026- } while (m_GameState <= PLAYER4TURN && metaPlayer < m_Players.size () && m_Players[metaPlayer]. IsGameOverByRound (m_CurrentRound));
1028+ } while (m_GameState <= PLAYER4TURN && metaPlayer < m_Players.size () && m_Players[metaPlayer]-> IsGameOverByRound (m_CurrentRound));
10271029
10281030 // If not, jump to building bases
10291031 if (m_GameState > PLAYER4TURN || metaPlayer >= m_Players.size ())
0 commit comments