Jelajahi Sumber

Make DebugLine fulluserdata

Daniele Bartolini 11 tahun lalu
induk
melakukan
0d1448dba1
2 mengubah file dengan 17 tambahan dan 2 penghapusan
  1. 11 0
      engine/lua/LuaDebugLine.cpp
  2. 6 2
      engine/lua/LuaStack.h

+ 11 - 0
engine/lua/LuaDebugLine.cpp

@@ -79,6 +79,15 @@ static int debug_line_commit(lua_State* L)
 	return 0;
 }
 
+//-----------------------------------------------------------------------------
+static int debug_line_tostring(lua_State* L)
+{
+	LuaStack stack(L);
+	DebugLine* dl = stack.get_debug_line(1);
+	stack.push_fstring("DebugLine (%p)", dl);
+	return 1;
+}
+
 //-----------------------------------------------------------------------------
 void load_debug_line(LuaEnvironment& env)
 {
@@ -86,6 +95,8 @@ void load_debug_line(LuaEnvironment& env)
 	env.load_module_function("DebugLine", "add_sphere",  debug_line_add_sphere);
 	env.load_module_function("DebugLine", "clear",       debug_line_clear);
 	env.load_module_function("DebugLine", "commit",      debug_line_commit);
+	env.load_module_function("DebugLine", "__index",	 "DebugLine");
+	env.load_module_function("DebugLine", "__tostring",  debug_line_tostring);
 }
 
 } // namespace crown

+ 6 - 2
engine/lua/LuaStack.h

@@ -443,13 +443,17 @@ public:
 	//-----------------------------------------------------------------------------
 	void push_debug_line(DebugLine* line)
 	{
-		lua_pushlightuserdata(m_L, line);
+		DebugLine** l = (DebugLine**) lua_newuserdata(m_L, sizeof(DebugLine*));
+		*l = line;
+		luaL_getmetatable(m_L, "DebugLine");
+		lua_setmetatable(m_L, -2);
 	}
 
 	//-----------------------------------------------------------------------------
 	DebugLine* get_debug_line(int32_t index)
 	{
-		return (DebugLine*) CHECKLIGHTDATA(m_L, index, always_true, "DebugLine");
+		DebugLine* l = *(DebugLine**) CHECKUDATA(m_L, index, "DebugLine");
+		return l;
 	}
 
 	//-----------------------------------------------------------------------------