Changeset 19


Ignore:
Timestamp:
01/10/07 21:29:46 (12 years ago)
Author:
art
Message:
 
Files:
11 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 
  • nrEngine/include/Event.h

    r1 r19  
    9393        **/ 
    9494        template<class T> 
    95         static T* event_cast(Event* base) throw (Exception) 
     95        static T* event_cast(Event* base) 
    9696        { 
    9797                T* ptr = NULL; 
    98                 try{ 
    99                         ptr = dynamic_cast<T*>(base); 
    100                         if (ptr == NULL) throw(Result(EVENT_COULD_NOT_CAST)); 
    101  
    102                 }catch (Result i){ 
    103                         NR_EXCEPT(i, 
    104                                                 "Casting from Event* to given type is not possible", 
    105                                                 "Event::event_shared_cast<T>()"); 
    106                 } 
     98                ptr = dynamic_cast<T*>(base); 
    10799                return ptr; 
    108100        } 
     
    118110        { 
    119111                SharedPtr<T> ptr; 
    120                 try 
    121                 { 
    122                         ptr = boost::dynamic_pointer_cast<T, Event>(base); 
    123                         if (ptr == NULL) throw(Result(EVENT_COULD_NOT_CAST)); 
    124  
    125                 }catch (Result i){ 
    126                         NR_EXCEPT(i, 
    127                                                 "Casting from Event* to given type is not possible", 
    128                                                 "Event::event_shared_cast<T>()"); 
    129                 } 
     112                ptr = boost::dynamic_pointer_cast<T, Event>(base); 
    130113                return ptr; 
    131114        } 
  • nrEngine/include/EventActor.h

    r15 r19  
    4242                public: 
    4343 
     44                        //! Create new actor without any name (@see setName() )  
     45                        EventActor(); 
     46                         
    4447                        //! Create a new actor within unique name 
    4548                        EventActor(const std::string& name); 
     
    5558                        const std::string& getName() const; 
    5659 
     60                        /** 
     61                         * Set name for this actor. You have to setup a name before you can 
     62                         * connect the actor to any communication channel. 
     63                         **/ 
     64                        void setName(const std::string& name); 
     65                         
    5766                        /** 
    5867                         * This is a function which will be called from the channel 
  • nrEngine/include/EventChannel.h

    r1 r19  
    9191                         * Get the name of the channel 
    9292                         **/ 
    93                         const std::string& getName () { return mName; } 
     93                        NR_FORCEINLINE const std::string& getName () const { return mName; } 
    9494 
    9595                        /** 
  • nrEngine/include/Result.h

    r18 r19  
    326326                EVENT_FACTORY_NOT_FOUND = EVENT_ERROR | (1 << 7), 
    327327 
     328                //! Given actor is not valid 
     329                EVENT_NO_VALID_ACTOR = EVENT_ERROR | (1 << 8), 
     330                 
    328331                //------------------------------------------------------------------------------ 
    329332                //! Generic group for properties errors 
  • nrEngine/include/nrEngine.h

    r18 r19  
    4444#include "Event.h" 
    4545#include "EventActor.h" 
     46#include "EventChannel.h" 
    4647 
    4748#endif 
  • nrEngine/nrEngine.h

    r18 r19  
    4444#include "include/Event.h" 
    4545#include "include/EventActor.h" 
     46#include "include/EventChannel.h" 
    4647 
    4748#endif 
  • nrEngine/src/EventActor.cpp

    r15 r19  
    2020 
    2121namespace nrEngine{ 
    22                  
     22 
     23        //------------------------------------------------------------------------ 
     24        EventActor::EventActor() 
     25        { 
     26         
     27        } 
     28 
    2329        //------------------------------------------------------------------------ 
    2430        EventActor::EventActor(const std::string& name) : mName(name){ 
     
    3642        } 
    3743 
     44        //------------------------------------------------------------------------ 
     45        void EventActor::setName(const std::string& name) 
     46        { 
     47                mName = name; 
     48        } 
     49         
     50         
    3851        //------------------------------------------------------------------------ 
    3952        const std::string& EventActor::getName() const 
  • nrEngine/src/EventChannel.cpp

    r1 r19  
    3434        Result EventChannel::add(EventActor* actor, bool notice) 
    3535        { 
     36                // check if actor has got a name  
     37                if (actor == NULL) return OK; 
     38                if (actor->getName().length() == 0) 
     39                { 
     40                        NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "EventChannel (%s): Want to connect nameless actor", getName().c_str()); 
     41                        return EVENT_NO_VALID_ACTOR; 
     42                } 
     43                 
    3644                // we first check whenever the actor is already connected 
    3745                if (isConnected(actor->getName())) return EVENT_ALREADY_CONNECTED; 
     
    5260        Result EventChannel::del(EventActor* actor, bool notice) 
    5361        { 
     62                if (actor == NULL) return OK; 
     63                 
    5464                // we first check whenever the actor is already connected 
    5565                if (!isConnected(actor->getName())) return EVENT_NOT_CONNECTED; 
Note: See TracChangeset for help on using the changeset viewer.