Browse Source

Merge remote-tracking branch 'BlueMagnificent/global_variable'

Lasse Öörni 9 years ago
parent
commit
cf64853faa

+ 3 - 0
Docs/LuaScriptAPI.dox

@@ -7812,6 +7812,8 @@ Properties:
 - String GetFileSizeString(long memorySize)
 - FileSystem* GetFileSystem()
 - Graphics* GetGraphics()
+- Variant GetGlobalVar(const String key)
+- VariantMap& GetGlobalVars()
 - Input* GetInput()
 - String GetInternalPath(const String pathName)
 - Localization* GetLocalization()
@@ -7856,6 +7858,7 @@ Properties:
 - unsigned SDBMHash(unsigned hash, char c)
 - void SendEvent(const String eventName, VariantMap& eventData)
 - void SetExecuteConsoleCommands(bool enable)
+- void SetGlobalVar(const String key, Variant value)
 - void SetMiniDumpDir(const String pathName)
 - void SetRandomSeed(unsigned seed)
 - float Sign(float value)

+ 18 - 0
Source/Urho3D/AngelScript/CoreAPI.cpp

@@ -911,6 +911,21 @@ static void DestructWeakHandle(WeakPtr<RefCounted>* ptr)
     ptr->~WeakPtr<RefCounted>();
 }
 
+static void SetGlobalVar(const String& key, Variant value)
+{
+    GetScriptContext()->SetGlobalVar(key, value);
+}
+
+static Variant GetGlobalVar(const String& key)
+{
+    return GetScriptContext()->GetGlobalVar(key);
+}
+
+static VariantMap& GetGlobalVars()
+{
+    return const_cast<VariantMap&>(GetScriptContext()->GetGlobalVars());
+}
+
 void RegisterObject(asIScriptEngine* engine)
 {
     engine->RegisterObjectType("AttributeInfo", sizeof(AttributeInfo), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
@@ -938,6 +953,9 @@ void RegisterObject(asIScriptEngine* engine)
     engine->RegisterGlobalFunction("bool HasSubscribedToEvent(Object@+, const String&in)", asFUNCTION(HasSubscribedToSenderEvent), asCALL_CDECL);
     engine->RegisterGlobalFunction("Object@+ GetEventSender()", asFUNCTION(GetEventSender), asCALL_CDECL);
     engine->RegisterGlobalFunction("const String& GetTypeName(StringHash)", asFUNCTION(GetTypeName), asCALL_CDECL);
+    engine->RegisterGlobalFunction("void SetGlobalVar(const  String&in, Variant&in)", asFUNCTION(SetGlobalVar), asCALL_CDECL);
+    engine->RegisterGlobalFunction("Variant GetGlobalVar(const String&in)", asFUNCTION(GetGlobalVar), asCALL_CDECL);
+    engine->RegisterGlobalFunction("VariantMap& get_globalVars()", asFUNCTION(GetGlobalVars), asCALL_CDECL);
 
     engine->RegisterObjectType("WeakHandle", sizeof(WeakPtr<RefCounted>), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
     engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructWeakHandle), asCALL_CDECL_OBJLAST);

+ 0 - 1
Source/Urho3D/AngelScript/Script.cpp

@@ -65,7 +65,6 @@ class ScriptResourceRouter : public ResourceRouter
     }
 };
 
-VariantMap Script::globalVars;
 
 Script::Script(Context* context) :
     Object(context),

+ 0 - 2
Source/Urho3D/AngelScript/Script.h

@@ -102,8 +102,6 @@ public:
     /// Return the script module create/delete mutex.
     Mutex& GetModuleMutex() { return moduleMutex_; }
 
-    /// Variant map for global variables that can persist through a script program reload.
-    static VariantMap globalVars;
 
 private:
     /// Increase script nesting level.

+ 0 - 1
Source/Urho3D/AngelScript/ScriptAPI.cpp

@@ -276,7 +276,6 @@ static void RegisterScript(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Script", "void set_executeConsoleCommands(bool)", asMETHOD(Script, SetExecuteConsoleCommands), asCALL_THISCALL);
     engine->RegisterObjectMethod("Script", "bool get_executeConsoleCommands() const", asMETHOD(Script, GetExecuteConsoleCommands), asCALL_THISCALL);
     engine->RegisterGlobalFunction("Script@+ get_script()", asFUNCTION(GetScript), asCALL_CDECL);
-    engine->RegisterGlobalProperty("VariantMap globalVars", &Script::globalVars);
 }
 
 static void RegisterScriptObject(asIScriptEngine* engine)

+ 11 - 0
Source/Urho3D/Core/Context.cpp

