aboutsummaryrefslogtreecommitdiff
path: root/src/client/callbackhandeler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/callbackhandeler.cpp')
-rw-r--r--src/client/callbackhandeler.cpp46
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);