1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "GlobalSynced.h"
#include <assert.h>
#include <cstring>
#include "ExternalAI/SkirmishAIHandler.h"
#include "Game/GameSetup.h"
#include "Sim/Misc/TeamHandler.h"
#include "Sim/Misc/GlobalConstants.h"
#include "System/SafeUtil.h"
#include "System/Log/FramePrefixer.h"
#ifdef SYNCCHECK
#include "System/Sync/SyncChecker.h"
#endif
/**
* @brief global synced
*
* Global instance of CGlobalSynced
*/
CGlobalSynced* gs = nullptr;
CGlobalSyncedRNG gsRNG;
CR_BIND(CGlobalSynced, )
CR_REG_METADATA(CGlobalSynced, (
CR_MEMBER(frameNum),
CR_MEMBER(tempNum),
CR_MEMBER(speedFactor),
CR_MEMBER(wantedSpeedFactor),
CR_MEMBER(paused),
CR_MEMBER(godMode),
CR_MEMBER(cheatEnabled),
CR_MEMBER(noHelperAIs),
CR_MEMBER(editDefsEnabled),
CR_MEMBER(useLuaGaia)
))
/**
* Initializes variables in CGlobalSynced
*/
CGlobalSynced::CGlobalSynced()
{
assert(teamHandler == nullptr);
ResetState();
}
CGlobalSynced::~CGlobalSynced()
{
spring::SafeDelete(teamHandler);
assert(teamHandler == nullptr);
log_framePrefixer_setFrameNumReference(nullptr);
}
void CGlobalSynced::ResetState() {
frameNum = -1; // first real frame is 0
tempNum = 1;
#ifdef SYNCCHECK
// reset checksum
CSyncChecker::NewFrame();
#endif
speedFactor = 1.0f;
wantedSpeedFactor = 1.0f;
paused = false;
godMode = false;
cheatEnabled = false;
noHelperAIs = false;
editDefsEnabled = false;
useLuaGaia = true;
gsRNG.SetSeed(18655, true);
log_framePrefixer_setFrameNumReference(&frameNum);
if (teamHandler == NULL) {
// needs to be available as early as PreGame
teamHandler = new CTeamHandler();
} else {
// less cavemanly than delete + new
teamHandler->ResetState();
skirmishAIHandler.ResetState();
}
}
void CGlobalSynced::LoadFromSetup(const CGameSetup* setup)
{
noHelperAIs = setup->noHelperAIs;
useLuaGaia = setup->useLuaGaia;
teamHandler->LoadFromSetup(setup);
skirmishAIHandler.LoadFromSetup(*setup);
}
|