Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8397 in orxonox.OLD


Ignore:
Timestamp:
Jun 14, 2006, 4:43:11 PM (18 years ago)
Author:
bensch
Message:

fixed out the T::ClassName

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  
    1414      lua_Number m_balance;
    1515   public:
    16     static const char className[];
     16    // static const char className[];
    1717     static Lunar<Account>::RegType methods[];
    1818
     
    3030 };
    3131
    32  const char Account::className[] = "Account";
     32 //const char Account::className[] = "Account";
    3333
    3434 Lunar<Account>::RegType Account::methods[] = {
     
    3939 };
    4040
    41  CREATE_SCRIPTABLE_CLASS(Account, CL_ACCOUNT, ScriptMethod("deposit", ExecutorLua1<Account, float>(&Account::deposit)));
     41tScriptClass<Account> global_ACCOUNT_ScriptableClass("Account", CL_ACCOUNT, NULL);
    4242
     43
     44//CREATE_SCRIPTABLE_CLASS(Account, CL_ACCOUNT, NULL);
  • branches/script_engine/src/lib/script_engine/lunar.h

    r8394 r8397  
    2121
    2222
    23   static void Register(Script* script)
     23  static void Register(Script* script, const std::string& className)
    2424  {
    2525    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;
    3132    lua_newtable(L);
    3233    int methods = lua_gettop(L);
    3334
    34     luaL_newmetatable(L, T::className);
     35    luaL_newmetatable(L, Lunar<T>::className.c_str());
    3536    int metatable = lua_gettop(L);
    3637
     
    3839    // scripts can add functions written in Lua.
    3940    lua_pushvalue(L, methods);
    40     set(L, LUA_GLOBALSINDEX, T::className);
     41    set(L, LUA_GLOBALSINDEX, Lunar<T>::className.c_str());
    4142
    4243    // hide metatable from Lua getmetatable()
     
    7778  {
    7879    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()))
    8081    {
    8182      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());
    8384      return -1;
    8485    }
     
    8990    {            // no method?
    9091      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);
    9293      return -1;
    9394    }
     
    100101      if (msg == NULL) msg = "(error with no message)";
    101102      lua_pushfstring(L, "%s:%s status = %d\n%s",
    102                       T::className, method, status, msg);
     103                      Lunar<T>::className.c_str(), method, status, msg);
    103104      lua_remove(L, base);             // remove old message
    104105      return -1;
     
    111112  {
    112113    if (!obj) { lua_pushnil(L); return 0; }
    113     luaL_getmetatable(L, T::className);  // lookup metatable in Lua registry
    114     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());
    115116    int mt = lua_gettop(L);
    116117    subtable(L, mt, "userdata", "v");
     
    160161  {
    161162    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());
    164165    return ud->pT;  // pointer to T object
    165166  }
     
    212213    T *obj = ud->pT;
    213214    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);
    215216    return 1;
    216217  }
     
    264265    return ud;
    265266  }
     267
     268  private:
     269    static std::string className;
    266270};
    267271
     272template <typename T>
     273    std::string Lunar<T>::className = "";
     274
    268275#endif /* _LUNAR_H */
    269276
  • branches/script_engine/src/lib/script_engine/script_class.h

    r8393 r8397  
    1919 */
    2020#define CREATE_SCRIPTABLE_CLASS(CLASS_NAME, CLASS_ID, SCRIPT_METHODS) \
    21     tScriptable<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)
    2222
    2323
     
    4848
    4949template <class T>
    50 class tScriptable : public ScriptClass
     50class tScriptClass : public ScriptClass
    5151{
    5252public:
    53   tScriptable(const std::string& name, ClassID classID, ScriptMethod* scriptMethods)
     53  tScriptClass(const std::string& name, ClassID classID, ScriptMethod* scriptMethods)
    5454      : ScriptClass(name, classID, scriptMethods)
    5555  { }
     
    5757  virtual void registerClass(Script* script)
    5858  {
    59     Lunar<T>::Register(script);
     59    Lunar<T>::Register(script, this->getName());
    6060  }
    6161  virtual int insertObject(Script* L, BaseObject* obj, bool gc=false)
Note: See TracChangeset for help on using the changeset viewer.