Properly handle auto-research promotion techs at game start.
This was SVN commit r16009.
This commit is contained in:
parent
7102f86de3
commit
1430efa9d6
@ -1,10 +1,19 @@
|
||||
function ReplaceSkirmishGlobals()
|
||||
/**
|
||||
* Called when the map has been loaded, but before the simulation has started.
|
||||
* Only called when a new game is started, not when loading a saved game.
|
||||
*/
|
||||
function PreInitGame()
|
||||
{
|
||||
// This will be called after the map settings have been loaded,
|
||||
// before the simulation has started.
|
||||
// This is only called at the start of a new game, not when loading
|
||||
// a saved game.
|
||||
Engine.BroadcastMessage(MT_SkirmishReplace, {});
|
||||
|
||||
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
let playerIds = cmpPlayerManager.GetAllPlayerEntities().slice(1); // ignore gaia
|
||||
for (let playerId of playerIds)
|
||||
{
|
||||
let cmpTechnologyManager = Engine.QueryInterface(playerId, IID_TechnologyManager);
|
||||
if (cmpTechnologyManager)
|
||||
cmpTechnologyManager.UpdateAutoResearch();
|
||||
}
|
||||
}
|
||||
|
||||
function InitGame(settings)
|
||||
@ -13,25 +22,19 @@ function InitGame(settings)
|
||||
if (!settings)
|
||||
return;
|
||||
|
||||
let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
|
||||
if (settings.ExploreMap)
|
||||
{
|
||||
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
|
||||
if (cmpRangeManager)
|
||||
for (var i = 0; i < settings.PlayerData.length; i++)
|
||||
cmpRangeManager.ExploreAllTiles(i+1);
|
||||
}
|
||||
for (var i = 0; i < settings.PlayerData.length; i++)
|
||||
cmpRangeManager.ExploreAllTiles(i+1);
|
||||
else
|
||||
{
|
||||
// Explore the map only inside the players' territory borders
|
||||
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
|
||||
cmpRangeManager.ExploreTerritories();
|
||||
}
|
||||
|
||||
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
var cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager);
|
||||
for (var i = 0; i < settings.PlayerData.length; ++i)
|
||||
let cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||
let cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager);
|
||||
for (let i = 0; i < settings.PlayerData.length; ++i)
|
||||
{
|
||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);
|
||||
let cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);
|
||||
cmpPlayer.SetCheatsEnabled(!!settings.CheatsEnabled);
|
||||
if (settings.PlayerData[i] && settings.PlayerData[i].AI && settings.PlayerData[i].AI != "")
|
||||
{
|
||||
@ -45,9 +48,9 @@ function InitGame(settings)
|
||||
|
||||
if (settings.mapType !== "scenario" && settings.StartingResources)
|
||||
{
|
||||
var resourceCounts = cmpPlayer.GetResourceCounts();
|
||||
var newResourceCounts = {};
|
||||
for (var resouces in resourceCounts)
|
||||
let resourceCounts = cmpPlayer.GetResourceCounts();
|
||||
let newResourceCounts = {};
|
||||
for (let resouces in resourceCounts)
|
||||
newResourceCounts[resouces] = settings.StartingResources;
|
||||
cmpPlayer.SetResourceCounts(newResourceCounts);
|
||||
}
|
||||
@ -58,5 +61,5 @@ function InitGame(settings)
|
||||
cmpAIManager.RunGamestateInit();
|
||||
}
|
||||
|
||||
Engine.RegisterGlobal("ReplaceSkirmishGlobals", ReplaceSkirmishGlobals);
|
||||
Engine.RegisterGlobal("PreInitGame", PreInitGame);
|
||||
Engine.RegisterGlobal("InitGame", InitGame);
|
||||
|
@ -54,11 +54,6 @@ function LoadPlayerSettings(settings, newPlayers)
|
||||
|
||||
// Add player to player manager
|
||||
cmpPlayerManager.AddPlayer(entID);
|
||||
|
||||
// Properly autoresearch techs on init.
|
||||
var cmpTechManager = Engine.QueryInterface(entID, IID_TechnologyManager);
|
||||
if (cmpTechManager !== undefined)
|
||||
cmpTechManager.UpdateAutoResearch();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -219,7 +219,7 @@ PSRETURN CGame::ReallyStartGame()
|
||||
// And we need to flush destroyed entities otherwise the AI
|
||||
// gets the wrong game state in the beginning and a bunch of
|
||||
// "destroy" messages on turn 0, which just shouldn't happen.
|
||||
m_Simulation2->ReplaceSkirmishGlobals();
|
||||
m_Simulation2->PreInitGame();
|
||||
m_Simulation2->FlushDestroyedEntities();
|
||||
}
|
||||
JS::RootedValue settings(cx);
|
||||
|
@ -649,12 +649,12 @@ ScriptInterface& CSimulation2::GetScriptInterface() const
|
||||
return m->m_ComponentManager.GetScriptInterface();
|
||||
}
|
||||
|
||||
void CSimulation2::ReplaceSkirmishGlobals()
|
||||
void CSimulation2::PreInitGame()
|
||||
{
|
||||
JSContext* cx = GetScriptInterface().GetContext();
|
||||
JSAutoRequest rq(cx);
|
||||
JS::RootedValue global(cx, GetScriptInterface().GetGlobalObject());
|
||||
GetScriptInterface().CallFunctionVoid(global, "ReplaceSkirmishGlobals");
|
||||
GetScriptInterface().CallFunctionVoid(global, "PreInitGame");
|
||||
}
|
||||
|
||||
void CSimulation2::InitGame(const CScriptVal& data)
|
||||
|
@ -148,12 +148,12 @@ public:
|
||||
void ResetState(bool skipScriptedComponents = false, bool skipAI = false);
|
||||
|
||||
/**
|
||||
* Send a message to replace skirmish entities with real ones
|
||||
* Replace/destroy some entities (e.g. skirmish replacers)
|
||||
* Called right before InitGame, on CGame instantiation.
|
||||
* (This mustn't be used when e.g. loading saved games, only when starting new ones.)
|
||||
* This calls the ReplaceSkirmishGlobals function defined in helpers/InitGame.js.
|
||||
* This calls the PreInitGame function defined in helpers/InitGame.js.
|
||||
*/
|
||||
void ReplaceSkirmishGlobals();
|
||||
void PreInitGame();
|
||||
|
||||
/**
|
||||
* Initialise a new game, based on some script data. (Called on CGame instantiation)
|
||||
|
Loading…
Reference in New Issue
Block a user