- Timestamp:
- Jun 14, 2006, 4:43:11 PM (19 years ago)
- Location:
- branches/script_engine/src/lib/script_engine
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/script_engine/src/lib/script_engine/account.cc
r8393 r8397 14 14 lua_Number m_balance; 15 15 public: 16 static const char className[];16 // static const char className[]; 17 17 static Lunar<Account>::RegType methods[]; 18 18 … … 30 30 }; 31 31 32 const char Account::className[] = "Account";32 //const char Account::className[] = "Account"; 33 33 34 34 Lunar<Account>::RegType Account::methods[] = { … … 39 39 }; 40 40 41 CREATE_SCRIPTABLE_CLASS(Account, CL_ACCOUNT, ScriptMethod("deposit", ExecutorLua1<Account, float>(&Account::deposit)));41 tScriptClass<Account> global_ACCOUNT_ScriptableClass("Account", CL_ACCOUNT, NULL); 42 42 43 44 //CREATE_SCRIPTABLE_CLASS(Account, CL_ACCOUNT, NULL); -
branches/script_engine/src/lib/script_engine/lunar.h
r8394 r8397 21 21 22 22 23 static void Register(Script* script )23 static void Register(Script* script, const std::string& className) 24 24 { 25 25 if(script != NULL) 26 Register(script->getLuaState()); 27 } 28 29 static void Register(lua_State *L) 30 { 26 Register(script->getLuaState(), className); 27 } 28 29 static void Register(lua_State *L, const std::string& className) 30 { 31 Lunar<T>::className = className; 31 32 lua_newtable(L); 32 33 int methods = lua_gettop(L); 33 34 34 luaL_newmetatable(L, T::className);35 luaL_newmetatable(L, Lunar<T>::className.c_str()); 35 36 int metatable = lua_gettop(L); 36 37 … … 38 39 // scripts can add functions written in Lua. 39 40 lua_pushvalue(L, methods); 40 set(L, LUA_GLOBALSINDEX, T::className);41 set(L, LUA_GLOBALSINDEX, Lunar<T>::className.c_str()); 41 42 42 43 // hide metatable from Lua getmetatable() … … 77 78 { 78 79 int base = lua_gettop(L) - nargs; // userdata index 79 if (!luaL_checkudata(L, base, T::className))80 if (!luaL_checkudata(L, base, Lunar<T>::className.c_str())) 80 81 { 81 82 lua_settop(L, base-1); // drop userdata and args 82 lua_pushfstring(L, "not a valid %s userdata", T::className);83 lua_pushfstring(L, "not a valid %s userdata", Lunar<T>::className.c_str()); 83 84 return -1; 84 85 } … … 89 90 { // no method? 90 91 lua_settop(L, base-1); // drop userdata and args 91 lua_pushfstring(L, "%s missing method '%s'", T::className, method);92 lua_pushfstring(L, "%s missing method '%s'", Lunar<T>::className.c_str(), method); 92 93 return -1; 93 94 } … … 100 101 if (msg == NULL) msg = "(error with no message)"; 101 102 lua_pushfstring(L, "%s:%s status = %d\n%s", 102 T::className, method, status, msg);103 Lunar<T>::className.c_str(), method, status, msg); 103 104 lua_remove(L, base); // remove old message 104 105 return -1; … … 111 112 { 112 113 if (!obj) { lua_pushnil(L); return 0; } 113 luaL_getmetatable(L, T::className); // lookup metatable in Lua registry114 if (lua_isnil(L, -1)) luaL_error(L, "%s missing metatable", T::className);114 luaL_getmetatable(L, Lunar<T>::className.c_str()); // lookup metatable in Lua registry 115 if (lua_isnil(L, -1)) luaL_error(L, "%s missing metatable", Lunar<T>::className.c_str()); 115 116 int mt = lua_gettop(L); 116 117 subtable(L, mt, "userdata", "v"); … … 160 161 { 161 162 userdataType *ud = 162 static_cast<userdataType*>(luaL_checkudata(L, narg, T::className));163 if(!ud) luaL_typerror(L, narg, T::className);163 static_cast<userdataType*>(luaL_checkudata(L, narg, Lunar<T>::className.c_str())); 164 if(!ud) luaL_typerror(L, narg, Lunar<T>::className.c_str()); 164 165 return ud->pT; // pointer to T object 165 166 } … … 212 213 T *obj = ud->pT; 213 214 sprintf(buff, "%p", obj); 214 lua_pushfstring(L, "%s (%s)", T::className, buff);215 lua_pushfstring(L, "%s (%s)", Lunar<T>::className.c_str(), buff); 215 216 return 1; 216 217 } … … 264 265 return ud; 265 266 } 267 268 private: 269 static std::string className; 266 270 }; 267 271 272 template <typename T> 273 std::string Lunar<T>::className = ""; 274 268 275 #endif /* _LUNAR_H */ 269 276 -
branches/script_engine/src/lib/script_engine/script_class.h
r8393 r8397 19 19 */ 20 20 #define CREATE_SCRIPTABLE_CLASS(CLASS_NAME, CLASS_ID, SCRIPT_METHODS) \ 21 tScript able<CLASS_NAME> global_##CLASS_NAME##_ScriptableClass(#CLASS_NAME, CLASS_ID, new SCRIPT_METHODS)21 tScriptClass<CLASS_NAME> global_##CLASS_NAME##_ScriptableClass(#CLASS_NAME, CLASS_ID, new SCRIPT_METHODS) 22 22 23 23 … … 48 48 49 49 template <class T> 50 class tScript able: public ScriptClass50 class tScriptClass : public ScriptClass 51 51 { 52 52 public: 53 tScript able(const std::string& name, ClassID classID, ScriptMethod* scriptMethods)53 tScriptClass(const std::string& name, ClassID classID, ScriptMethod* scriptMethods) 54 54 : ScriptClass(name, classID, scriptMethods) 55 55 { } … … 57 57 virtual void registerClass(Script* script) 58 58 { 59 Lunar<T>::Register(script );59 Lunar<T>::Register(script, this->getName()); 60 60 } 61 61 virtual int insertObject(Script* L, BaseObject* obj, bool gc=false)
Note: See TracChangeset
for help on using the changeset viewer.