Changeset 19 for Plugins


Ignore:
Timestamp:
01/10/2007 09:29:46 PM (13 years ago)
Author:
art
Message:
 
Location:
Plugins/luaScripting
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Plugins/luaScripting/Script.cpp

    r18 r19  
    1616lua_State*      LuaScript::State = NULL; 
    1717 
    18 #if 0 
     18#if 1 
    1919// Dump all the contents of your lua_state (Lua Stack)  
    2020 // Find out the location of ur table and try to print out the details by  
     
    2424         int i; 
    2525         int top = lua_gettop(L); 
     26         printf("Stack has %d elements\n", top); 
    2627         for (i = 1; i <= top; i++) { /* repeat for each level */ 
    2728                 int t = lua_type(L, i); 
     
    4243                        default: /* other values */ 
    4344                                 printf("type: %s", lua_typename(L, t)); 
    44                                  break; 
    45   
     45                                 break;  
    4646                 } 
    4747                 printf("\n"); /* put a separator */ 
     
    131131        { 
    132132                pushErrorMessage(std::string("luaScript: The stack must be empty when calling a function!")); 
     133                stackDump(State); 
    133134                return SCRIPT_ERROR; 
    134135        } 
     
    166167        { 
    167168                pushErrorMessage(std::string("luaScript: The stack must be empty when calling a function!")); 
     169                stackDump(State); 
    168170                return SCRIPT_ERROR; 
    169171        } 
  • Plugins/luaScripting/ScriptConnector.cpp

    r1 r19  
    2222{ 
    2323        initialize(); 
     24        initializeLuaEnvironment(); 
    2425} 
    2526 
     27//---------------------------------------------------------------------------------- 
     28void LuaScriptConnector::initializeLuaEnvironment() 
     29{ 
     30        // add include function 
     31        lua_pushcfunction(LuaScript::State, includeFile); 
     32        lua_setglobal(LuaScript::State, "include"); 
     33} 
     34 
     35         
    2636//---------------------------------------------------------------------------------- 
    2737void LuaScriptConnector::OnRegisterFunction(const std::string& name, const ScriptFunctor& func) 
     
    4858        mRegistered.erase(std::find(mRegistered.begin(), mRegistered.end(), name)); 
    4959} 
     60 
     61 
     62//---------------------------------------------------------------------------------- 
     63int LuaScriptConnector::includeFile(lua_State *L) 
     64 
     65        int n=lua_gettop(L); 
     66        while (n) 
     67        { 
     68                // check if do not have  anil value  
     69                if (!lua_isnil(L, -n)) 
     70                { 
     71                        // do we got a string 
     72                        if (lua_isstring(L, -n)) 
     73                        { 
     74                                // read string parameter 
     75                                std::string filename = lua_tostring(L, -n); 
     76                                 
     77                                // open filestream and load it 
     78                                FileStream* fStream = new FileStream(); 
     79                                Result ret = fStream->open(filename); 
     80                                if (ret == OK) 
     81                                { 
     82                                        // get the whole file content 
     83                                        std::string str = fStream->getAsString(); 
     84                         
     85                                        // now let lua do the string 
     86                                        luaL_dostring(L, str.c_str()); 
     87                                }else{ 
     88                                        printf("ScriptConnector: Cannot load luafile %s, no file found\n", filename.c_str()); 
     89                                } 
     90                                delete fStream; 
     91                        }else{ 
     92                                printf("ScriptConnector: Cannot include luafile. Filename(string) must be given. You gave me %s:%p\n",luaL_typename(L,-n),lua_topointer(L,-n)); 
     93                                return 0; 
     94                        } 
     95                } 
     96                --n; 
     97        } 
     98         
     99        // clear the stack 
     100        lua_pop(L, lua_gettop(L)); 
     101         
     102        return 0; 
     103} 
     104 
    50105 
    51106//---------------------------------------------------------------------------------- 
  • Plugins/luaScripting/ScriptConnector.h

    r1 r19  
    6060                std::list<std::string>  mRegistered; 
    6161                 
     62                //! Include lua file (this function will be registered in lua) 
     63                static int includeFile(lua_State *L); 
     64                 
     65                //! Initialize default functions, which are registered in the lua environemnt 
     66                void initializeLuaEnvironment(); 
     67                 
    6268}; 
    6369 
Note: See TracChangeset for help on using the changeset viewer.