浏览代码

Eliminated the static Context pointer from LuaScript subsystem. Removed classes which aren't actual subsystems from Context.pkg.

Lasse Öörni 12 年之前
父节点
当前提交
250d1ced11

+ 1 - 10
Source/Engine/LuaScript/LuaScript.cpp

@@ -63,14 +63,10 @@ extern int tolua_LuaScriptLuaAPI_open(lua_State*);
 namespace Urho3D
 namespace Urho3D
 {
 {
 
 
-static Context* currentContext_ = 0;
-
 LuaScript::LuaScript(Context* context) :
 LuaScript::LuaScript(Context* context) :
     Object(context),
     Object(context),
     luaState_(0)
     luaState_(0)
 {
 {
-    currentContext_ = context_;
-
     RegisterLuaScriptLibrary(context_);
     RegisterLuaScriptLibrary(context_);
 
 
     luaState_ = luaL_newstate();
     luaState_ = luaL_newstate();
@@ -269,7 +265,7 @@ int LuaScript::AtPanic(lua_State* L)
 
 
 int LuaScript::Loader(lua_State* L)
 int LuaScript::Loader(lua_State* L)
 {
 {
-    ResourceCache* cache = currentContext_->GetSubsystem<ResourceCache>();
+    ResourceCache* cache = ::GetContext(L)->GetSubsystem<ResourceCache>();
     if (!cache)
     if (!cache)
         return 0;
         return 0;
 
 
@@ -425,9 +421,4 @@ void RegisterLuaScriptLibrary(Context* context)
     LuaScriptInstance::RegisterObject(context);
     LuaScriptInstance::RegisterObject(context);
 }
 }
 
 
-Context* GetContext()
-{
-    return currentContext_;
-}
-
 }
 }

+ 0 - 3
Source/Engine/LuaScript/LuaScript.h

@@ -106,7 +106,4 @@ private:
 /// Register Lua script library objects.
 /// Register Lua script library objects.
 void URHO3D_API RegisterLuaScriptLibrary(Context* context);
 void URHO3D_API RegisterLuaScriptLibrary(Context* context);
 
 
-/// Return context.
-Context* GetContext();
-
 }
 }

+ 1 - 1
Source/Engine/LuaScript/ToluaUtils.cpp

@@ -48,7 +48,7 @@ void SetContext(lua_State* L, Context* context)
 }
 }
 
 
 Context* GetContext(lua_State* L)
 Context* GetContext(lua_State* L)
