void CvGame::doTurn()
{
PROFILE_BEGIN("CvGame::doTurn()");
int aiShuffle[MAX_PLAYERS];
int iLoopPlayer;
int iI;
// END OF TURN
[b] // I'm not sure what's up with that above comment, but this is the onBeginGameTurn hook [/b]
gDLL->getEventReporterIFace()->beginGameTurn( getGameTurn() );
updateScore();
doDeals();
for (iI = 0; iI < MAX_TEAMS; iI++)
{
if (GET_TEAM((TeamTypes)iI).isAlive())
{
[b] // onBeginPlayerTurn and onEndPlayerTurn are in this call.[/b]
GET_TEAM((TeamTypes)iI).doTurn();
}
}
GC.getMapINLINE().doTurn();
createBarbarianCities();
createBarbarianUnits();
doGlobalWarming();
doHolyCity();
doDiploVote();
gDLL->getInterfaceIFace()->setEndTurnMessage(false);
gDLL->getInterfaceIFace()->setHasMovedUnit(false);
if (getAIAutoPlay() > 0)
{
changeAIAutoPlay(-1);
if (getAIAutoPlay() == 0)
{
reviveActivePlayer();
}
}
// XXX
#ifdef _DEBUG
if (!isGameMultiPlayer() && (getActivePlayer() != NO_PLAYER))
{
if (!(GET_PLAYER(getActivePlayer()).isAlive()))
{
if (getGameTurnYear() == 2000)
{
reviveActivePlayer();
if (!isDebugMode())
{
toggleDebugMode();
}
}
}
}
#endif
// XXX
[b]// onEndGameTurn here. [/b]
gDLL->getEventReporterIFace()->endGameTurn(getGameTurn());
[b] // Where the turn is actually incremented [/b]
incrementGameTurn();
incrementElapsedGameTurns();
if (isMPOption(MPOPTION_SIMULTANEOUS_TURNS))
{
shuffleArray(aiShuffle, MAX_PLAYERS, GC.getGameINLINE().getSorenRand());
for (iI = 0; iI < MAX_PLAYERS; iI++)
{
iLoopPlayer = aiShuffle[iI];
if (GET_PLAYER((PlayerTypes)iLoopPlayer).isAlive())
{
GET_PLAYER((PlayerTypes)iLoopPlayer).setTurnActive(true);
}
}
}
else
{
for (iI = 0; iI < MAX_PLAYERS; iI++)
{
if (GET_PLAYER((PlayerTypes)iI).isAlive())
{
if (isPbem() && GET_PLAYER((PlayerTypes)iI).isHuman())
{
if (iI == getActivePlayer())
{
// Nobody else left alive
GC.getInitCore().setType(GAME_HOTSEAT_NEW);
GET_PLAYER((PlayerTypes)iI).setTurnActive(true);
}
else if (!getPbemTurnSent())
{
gDLL->sendPbemTurn((PlayerTypes)iI);
}
}
else
{
GET_PLAYER((PlayerTypes)iI).setTurnActive(true);
FAssert(getNumGameTurnActive() == 1);
}
break;
}
}
}
testVictory();
gDLL->getEngineIFace()->SetDirty(GlobePartialTexture_DIRTY_BIT, true);
PROFILE_END();
stopProfilingDLL();
gDLL->getEngineIFace()->AutoSave();
[b]// Maybe add this?
CyArgsList pyArgs;
pyArgs.add(getGameTurn() - 1);
gDLL->getEventReporterIFace()->genericEvent("realEndGameTurn", pyArgs.makeFunctionArgs());[/b]
}