diff --git a/source/network/Client.cpp b/source/network/Client.cpp index 6c740422bd..6ead732937 100644 --- a/source/network/Client.cpp +++ b/source/network/Client.cpp @@ -39,8 +39,6 @@ CNetClient::CNetClient(CGame *pGame, CGameAttributes *pGameAttribs): m_pGameAttributes(pGameAttribs), m_TurnPending(false) { - ONCE( ScriptingInit(); ); - m_pGame->GetSimulation()->SetTurnManager(this); g_ScriptingHost.SetGlobal("g_NetClient", OBJECT_TO_JSVAL(GetScript())); diff --git a/source/network/Client.h b/source/network/Client.h index b5f9eac153..7a13f4b785 100644 --- a/source/network/Client.h +++ b/source/network/Client.h @@ -56,7 +56,6 @@ class CNetClient: public CNetSession, protected CTurnManager, public CJSObjectSetUpdateCallback(AttributeUpdate, this); m_pGameAttributes->SetPlayerUpdateCallback(PlayerAttributeUpdate, this); m_pGameAttributes->SetPlayerSlotAssignmentCallback(PlayerSlotAssignmentCallback, this); @@ -103,9 +99,6 @@ void CNetServer::ScriptingInit() AddProperty(L"onClientDisconnect", &CNetServer::m_OnClientDisconnect); CJSObject::ScriptingInit("NetServer"); - - // Also initialize CNetServerSession - CNetServerSession::ScriptingInit(); } bool CNetServer::JSI_Open(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) diff --git a/source/network/Server.h b/source/network/Server.h index 0615159e18..cb6ed415a6 100644 --- a/source/network/Server.h +++ b/source/network/Server.h @@ -80,7 +80,6 @@ private: // JS Interface Methods bool JSI_Open(JSContext *cx, uintN argc, jsval *argv); - static void ScriptingInit(); // Synchronization object for batches CMutex m_Mutex; @@ -145,6 +144,8 @@ public: int StartGame(); void Broadcast(CNetMessage *); + + static void ScriptingInit(); }; extern CNetServer *g_NetServer; diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index 24551eb32c..469eebb57a 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -43,20 +43,17 @@ #include "maths/MathUtil.h" +#include "simulation/scripting/SimulationScriptInit.h" #include "simulation/Entity.h" -#include "simulation/EntityHandles.h" -#include "simulation/EntityManager.h" -#include "simulation/EntityTemplate.h" -#include "simulation/EntityTemplateCollection.h" -#include "simulation/EventHandlers.h" -#include "simulation/FormationCollection.h" #include "simulation/FormationManager.h" -#include "simulation/TerritoryManager.h" #include "simulation/TriggerManager.h" -#include "simulation/PathfindEngine.h" -#include "simulation/Projectile.h" -#include "simulation/Scheduler.h" +#include "simulation/FormationCollection.h" #include "simulation/TechnologyCollection.h" +#include "simulation/EntityManager.h" +#include "simulation/EntityTemplateCollection.h" +#include "simulation/Scheduler.h" +#include "simulation/EventHandlers.h" +#include "simulation/PathfindEngine.h" #include "scripting/ScriptableComplex.inl" #include "scripting/ScriptingHost.h" @@ -479,33 +476,30 @@ static void RegisterJavascriptInterfaces() // sound JSI_Sound::ScriptingInit(); + // scripting + SColour::ScriptingInit(); + CScriptEvent::ScriptingInit(); + // call CJSComplexPropertyAccessor's ScriptingInit. doesn't really + // matter which we use, but we know CJSPropertyAccessor is + // already being compiled for T = CEntity. + ScriptableComplex_InitComplexPropertyAccessor(); + // ps JSI_Console::init(); CProfileNode::ScriptingInit(); CGameAttributes::ScriptingInit(); CPlayerSlot::ScriptingInit(); CPlayer::ScriptingInit(); + PlayerCollection::Init( "PlayerCollection" ); // network CNetMessage::ScriptingInit(); + CNetClient::ScriptingInit(); + CNetServer::ScriptingInit(); CNetServerSession::ScriptingInit(); // simulation - CJSProgressTimer::ScriptingInit(); - CEntityTemplate::ScriptingInit(); - CEntity::ScriptingInit(); - CProjectile::ScriptingInit(); - CTrigger::ScriptingInit(); - - // scripting - SColour::ScriptingInit(); - CScriptEvent::ScriptingInit(); - EntityCollection::Init( "EntityCollection" ); - PlayerCollection::Init( "PlayerCollection" ); - // call CJSComplexPropertyAccessor's ScriptingInit. doesn't really - // matter which we use, but we know CJSPropertyAccessor is - // already being compiled for T = CEntity. - ScriptableComplex_InitComplexPropertyAccessor(); + SimulationScriptInit(); // GUI #ifndef NO_GUI diff --git a/source/simulation/ProductionQueue.cpp b/source/simulation/ProductionQueue.cpp index 771829ef07..47a584bc6c 100644 --- a/source/simulation/ProductionQueue.cpp +++ b/source/simulation/ProductionQueue.cpp @@ -10,7 +10,6 @@ CProductionItem::CProductionItem( int type, const CStrW& name, float totalTime ) : m_type(type), m_name(name), m_totalTime(totalTime), m_elapsedTime(0) { - ONCE( ScriptingInit(); ); } CProductionItem::~CProductionItem() @@ -52,7 +51,6 @@ void CProductionItem::ScriptingInit() CProductionQueue::CProductionQueue( CEntity* owner ) : m_owner(owner) { - ONCE( ScriptingInit(); ); } CProductionQueue::~CProductionQueue() diff --git a/source/simulation/Technology.cpp b/source/simulation/Technology.cpp index fd113e6cef..38fe975b48 100644 --- a/source/simulation/Technology.cpp +++ b/source/simulation/Technology.cpp @@ -20,8 +20,6 @@ STL_HASH_SET CTechnology::m_scriptsLoaded; CTechnology::CTechnology( const CStrW& name, CPlayer* player ) : m_Name(name), m_player(player) { - ONCE( ScriptingInit(); ); - m_researched = false; m_excluded = false; m_inProgress = false; diff --git a/source/simulation/scripting/SimulationScriptInit.cpp b/source/simulation/scripting/SimulationScriptInit.cpp new file mode 100644 index 0000000000..567d32960e --- /dev/null +++ b/source/simulation/scripting/SimulationScriptInit.cpp @@ -0,0 +1,23 @@ +#include "precompiled.h" + +#include "simulation/Scheduler.h" +#include "simulation/EntityTemplate.h" +#include "simulation/Entity.h" +#include "simulation/Projectile.h" +#include "simulation/TriggerManager.h" +#include "simulation/ProductionQueue.h" +#include "simulation/Technology.h" + +void SimulationScriptInit() +{ + CJSProgressTimer::ScriptingInit(); + CEntityTemplate::ScriptingInit(); + CEntity::ScriptingInit(); + CProjectile::ScriptingInit(); + CTrigger::ScriptingInit(); + CProductionItem::ScriptingInit(); + CProductionQueue::ScriptingInit(); + CTechnology::ScriptingInit(); + + EntityCollection::Init( "EntityCollection" ); +} diff --git a/source/simulation/scripting/SimulationScriptInit.h b/source/simulation/scripting/SimulationScriptInit.h new file mode 100644 index 0000000000..05993804fc --- /dev/null +++ b/source/simulation/scripting/SimulationScriptInit.h @@ -0,0 +1 @@ +extern void SimulationScriptInit();