@@ -210,8 +210,8 @@ int MetaMan::ReadProperty(const std::string_view& propName, Reader& reader) {
210
210
MatchProperty (" GameName" , { reader >> m_GameName; });
211
211
MatchProperty (" AddPlayer" ,
212
212
{
213
- MetaPlayer player;
214
- reader >> player;
213
+ MetaPlayer* player = new MetaPlayer () ;
214
+ reader >> * player;
215
215
m_Players.push_back (player);
216
216
});
217
217
MatchProperty (" TeamCount" , { reader >> m_TeamCount; });
@@ -255,8 +255,8 @@ int MetaMan::Save(Writer& writer) const {
255
255
writer.NewPropertyWithValue (" Team3AISkill" , m_TeamAISkill[Activity::TeamThree]);
256
256
writer.NewPropertyWithValue (" Team4AISkill" , m_TeamAISkill[Activity::TeamFour]);
257
257
258
- for (const MetaPlayer& metaPlayer: m_Players) {
259
- writer.NewPropertyWithValue (" AddPlayer" , metaPlayer);
258
+ for (const MetaPlayer* metaPlayer: m_Players) {
259
+ writer.NewPropertyWithValue (" AddPlayer" , * metaPlayer);
260
260
}
261
261
262
262
writer.NewPropertyWithValue (" TeamCount" , m_TeamCount);
@@ -301,6 +301,19 @@ int MetaMan::Save(Writer& writer) const {
301
301
return 0 ;
302
302
}
303
303
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
+
304
317
int MetaMan::SaveSceneData (std::string pathBase) {
305
318
for (std::vector<Scene*>::const_iterator sItr = m_Scenes.begin (); sItr != m_Scenes.end (); ++sItr ) {
306
319
// 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() {
333
346
return 0 ;
334
347
}
335
348
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
-
347
349
int MetaMan::GetPlayerTurn () const {
348
350
// Player 1's turn is coming up on this round
349
351
if (g_MetaMan.m_GameState <= PLAYER1TURN)
@@ -357,9 +359,9 @@ int MetaMan::GetPlayerTurn() const {
357
359
}
358
360
359
361
MetaPlayer* 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);
363
365
}
364
366
365
367
// Didn't find any metaplayer that is using that in-game player
@@ -404,14 +406,14 @@ int MetaMan::GetTotalBrainCountOfPlayer(int metaPlayer, bool countPoolsOnly) con
404
406
return 0 ;
405
407
406
408
// Count the pool first
407
- int brainCount = m_Players[metaPlayer]. GetBrainPoolCount ();
409
+ int brainCount = m_Players[metaPlayer]-> GetBrainPoolCount ();
408
410
// Plus any that are out travelling between sites
409
- brainCount += m_Players[metaPlayer]. GetBrainsInTransit ();
411
+ brainCount += m_Players[metaPlayer]-> GetBrainsInTransit ();
410
412
411
413
if (!countPoolsOnly) {
412
414
for (std::vector<Scene*>::const_iterator sItr = m_Scenes.begin (); sItr != m_Scenes.end (); ++sItr ) {
413
415
// 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 ()))
415
417
brainCount += 1 ;
416
418
}
417
419
}
@@ -426,8 +428,8 @@ int MetaMan::GetGoldCountOfTeam(int team) const {
426
428
float goldTotal = 0 ;
427
429
// Go through all players and add up the funds of all who belong to this team
428
430
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 ();
431
433
}
432
434
433
435
return goldTotal;
@@ -456,7 +458,7 @@ int MetaMan::GetTotalBrainCountOfTeam(int team, bool countPoolsOnly) const {
456
458
int brainCount = 0 ;
457
459
458
460
for (int metaPlayer = Players::PlayerOne; metaPlayer < m_Players.size (); ++metaPlayer) {
459
- if (m_Players[metaPlayer]. GetTeam () == team)
461
+ if (m_Players[metaPlayer]-> GetTeam () == team)
460
462
brainCount += GetTotalBrainCountOfPlayer (metaPlayer, countPoolsOnly);
461
463
}
462
464
@@ -535,8 +537,8 @@ int MetaMan::WhichTeamLeft()
535
537
536
538
bool MetaMan::NoBrainsLeftInAnyPool () {
537
539
// 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 )
540
542
return false ;
541
543
}
542
544
return true ;
@@ -616,15 +618,15 @@ float MetaMan::GetBudgetedRatioOfPlayer(int metaPlayer, const Scene* pException,
616
618
for (std::vector<Scene*>::const_iterator sItr = g_MetaMan.m_Scenes .begin (); sItr != g_MetaMan.m_Scenes .end (); ++sItr ) {
617
619
// Add up all the allocated funds so far this round, first of bases we're building
618
620
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 ());
620
622
}
621
623
}
622
624
623
625
// 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 ();
626
628
627
- return totalAllocated / m_Players[metaPlayer]. GetFunds ();
629
+ return totalAllocated / m_Players[metaPlayer]-> GetFunds ();
628
630
}
629
631
630
632
void MetaMan::SetSuspend (bool suspend) {
@@ -761,7 +763,7 @@ void MetaMan::AIPlayerTurn(int metaPlayer) {
761
763
if (metaPlayer < 0 || metaPlayer >= m_Players.size ())
762
764
return ;
763
765
764
- MetaPlayer* pThisPlayer = &( m_Players[metaPlayer]) ;
766
+ MetaPlayer* pThisPlayer = m_Players[metaPlayer];
765
767
766
768
// If this player has no brains at all left, then do nothing
767
769
if (GetTotalBrainCountOfPlayer (metaPlayer) <= 0 ) {
@@ -1009,21 +1011,21 @@ void MetaMan::Update() {
1009
1011
int metaPlayer = m_GameState - PLAYER1TURN;
1010
1012
1011
1013
// 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 ())
1013
1015
AIPlayerTurn (metaPlayer);
1014
1016
1015
1017
// 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)) {
1017
1019
// 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);
1020
1022
1021
1023
// Find the next player which is not out of the game yet
1022
1024
do {
1023
1025
// Next player, if any left
1024
1026
m_GameState++;
1025
1027
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));
1027
1029
1028
1030
// If not, jump to building bases
1029
1031
if (m_GameState > PLAYER4TURN || metaPlayer >= m_Players.size ())
0 commit comments