-{   
+{
     HashMap<void*, Context*>::ConstIterator i = contextMapping.Find(L);
     HashMap<void*, Context*>::ConstIterator i = contextMapping.Find(L);
     if (i == contextMapping.End())
     if (i == contextMapping.End())
         return 0;
         return 0;

+ 2 - 0
Source/Engine/LuaScript/ToluaUtils.h

@@ -114,3 +114,5 @@ template<> int ToluaPushPODVector<OctreeQueryResult>(lua_State* L, void* data, c
 template<> int ToluaPushPODVector<PhysicsRaycastResult>(lua_State* L, void* data, const char* type);
 template<> int ToluaPushPODVector<PhysicsRaycastResult>(lua_State* L, void* data, const char* type);
 /// Push PODVector<RayQueryResult> to Lua as a table.
 /// Push PODVector<RayQueryResult> to Lua as a table.
 template<> int ToluaPushPODVector<RayQueryResult>(lua_State* L, void* data, const char* type);
 template<> int ToluaPushPODVector<RayQueryResult>(lua_State* L, void* data, const char* type);
+
+

+ 67 - 87
Source/Engine/LuaScript/pkgs/Core/Context.pkg

@@ -2,7 +2,6 @@ $#include "Audio.h"
 $#include "Console.h"
 $#include "Console.h"
 $#include "Context.h"
 $#include "Context.h"
 $#include "DebugHud.h"
 $#include "DebugHud.h"
-$#include "DebugRenderer.h"
 $#include "Engine.h"
 $#include "Engine.h"
 $#include "FileSystem.h"
 $#include "FileSystem.h"
 $#include "Graphics.h"
 $#include "Graphics.h"
@@ -10,7 +9,6 @@ $#include "Input.h"
 $#include "Log.h"
 $#include "Log.h"
 $#include "Network.h"
 $#include "Network.h"
 $#include "LuaScript.h"
 $#include "LuaScript.h"
-$#include "PhysicsWorld.h"
 $#include "Renderer.h"
 $#include "Renderer.h"
 $#include "ResourceCache.h"
 $#include "ResourceCache.h"
 $#include "Timer.h"
 $#include "Timer.h"
@@ -30,102 +28,84 @@ EventHandler* GetEventHandler() const;
 Audio* GetAudio();
 Audio* GetAudio();
 Console* GetConsole();
 Console* GetConsole();
 DebugHud* GetDebugHud();
 DebugHud* GetDebugHud();
-DebugRenderer* GetDebugRenderer();
 Engine* GetEngine();
 Engine* GetEngine();
 FileSystem* GetFileSystem();
 FileSystem* GetFileSystem();
 Graphics* GetGraphics();
 Graphics* GetGraphics();
 Input* GetInput();
 Input* GetInput();
 Log* GetLog();
 Log* GetLog();
 Network* GetNetwork();
 Network* GetNetwork();
-PhysicsWorld* GetPhysicsWorld();
 Renderer* GetRenderer();
 Renderer* GetRenderer();
 ResourceCache* GetCache();
 ResourceCache* GetCache();
 Time* GetTime();
 Time* GetTime();
 UI* GetUI();
 UI* GetUI();
 
 
 ${
 ${
-static Object* GetEventSender()
-{
-    return GetContext()->GetEventSender();
-}
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetContext00
+static int tolua_CoreLuaAPI_GetContext00(lua_State* tolua_S)
+{
+    Context* tolua_ret = GetContext(tolua_S);
+    tolua_pushusertype(tolua_S,(void*)tolua_ret,"Context");
+    return 1;
+}
+
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetEventSender00
+static int tolua_CoreLuaAPI_GetEventSender00(lua_State* tolua_S)
+{
+    Object* tolua_ret = GetContext(tolua_S)->GetEventSender();
+    tolua_pushusertype(tolua_S,(void*)tolua_ret,"Object");
+    return 1;
+}
+
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetEventHandler00
+static int tolua_CoreLuaAPI_GetEventHandler00(lua_State* tolua_S)
+{
+    EventHandler* tolua_ret = GetContext(tolua_S)->GetEventHandler();
+    tolua_pushusertype(tolua_S,(void*)tolua_ret,"EventHandler");
+    return 1;
+}
+
+#define GET_SUBSYSTEM(subsystem) \
+static int tolua_CoreLuaAPI_Get ## subsystem ## 00(lua_State* tolua_S) \
+{ \
+  subsystem* tolua_ret = GetContext(tolua_S)->GetSubsystem<subsystem>(); \
+  tolua_pushusertype(tolua_S,(void*)tolua_ret,#subsystem); \
+  return 1; \
+}
+
+#define GET_SUBSYSTEM_RENAME(subsystem, newname) \
+static int tolua_CoreLuaAPI_Get ## newname ## 00(lua_State* tolua_S) \
+{ \
+  subsystem* tolua_ret = GetContext(tolua_S)->GetSubsystem<subsystem>(); \
+  tolua_pushusertype(tolua_S,(void*)tolua_ret,#subsystem); \
+  return 1; \
+}
+
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetAudio00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetConsole00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetDebugHud00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetEngine00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetFileSystem00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetGraphics00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetInput00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetLog00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetNetwork00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetRenderer00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetCache00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetTime00
+#define TOLUA_DISABLE_tolua_CoreLuaAPI_GetUI00
+
+GET_SUBSYSTEM(Audio)
+GET_SUBSYSTEM(Console)
+GET_SUBSYSTEM(DebugHud)
+GET_SUBSYSTEM(Engine)
+GET_SUBSYSTEM(FileSystem)
+GET_SUBSYSTEM(Graphics)
+GET_SUBSYSTEM(Input)
+GET_SUBSYSTEM(Log)
+GET_SUBSYSTEM(Network)
+GET_SUBSYSTEM(Renderer)
+GET_SUBSYSTEM_RENAME(ResourceCache, Cache)
+GET_SUBSYSTEM(Time)
+GET_SUBSYSTEM(UI)
 
 
-static EventHandler* GetEventHandler()
-{
-    return GetContext()->GetEventHandler();
-}
-
-static Audio* GetAudio()
-{
-    return GetContext()->GetSubsystem<Audio>();
-}
-
-static Console* GetConsole()
-{
-    return GetContext()->GetSubsystem<Console>();
-}
-
-static DebugHud* GetDebugHud()
-{
-    return GetContext()->GetSubsystem<DebugHud>();
-}
-
-static DebugRenderer* GetDebugRenderer()
-{
-    return GetContext()->GetSubsystem<DebugRenderer>();
-}
-
-static Engine* GetEngine()
-{
-    return GetContext()->GetSubsystem<Engine>();
-}
-
-static FileSystem* GetFileSystem()
-{
-    return GetContext()->GetSubsystem<FileSystem>();
-}
-
-static Graphics* GetGraphics()
-{
-    return GetContext()->GetSubsystem<Graphics>();
-}
-
-static Input* GetInput()
-{
-    return GetContext()->GetSubsystem<Input>();
-}
-
-static Log* GetLog()
-{
-    return GetContext()->GetSubsystem<Log>();
-}
-
-static Network* GetNetwork()
-{
-    return GetContext()->GetSubsystem<Network>();
-}
-
-static PhysicsWorld* GetPhysicsWorld()
-{
-    return GetContext()->GetSubsystem<PhysicsWorld>();
-}
-
-static Renderer* GetRenderer()
-{
-    return GetContext()->GetSubsystem<Renderer>();
-}
-
-static ResourceCache* GetCache()
-{
-    return GetContext()->GetSubsystem<ResourceCache>();
-}
-
-static Time* GetTime()
-{
-    return GetContext()->GetSubsystem<Time>();
-}
-
-static UI* GetUI()
-{
-    return GetContext()->GetSubsystem<UI>();
-}
 $}
 $}

+ 160 - 18
Source/Engine/LuaScript/pkgs/LuaScript/LuaScript.pkg

@@ -9,43 +9,185 @@ void UnsubscribeFromEvent(void* sender, const String eventName);
 void UnsubscribeFromEvents(void* sender);
 void UnsubscribeFromEvents(void* sender);
 
 
 ${
 ${
-static LuaScript* GetLuaScript()
-{
-    return GetContext()->GetSubsystem<LuaScript>();
-}
 
 
-static void SendEvent(const String& eventName, VariantMap& eventData)
+
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_SendEvent00
+static int tolua_LuaScriptLuaAPI_SendEvent00(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptSendEvent(eventName, eventData);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isurho3dstring(tolua_S,1,0,&tolua_err) ||
+ (tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"VariantMap",0,&tolua_err)) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+  const String eventName = ((const String)  tolua_tourho3dstring(tolua_S,1,0));
+  VariantMap* eventData = ((VariantMap*)  tolua_tousertype(tolua_S,2,0));
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptSendEvent(eventName,*eventData);
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'SendEvent'.",&tolua_err);
+ return 0;
+#endif
 }
 }
 
 
-static void SubscribeToEvent(const String& eventName, const String& functionName)
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_SubscribeToEvent00
+static int tolua_LuaScriptLuaAPI_SubscribeToEvent00(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptSubscribeToEvent(eventName, functionName);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isurho3dstring(tolua_S,1,0,&tolua_err) ||
+ !tolua_isurho3dstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+  const String eventName = ((const String)  tolua_tourho3dstring(tolua_S,1,0));
+  const String functionName = ((const String)  tolua_tourho3dstring(tolua_S,2,0));
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptSubscribeToEvent(eventName,functionName);
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'SubscribeToEvent'.",&tolua_err);
+ return 0;
+#endif
 }
 }
 
 
-static void UnsubscribeFromEvent(const String& eventName)
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_UnsubscribeFromEvent00
+static int tolua_LuaScriptLuaAPI_UnsubscribeFromEvent00(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptUnsubscribeFromEvent(eventName);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isurho3dstring(tolua_S,1,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,2,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+  const String eventName = ((const String)  tolua_tourho3dstring(tolua_S,1,0));
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptUnsubscribeFromEvent(eventName);
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'UnsubscribeFromEvent'.",&tolua_err);
+ return 0;
+#endif
 }
 }
 
 
-static void UnsubscribeFromAllEvents()
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_UnsubscribeFromAllEvents00
+static int tolua_LuaScriptLuaAPI_UnsubscribeFromAllEvents00(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptUnsubscribeFromAllEvents();
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isnoobj(tolua_S,1,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptUnsubscribeFromAllEvents();
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'UnsubscribeFromAllEvents'.",&tolua_err);
+ return 0;
+#endif
 }
 }
 
 
-static void SubscribeToEvent(void* sender, const String& eventName, const String& functionName)
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_SubscribeToEvent01
+static int tolua_LuaScriptLuaAPI_SubscribeToEvent01(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptSubscribeToEvent(sender, eventName, functionName);
+ tolua_Error tolua_err;
+ if (
+ !tolua_isuserdata(tolua_S,1,0,&tolua_err) ||
+ !tolua_isurho3dstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_isurho3dstring(tolua_S,3,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,4,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+ {
+  void* sender = ((void*)  tolua_touserdata(tolua_S,1,0));
+  const String eventName = ((const String)  tolua_tourho3dstring(tolua_S,2,0));
+  const String functionName = ((const String)  tolua_tourho3dstring(tolua_S,3,0));
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptSubscribeToEvent(sender,eventName,functionName);
+ }
+ }
+ return 0;
+tolua_lerror:
+ return tolua_LuaScriptLuaAPI_SubscribeToEvent00(tolua_S);
 }
 }
 
 
-static void UnsubscribeFromEvent(void* sender, const String& eventName)
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_UnsubscribeFromEvent01
+static int tolua_LuaScriptLuaAPI_UnsubscribeFromEvent01(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptUnsubscribeFromEvent(sender, eventName);
+ tolua_Error tolua_err;
+ if (
+ !tolua_isuserdata(tolua_S,1,0,&tolua_err) ||
+ !tolua_isurho3dstring(tolua_S,2,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+ {
+  void* sender = ((void*)  tolua_touserdata(tolua_S,1,0));
+  const String eventName = ((const String)  tolua_tourho3dstring(tolua_S,2,0));
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptUnsubscribeFromEvent(sender,eventName);
+ }
+ }
+ return 0;
+tolua_lerror:
+ return tolua_LuaScriptLuaAPI_UnsubscribeFromEvent00(tolua_S);
 }
 }
 
 
-static void UnsubscribeFromEvents(void* sender)
+#define TOLUA_DISABLE_tolua_LuaScriptLuaAPI_UnsubscribeFromEvents00
+static int tolua_LuaScriptLuaAPI_UnsubscribeFromEvents00(lua_State* tolua_S)
 {
 {
-    GetLuaScript()->ScriptUnsubscribeFromEvents(sender);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isuserdata(tolua_S,1,0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,2,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+  void* sender = ((void*)  tolua_touserdata(tolua_S,1,0));
+ {
+  GetContext(tolua_S)->GetSubsystem<LuaScript>()->ScriptUnsubscribeFromEvents(sender);
+ }
+ }
+ return 0;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'UnsubscribeFromEvents'.",&tolua_err);
+ return 0;
+#endif
 }
 }
 $}
 $}