@@ -198,6 +198,17 @@ Object* Context::GetSubsystem(StringHash type) const
         return 0;
 }
 
+const Variant& Context::GetGlobalVar(StringHash key) const
+{
+    VariantMap::ConstIterator i = globalVars_.Find(key);
+    return i != globalVars_.End() ? i->second_ : Variant::EMPTY;
+}
+
+void Context::SetGlobalVar(StringHash key, const Variant& value)
+{
+    globalVars_[key] = value;
+}
+
 Object* Context::GetEventSender() const
 {
     if (!eventSenders_.Empty())

+ 11 - 0
Source/Urho3D/Core/Context.h

@@ -78,6 +78,15 @@ public:
 
     /// Return subsystem by type.
     Object* GetSubsystem(StringHash type) const;
+    
+    /// Return global variable based on key
+    const Variant& GetGlobalVar(StringHash key) const ;
+
+    /// Return all global variables.
+    const VariantMap& GetGlobalVars() const { return globalVars_; }
+
+    /// Set global variable with the respective key and value
+    void SetGlobalVar(StringHash key, const Variant& value);
 
     /// Return all subsystems.
     const HashMap<StringHash, SharedPtr<Object> >& GetSubsystems() const { return subsystems_; }
@@ -181,6 +190,8 @@ private:
     EventHandler* eventHandler_;
     /// Object categories.
     HashMap<String, Vector<StringHash> > objectCategories_;
+    /// Variant map for global variables that can persist throughout application execution.
+    VariantMap globalVars_;
 };
 
 template <class T> void Context::RegisterFactory() { RegisterFactory(new ObjectFactoryImpl<T>(this)); }

+ 15 - 0
Source/Urho3D/Core/Object.cpp

@@ -393,6 +393,21 @@ VariantMap& Object::GetEventDataMap() const
     return context_->GetEventDataMap();
 }
 
+const Variant& Object::GetGlobalVar(StringHash key) const
+{
+    return context_->GetGlobalVar(key);
+}
+
+const VariantMap& Object::GetGlobalVars() const 
+{ 
+    return context_->GetGlobalVars(); 
+}
+
+void Object::SetGlobalVar(StringHash key, const Variant& value)
+{
+    context_->SetGlobalVar(key, value);
+}
+
 Object* Object::GetSubsystem(StringHash type) const
 {
     return context_->GetSubsystem(type);

+ 6 - 1
Source/Urho3D/Core/Object.h

@@ -132,7 +132,12 @@ public:
 
     /// Return execution context.
     Context* GetContext() const { return context_; }
-
+    /// Return global variable based on key
+    const Variant& GetGlobalVar(StringHash key) const;
+    /// Return all global variables
+    const VariantMap& GetGlobalVars() const;
+    /// Set global variable with the respective key and value
+    void SetGlobalVar(StringHash key, const Variant& value);
     /// Return subsystem by type.
     Object* GetSubsystem(StringHash type) const;
     /// Return active event sender. Null outside event handling.

+ 8 - 0
Source/Urho3D/LuaScript/pkgs/LuaScript/LuaScript.pkg

@@ -16,6 +16,10 @@ void LuaScriptSendEvent @ SendEvent(const String eventName, VariantMap& eventDat
 void LuaScriptSetExecuteConsoleCommands @ SetExecuteConsoleCommands(bool enable);
 bool LuaScriptGetExecuteConsoleCommands @ GetExecuteConsoleCommands();
 
+void LuaScriptSetGlobalVar @ SetGlobalVar(const String key, Variant value);
+Variant LuaScriptGetGlobalVar @ GetGlobalVar(const String key);
+VariantMap& LuaScriptGetGlobalVars @ GetGlobalVars();
+
 ${
 static LuaScript* GetLuaScript(lua_State* L)
 {
@@ -33,6 +37,10 @@ static LuaScript* GetLuaScript(lua_State* L)
 #define LuaScriptSetExecuteConsoleCommands GetLuaScript(tolua_S)->SetExecuteConsoleCommands
 #define LuaScriptGetExecuteConsoleCommands GetLuaScript(tolua_S)->GetExecuteConsoleCommands
 
+#define LuaScriptSetGlobalVar GetLuaScript(tolua_S)->SetGlobalVar
+#define LuaScriptGetGlobalVar GetLuaScript(tolua_S)->GetGlobalVar
+#define LuaScriptGetGlobalVars GetLuaScript(tolua_S)->GetGlobalVars
+
 static bool tolua_isfunctionorurho3dstring(lua_State* L, int lo, int def, tolua_Error* err)
 {
     return lua_isfunction(L, lo) || tolua_isurho3dstring(L, lo, def, err);