diff options
Diffstat (limited to 'src/client/callbackhandeler.cpp')
| -rw-r--r-- | src/client/callbackhandeler.cpp | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/client/callbackhandeler.cpp b/src/client/callbackhandeler.cpp index 5d51ba6..3b069a4 100644 --- a/src/client/callbackhandeler.cpp +++ b/src/client/callbackhandeler.cpp @@ -38,7 +38,8 @@ GlobalEventReceiver::GlobalEventReceiver(IrrlichtDevice* d){ //device = d; } -void callMouse(lua_State* L, const char* funcname, double x, double y, double event){ +int callMouse(lua_State* L, const char* funcname, double x, double y, double event){ + int consume = 0; lua_getglobal(L,"GAME");//GAME pusherrorfunc(L);//{GAME},errfun lua_getfield(L,-2,funcname);//{GAME},errfunc,funcname? @@ -46,22 +47,28 @@ void callMouse(lua_State* L, const char* funcname, double x, double y, double ev lua_pushnumber(L,x);//{GAME},errfunc,func,x lua_pushnumber(L,y);//{GAME},errfunc,func,x,y lua_pushnumber(L,event);//{GAME},errfunc,func,x,y,event - int err = lua_pcall(L,3,0,-4);//{GAME},errfunc + int err = lua_pcall(L,3,1,-5);//{GAME},errfunc,consume|err if(err){ printf("Failed to call GAME.%s\n",funcname); + }else{ + if(!lua_isnil(L,-1)){ + consume = lua_toboolean(L,-1); + lua_pop(L,-1); + } } lua_pop(L,2); }else{ //{GAME},errfunc,nil lua_pop(L,3);// } + return consume; } bool GlobalEventReceiver::OnEvent(const SEvent& e){ //lua_State* L = this->L; EEVENT_TYPE type = e.EventType; SEvent::SMouseInput se = e.MouseInput; - //printf("Onevent called:%d\n",(int)type); + printf("Onevent called:%d\n",(int)type); switch (type){ case EET_GUI_EVENT:{ //printf("Gui event\n"); @@ -111,7 +118,7 @@ bool GlobalEventReceiver::OnEvent(const SEvent& e){ } printf("About to push error func"); pusherrorfunc(L);//{guielement},errfunc() - lua_getfield(L,-2,fieldname);//{guielement},errfunc(),func() + lua_getfield(L,-2,fieldname);//{guielement},errfunc(),(func() | nil) if(lua_isnil(L,-1)){ printf("Element did not have a function %s, returning\n",fieldname); lua_pop(L,3);// @@ -119,15 +126,13 @@ bool GlobalEventReceiver::OnEvent(const SEvent& e){ } lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement},errfunc(),func(),{guielement} printf("About to pcall in callback.cpp!\n"); - lua_pcall(L,1,1,-3);//{guielement} - int n = lua_gettop(L); - if(n > 1){ + lua_pcall(L,1,1,-3);//{guielement},errfunc(),(nil|true) + if(!lua_isnil(L,-1)){ printf("Got an argument back!\n"); int ans = lua_toboolean(L,-1); - lua_pop(L,n); return ans; } - lua_pop(L,1);// + lua_pop(L,3);// return false; } break; @@ -144,37 +149,37 @@ Detects when the mouse moves across the game. */ switch(se.Event){ case EMIE_MOUSE_MOVED:{ - callMouse(L,"onMouseMove",se.X,se.Y,se.Event); + return callMouse(L,"onMouseMove",se.X,se.Y,se.Event); } break; case EMIE_LMOUSE_PRESSED_DOWN: case EMIE_RMOUSE_PRESSED_DOWN: case EMIE_MMOUSE_PRESSED_DOWN:{ printf("Mouse down\n"); - callMouse(L,"onMouseDown",se.X,se.Y,se.Event); + return callMouse(L,"onMouseDown",se.X,se.Y,se.Event); } break; case EMIE_LMOUSE_LEFT_UP: case EMIE_RMOUSE_LEFT_UP: case EMIE_MMOUSE_LEFT_UP:{ printf("Mouse up\n"); - callMouse(L,"onMouseUp",se.X,se.Y,se.Event); + return callMouse(L,"onMouseUp",se.X,se.Y,se.Event); } break; case EMIE_MOUSE_WHEEL:{ - callMouse(L,"onMouseWheel",se.X,se.Y,se.Wheel); + return callMouse(L,"onMouseWheel",se.X,se.Y,se.Wheel); } break; case EMIE_RMOUSE_DOUBLE_CLICK: case EMIE_MMOUSE_DOUBLE_CLICK: case EMIE_LMOUSE_DOUBLE_CLICK:{ - callMouse(L,"onDoubleClick",se.X,se.Y,se.Event); + return callMouse(L,"onDoubleClick",se.X,se.Y,se.Event); } break; case EMIE_RMOUSE_TRIPLE_CLICK: case EMIE_MMOUSE_TRIPLE_CLICK: case EMIE_LMOUSE_TRIPLE_CLICK:{ - callMouse(L,"onTripleClick",se.X,se.Y,se.Event); + return callMouse(L,"onTripleClick",se.X,se.Y,se.Event); } break; case EMIE_COUNT:break; @@ -197,13 +202,14 @@ Detects any key presses from the game. lua_getglobal(L,"GAME");//{} lua_getfield(L,-1,"onKeyDown");//{},()|nil if(!lua_isnil(L,-1)){ + //printf("onKeyDown not nil, calling...\n"); pusherrorfunc(L);//GAME,GAME.onKeyDown(),errfunc lua_pushvalue(L,-2);//GAME,GAME.onKeyDown(),errfunc,onKeyDown() - lua_pushnumber(L,se.Key); - lua_pushboolean(L,se.PressedDown); - lua_pushboolean(L,se.Control); - lua_pushboolean(L,se.Shift); - lua_pcall(L,4,0,-5);//GAME,GAME.onKeyDown() + lua_pushnumber(L,se.Key);//{GAME},GAME.onKeyDown(),errfunc,onKeyDown(),key_number + lua_pushboolean(L,se.PressedDown);//{GAME},GAME.onKeyDown(),errfunc,onKeyDown(),key_number,is_down + lua_pushboolean(L,se.Control);//{GAME},GAME.onKeyDown(),errfunc,onKeyDown(),key_number,is_down,is_ctrl + lua_pushboolean(L,se.Shift);//{GAME},GAME.onKeyDown(),errfunc,onKeyDown(),key_number,is_down,is_ctrl,is_shift + lua_pcall(L,4,0,-6);//GAME,GAME.onKeyDown() lua_pop(L,2); }else{ lua_pop(L,2); |
