diff options
| author | Alexander Pickering <alex@cogarr.net> | 2018-06-30 16:15:05 -0600 |
|---|---|---|
| committer | Alexander Pickering <alex@cogarr.net> | 2018-06-30 16:15:05 -0600 |
| commit | ed58795eaf03bdee0b1fae8d05ce5b86d17549f7 (patch) | |
| tree | 065092f3e95bf74fdba541f6c5f7504757487d3d /src/client | |
| parent | 45e61c74802af739736d33c82f27596b45987eee (diff) | |
| download | brokengine-ed58795eaf03bdee0b1fae8d05ce5b86d17549f7.tar.gz brokengine-ed58795eaf03bdee0b1fae8d05ce5b86d17549f7.tar.bz2 brokengine-ed58795eaf03bdee0b1fae8d05ce5b86d17549f7.zip | |
Warning-less build
All compile warning for -Wall have been fixed
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/callbackhandeler.cpp | 173 | ||||
| -rw-r--r-- | src/client/callbackhandeler.hpp | 3 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguibutton.cpp | 112 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguibutton.hpp | 2 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguicheckbox.cpp | 6 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguielement.cpp | 181 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguielement.hpp | 1 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguilabel.cpp | 144 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguilabel.hpp | 2 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguiwindow.cpp | 25 | ||||
| -rw-r--r-- | src/client/lua_api/load_gui.cpp | 47 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysbox.cpp | 4 | ||||
| -rw-r--r-- | src/client/lua_api/scene/icamera.cpp | 48 | ||||
| -rw-r--r-- | src/client/lua_api/scene/igeneric.cpp | 10 | ||||
| -rw-r--r-- | src/client/lua_api/scene/ilight.cpp | 18 | ||||
| -rw-r--r-- | src/client/lua_api/scene/imesh.cpp | 10 | ||||
| -rw-r--r-- | src/client/lua_api/video/smaterial.cpp | 19 | ||||
| -rw-r--r-- | src/client/main.cpp | 8 | ||||
| -rw-r--r-- | src/client/menuhandeler.cpp | 3 |
19 files changed, 455 insertions, 361 deletions
diff --git a/src/client/callbackhandeler.cpp b/src/client/callbackhandeler.cpp index 76fe693..1200074 100644 --- a/src/client/callbackhandeler.cpp +++ b/src/client/callbackhandeler.cpp @@ -17,102 +17,163 @@ using namespace std; extern lua_State* L; -std::map<IGUIElement*,std::map<EGUI_EVENT_TYPE, bool(*)(irr::SEvent)> > guifuncs; +std::map<IGUIElement*, int> guielements; //IrrlichtDevice* device; -void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent)){ - printf("Callback registered\n"); - guifuncs[element][event] = func; +//For basic events +//{guielement} +void registerguielement(lua_State* L){ + int ref = luaL_ref(L,LUA_REGISTRYINDEX);// + lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement} + lua_getfield(L,-1,"guielement");//{guielement},ud_guielement + IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_guielement + guielements[el] = ref; + lua_pop(L,1);//{guielement} } +//void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent)){ + //printf("Callback registered\n"); + //guifuncs[element][event] = func; +//} +////For objects that have overloaded () +//void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, std::function<bool(irr::SEvent)> obj){ + //guifuncs[element][event] = obj; +//} GlobalEventReceiver::GlobalEventReceiver(IrrlichtDevice* d){ + //device = d; } + +void callMouse(lua_State* L, const char* funcname, double x, double y, double event){ + lua_getglobal(L,"GAME"); + lua_getfield(L,-1,funcname); + if(!lua_isnil(L,-1)){ + lua_pushnumber(L,x); + lua_pushnumber(L,y); + lua_pushnumber(L,event); + lua_call(L,3,0); + lua_pop(L,1); + }else{ + lua_pop(L,2); + } +} + 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); switch (type){ case EET_GUI_EVENT:{ + //printf("Gui event\n"); IGUIElement* caller = e.GUIEvent.Caller; EGUI_EVENT_TYPE get = e.GUIEvent.EventType; //printf("detected gui event: %d\n",get); - bool callerregistered = guifuncs.find(caller) != guifuncs.end(); - bool callerhasfunc = guifuncs[caller].find(get) != guifuncs[caller].end(); - if (callerregistered && callerhasfunc){ - //printf("Found a callback for this event\n"); - return guifuncs[caller][get](e); + if(guielements.find(caller) == guielements.end()) + return false; + int ref = guielements[caller]; + lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement} + const char* fieldname; + switch(get){ + case EGET_ELEMENT_FOCUSED: fieldname = "onFocus"; break; + case EGET_ELEMENT_FOCUS_LOST: fieldname = "onUnfocus"; break; + case EGET_ELEMENT_HOVERED: fieldname = "onHover"; break; + case EGET_ELEMENT_LEFT: fieldname = "onLeave"; break; + case EGET_ELEMENT_CLOSED: fieldname = "onClose"; break; + case EGET_BUTTON_CLICKED: fieldname = "onClick"; break; + case EGET_SCROLL_BAR_CHANGED: fieldname = "onScroll"; break; + case EGET_CHECKBOX_CHANGED: fieldname = "onCheck"; break; + case EGET_LISTBOX_CHANGED: fieldname = "onChange"; break; + case EGET_LISTBOX_SELECTED_AGAIN: fieldname = "onSame"; break; + case EGET_FILE_SELECTED: fieldname = "onFileSelect"; break; + case EGET_DIRECTORY_SELECTED: fieldname = "onDirectorySelect"; break; + case EGET_FILE_CHOOSE_DIALOG_CANCELLED: fieldname = "onFileChooserCancel"; break; + case EGET_MESSAGEBOX_YES: fieldname = "onYes"; break; + case EGET_MESSAGEBOX_NO: fieldname = "onNo"; break; + case EGET_MESSAGEBOX_OK: fieldname = "onOk"; break; + case EGET_MESSAGEBOX_CANCEL: fieldname = "onCancel"; break; + case EGET_EDITBOX_ENTER: fieldname = "onEneter"; break; + case EGET_EDITBOX_CHANGED: fieldname = "onChange"; break; + case EGET_EDITBOX_MARKING_CHANGED: fieldname = "onMarkChange"; break; + case EGET_TAB_CHANGED: fieldname = "onTabChange"; break; + case EGET_MENU_ITEM_SELECTED: fieldname = "onSelect"; break; + case EGET_COMBO_BOX_CHANGED: fieldname = "onChange"; break; + case EGET_SPINBOX_CHANGED: fieldname = "onChange"; break; + case EGET_TABLE_CHANGED: fieldname = "onChange"; break; + case EGET_TABLE_HEADER_CHANGED: fieldname = "onHeadersChange"; break; + case EGET_TABLE_SELECTED_AGAIN: fieldname = "onReselect"; break; + case EGET_TREEVIEW_NODE_DESELECT: fieldname = "onNodeDeselect"; break; + case EGET_TREEVIEW_NODE_SELECT: fieldname = "onNodeSelect"; break; + case EGET_TREEVIEW_NODE_EXPAND: fieldname = "onNodeExpand"; break; + case EGET_TREEVIEW_NODE_COLLAPSE: fieldname = "onNodeCollapse"; break; + case EGET_COUNT: break; } - return false; - break; + + //printf("got fieldname:%s\n",fieldname); + lua_getfield(L,-1,fieldname);//{guielement},func() + if(lua_isnil(L,-1)){ + lua_pop(L,2); + return false; + } + lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement},func(),{guielement} + lua_call(L,1,0);//{guielement} + lua_pop(L,1);// + return true; } + break; case EET_MOUSE_INPUT_EVENT:{ - SEvent::SMouseInput se = e.MouseInput; - //printf("X: %d Y: %d\n",se.X, se.Y); + //printf("Mouse event - X: %d Y: %d\n",se.X, se.Y); switch(se.Event){ case EMIE_MOUSE_MOVED:{ + //printf("Mouse moved...\n"); lua_getglobal(L,"GAME");//{} lua_getfield(L,-1,"onMouseMove");//{},onMouseMove() if(!lua_isnil(L,-1)){ - lua_pushnumber(L,se.X); - lua_pushnumber(L,se.Y); - lua_call(L,2,0); - lua_pop(L,1); + lua_pushnumber(L,se.X);//{},onMouseMove(),X + lua_pushnumber(L,se.Y);//{},onMouseMove(),Y + lua_call(L,2,0);//{} + lua_pop(L,1);// }else{ lua_pop(L,2); } - break; } + break; case EMIE_LMOUSE_PRESSED_DOWN: case EMIE_RMOUSE_PRESSED_DOWN: case EMIE_MMOUSE_PRESSED_DOWN:{ - lua_getglobal(L,"GAME"); - lua_getfield(L,-1,"onMouseDown"); - if(!lua_isnil(L,-1)){ - lua_pushnumber(L,se.X); - lua_pushnumber(L,se.Y); - lua_pushnumber(L,se.Event); - lua_call(L,3,0); - lua_pop(L,1); - }else{ - lua_pop(L,2); - } - break; + printf("Mouse down\n"); + 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:{ - lua_getglobal(L,"GAME"); - lua_getfield(L,-1,"onMouseUp"); - if(!lua_isnil(L,-1)){ - lua_pushnumber(L,se.X); - lua_pushnumber(L,se.Y); - lua_pushnumber(L,se.Event); - lua_call(L,3,0); - lua_pop(L,1); - }else{ - lua_pop(L,2); - } - break; + printf("Mouse up\n"); + callMouse(L,"onMouseUp",se.X,se.Y,se.Event); } + break; case EMIE_MOUSE_WHEEL:{ - lua_getglobal(L,"GAME"); - lua_getfield(L,-1,"onMouseWheel"); - if(!lua_isnil(L,-1)){ - lua_pushnumber(L,se.X); - lua_pushnumber(L,se.Y); - lua_pushnumber(L,se.Wheel); - lua_call(L,3,0); - lua_pop(L,1); - }else{ - lua_pop(L,2); - } + 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); } - 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); + } + break; + case EMIE_COUNT:break; + } } + break; case EET_KEY_INPUT_EVENT:{ //printf("Got input event\n"); SEvent::SKeyInput se = e.KeyInput; @@ -130,8 +191,10 @@ bool GlobalEventReceiver::OnEvent(const SEvent& e){ } break; } - default: + default:{ //printf("Called an unknown event\n"); return false; } + } + return true; } diff --git a/src/client/callbackhandeler.hpp b/src/client/callbackhandeler.hpp index 7bed591..a48213d 100644 --- a/src/client/callbackhandeler.hpp +++ b/src/client/callbackhandeler.hpp @@ -11,8 +11,9 @@ extern "C" { using namespace irr; using namespace gui; -void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent)); +//void registerguicallback(IGUIElement* element, EGUI_EVENT_TYPE event, bool (*func)(irr::SEvent)); +void registerguielement(lua_State* L); class GlobalEventReceiver : public irr::IEventReceiver{ public: diff --git a/src/client/lua_api/gui/iguibutton.cpp b/src/client/lua_api/gui/iguibutton.cpp index 86e6db8..25a30ed 100644 --- a/src/client/lua_api/gui/iguibutton.cpp +++ b/src/client/lua_api/gui/iguibutton.cpp @@ -24,53 +24,53 @@ using namespace gui; extern IrrlichtDevice* device; char lhashkey[20]; -static LIGUIElement* checkiguibutton(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"gui.iguibutton"); - luaL_argcheck(L,ud != NULL, index, "'gui.iguibutton' expected"); - return (LIGUIElement*) ud; -} +//static LIGUIElement* checkiguibutton(lua_State* L, int index){ + //void* ud = luaL_checkudata(L,index,"gui.iguibutton"); + //luaL_argcheck(L,ud != NULL, index, "'gui.iguibutton' expected"); + //return (LIGUIElement*) ud; +//} -static LIGUIElement* checkiguibutton(lua_State* L){ - return checkiguibutton(L,1); -} +//static LIGUIElement* checkiguibutton(lua_State* L){ + //return checkiguibutton(L,1); +//} //The callback even for all gui buttons -static bool iguibuttonevent(irr::SEvent e){ - IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller; - printf("Some gui something somewhere was pressed\n"); - if(iguielements.find(caller) != iguielements.end()){ - printf("I know what reference is linked to that button: %d!\n",iguielements[caller]); - int ref = iguielements[caller]; - EGUI_EVENT_TYPE etype = e.GUIEvent.EventType; - if(etype == EGET_BUTTON_CLICKED){ - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - printf("getting raw, the thing on the top of stack is a %s\n",luaL_typename(tL,-1)); - LIGUIElement* tbut = checkiguibutton(tL,-1); - int hashmapresponse; - char* hashkey = (char*)"onpress"; - int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse); - if(terror == MAP_OK){ - lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); - lua_call(tL,0,0); - }else{ - printf("Tried to call onpress on something that dosen't have onpress\n"); - } - }else if(etype == EGET_ELEMENT_HOVERED){ - printf("Trying to call onhovered!\n"); - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - LIGUIElement* tbut = (LIGUIElement*)lua_touserdata(tL,-1); - int hashmapresponse; - int terror = hashmap_get(tbut->funcmap,(char*)"onhovered",(void**)&hashmapresponse); - if(terror == MAP_OK){ - lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); - lua_call(tL,0,0); - } - } - } - return false; -} - -//gui.newbutton({x,y},{width,height},text[,parent]) +//static bool iguibuttonevent(irr::SEvent e){ + //IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller; + //printf("Some gui something somewhere was pressed\n"); + //if(iguielements.find(caller) != iguielements.end()){ + //printf("I know what reference is linked to that button: %d!\n",iguielements[caller]); + //int ref = iguielements[caller]; + //EGUI_EVENT_TYPE etype = e.GUIEvent.EventType; + //if(etype == EGET_BUTTON_CLICKED){ + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //printf("getting raw, the thing on the top of stack is a %s\n",luaL_typename(tL,-1)); + //LIGUIElement* tbut = checkiguibutton(tL,-1); + //int hashmapresponse; + //char* hashkey = (char*)"onpress"; + //int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse); + //if(terror == MAP_OK){ + //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); + //lua_call(tL,0,0); + //}else{ + //printf("Tried to call onpress on something that dosen't have onpress\n"); + //} + //}else if(etype == EGET_ELEMENT_HOVERED){ + //printf("Trying to call onhovered!\n"); + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //LIGUIElement* tbut = (LIGUIElement*)lua_touserdata(tL,-1); + //int hashmapresponse; + //int terror = hashmap_get(tbut->funcmap,(char*)"onhovered",(void**)&hashmapresponse); + //if(terror == MAP_OK){ + //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); + //lua_call(tL,0,0); + //} + //} + //} + //return false; +//} + +//gui.newbutton({{sx,sy},{ex,ey}},"text"[,parent]) static int newiguibutton(lua_State* L){ printf("Createing gui button!\n"); @@ -86,19 +86,21 @@ static int newiguibutton(lua_State* L){ const wchar_t* label_w = irr::core::stringw(label_c).c_str(); lua_pop(L,1); - long x,y,w,h; - popvector2i(L,&w,&h); - popvector2i(L,&x,&y); + long sx,sy,ex,ey; + poprecti(L,&sx,&sy,&ex,&ey); - rect<s32> dim = rect<s32>(x,y,x+w,y+h); + rect<s32> dim = rect<s32>(sx,sy,ex,ey); IGUIEnvironment* env = device->getGUIEnvironment(); IGUIButton* but = env->addButton(dim,parent,-2,label_w,L""); - lua_pushlightuserdata(L,but);// - luaL_getmetatable(L,"gui.iguibutton"); - lua_setmetatable(L,-2); - - registerguicallback(but,EGET_BUTTON_CLICKED,iguibuttonevent); + lua_newtable(L);//{} + lua_pushlightuserdata(L,but);//{},ud_iguibutton + lua_setfield(L,-2,"guielement");//{guielement} + luaL_getmetatable(L,"gui.iguibutton");//{guielement},{m_iguibutton} + lua_setmetatable(L,-2);//{guielement} + + setelementcallback(L,EGET_BUTTON_CLICKED,"onClicked");// + printf("Finished registering callback\n"); return 1; @@ -106,8 +108,6 @@ static int newiguibutton(lua_State* L){ static const luaL_reg iguibutton_f[] = { {"new", newiguibutton}, - {"gethandeler", guigethandeler}, - {"sethandeler", guisethandeler}, {0,0}, }; @@ -118,7 +118,7 @@ static const luaL_reg iguibutton_m[] = { {0,0}, }; -int iguibutton_register(lua_State* L){ +void iguibutton_register(lua_State* L){ tL = L; luaL_newmetatable(L, "gui.iguibutton");//{m_iguibutton} diff --git a/src/client/lua_api/gui/iguibutton.hpp b/src/client/lua_api/gui/iguibutton.hpp index abccbf0..b1595d3 100644 --- a/src/client/lua_api/gui/iguibutton.hpp +++ b/src/client/lua_api/gui/iguibutton.hpp @@ -8,4 +8,4 @@ extern "C" { } #include <irrlicht.h> -int iguibutton_register(lua_State* L); +void iguibutton_register(lua_State* L); diff --git a/src/client/lua_api/gui/iguicheckbox.cpp b/src/client/lua_api/gui/iguicheckbox.cpp index ec9cb93..8e1a643 100644 --- a/src/client/lua_api/gui/iguicheckbox.cpp +++ b/src/client/lua_api/gui/iguicheckbox.cpp @@ -20,11 +20,11 @@ int newiguicheckbox(lua_State* L){ IGUIElement* par = 0; if(lua_gettop(L) > 3){ par = (IGUIElement*)lua_touserdata(L,-1);//{startx,starty},{endx,endy},"checkbox_name",ud_parent - printf("Checkbox's parent was %s\n",par); + printf("Checkbox's parent was %p\n",par); lua_pop(L,1);//{startx,starty},{endx,endy},"checkbox_name" } const char* text = lua_tostring(L,-1); - int tlen = strlen(text); + //int tlen = strlen(text); lua_pop(L,1);//{startx,starty},{endx,endy} long startx,starty,endx,endy; popvector2i(L,&endx,&endy);//{startx,starty} @@ -40,7 +40,7 @@ int newiguicheckbox(lua_State* L){ static const luaL_reg iguicheckbox_m[] = { {"move", moveiguielement}, {"setText", setiguitext}, - {"remove", guisethandeler}, + //{"remove", guisethandeler}, {0,0}, }; diff --git a/src/client/lua_api/gui/iguielement.cpp b/src/client/lua_api/gui/iguielement.cpp index d14c18e..bdc13df 100644 --- a/src/client/lua_api/gui/iguielement.cpp +++ b/src/client/lua_api/gui/iguielement.cpp @@ -9,21 +9,22 @@ extern "C" { #include <shared/lua_api/common.hpp> #include <irrlicht.h> #include "../guiparts.hpp" +#include <client/callbackhandeler.hpp> using namespace irr; using namespace core; using namespace gui; -static LIGUIElement* toiguielement(lua_State* L,int index){ - LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index); - if(ret == NULL) - luaL_typerror(L,index,"LIGUIButton"); - return ret; -} +//static LIGUIElement* toiguielement(lua_State* L,int index){ + //LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index); + //if(ret == NULL) + //luaL_typerror(L,index,"LIGUIButton"); + //return ret; +//} -static LIGUIElement* toiguielement(lua_State* L){ - return toiguielement(L,1); -} +//static LIGUIElement* toiguielement(lua_State* L){ + //return toiguielement(L,1); +//} //move({element},{x,y}) -> nil int moveiguielement(lua_State* L){ @@ -45,18 +46,16 @@ int moveiguielement(lua_State* L){ int getiguiclippingrect(lua_State* L){ printf("Getting iguiclipping elemnt\n"); lua_getfield(L,-1,"guielement"); - IGUIElement *el = (IGUIElement*)lua_touserdata(L,-1); + IGUIElement *el = (IGUIElement*)lua_touserdata(L,-1);//{element},ud_element + lua_pop(L,2); core::rect<s32> rect = el->getAbsoluteClippingRect(); - position2d<s32> ul = rect.UpperLeftCorner; - position2d<s32> lr = rect.LowerRightCorner; - lua_newtable(L); - lua_pushnumber(L,1); - double sx,sy,ex,ey; - pushvector2i(L,ul.X,ul.Y); - lua_settable(L,-3); - lua_pushnumber(L,2); - pushvector2i(L,lr.X,lr.Y); - lua_settable(L,-3); + pushrecti( + L, + rect.UpperLeftCorner.X, + rect.UpperLeftCorner.Y, + rect.LowerRightCorner.X, + rect.LowerRightCorner.Y + ); return 1; } /* @@ -69,15 +68,19 @@ int moveiguielement(lua_State* L){ } */ +//setText({guielement},"text") :: nil int setiguitext(lua_State* L){ - LIGUIElement* ele = toiguielement(L,1); - const char* str = luaL_optstring(L,2,""); - int size = strlen(str); - wchar_t* al = (wchar_t*)malloc(sizeof(wchar_t)*size); - mbstowcs(al,str,size); - ele->e->setText(al); - free(al); - return 0; + const char* text = lua_tostring(L, -1); + lua_pop(L,1);//{guielement} + lua_getfield(L,-1,"guielement");//{guielement},ud_iguielement + IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_iguielement + lua_pop(L,2); + int textlen = strlen(text); + wchar_t* wtext = (wchar_t*)malloc(sizeof(wchar_t)*textlen); + mbstowcs(wtext,text,textlen); + el->setText(wtext); + free(wtext); + return 0; } //remove({self}) @@ -89,50 +92,90 @@ int removeiguielement(lua_State* L){ return 0; } -int guigethandeler(lua_State* L){ - printf("Called the get index handeler!\n"); - LIGUIElement* button = toiguielement(L); - if(!lua_isstring(L,2)){ - luaL_error(L,"index of iguibutton must be of type 'string'"); - } - const char* lstr = lua_tostring(L,2); - char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); - strcpy(hashkey,lstr); - int ref; - if(hashmap_get(button->funcmap,hashkey,(void**)&ref) == MAP_OK){ - //We found the value in our hashmap! - lua_rawgeti(L,LUA_REGISTRYINDEX,ref); - return 1; - }else{ - //Could not find in hashmap, check parrent - lua_getglobal(L,button->type); - printf("Button's type is %s\n",button->type); - lua_getfield(L,-1,lstr); - return 1; - } -} -int guisethandeler(lua_State* L){ - printf("Called the set index handeler\n"); - LIGUIElement* button = toiguielement(L); - if(!lua_isstring(L,2)){ - luaL_error(L,"index of iguibutton must be of type 'string'"); - } - const char* lstr = lua_tostring(L,2); - char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); - strcpy(hashkey,lstr); - int oldref; - if(hashmap_get(button->funcmap,hashkey,(void**)&oldref) == MAP_OK){ - luaL_unref(L,LUA_REGISTRYINDEX,oldref); - hashmap_remove(button->funcmap,hashkey); - } - int ref = luaL_ref(L,LUA_REGISTRYINDEX); - if(hashmap_put(button->funcmap,hashkey,(void*)ref) != MAP_OK){ - luaL_error(L,"Error while setting the hashkey on iguibutton"); - } - return 0; +class guicallback{ +private: + int luaitem; + const char* funcname; + lua_State* L; +public: + guicallback(lua_State* L, int lf, const char* fn){ + this->luaitem = lf; + this->L = L; + this->funcname = fn; + } + bool operator () (SEvent e) { + lua_rawgeti(L,LUA_REGISTRYINDEX,this->luaitem);//{guielement} + lua_getfield(L,-1,this->funcname);//{guielement},func() + if(!lua_isnil(L,-1)){ + lua_rawgeti(L,LUA_REGISTRYINDEX,this->luaitem);//{guielement},func(),{guielement} + lua_call(L,1,0);//{iguielement} + lua_pop(L,1);//{} + return true; + }else{ + lua_pop(L,2);//{} + return false; + } + } +}; + +//{guielement} +//popelementcallback(lua_State* L, gui::EGUI_EVENT_TYPE, char*) +void setelementcallback(lua_State* L,gui::EGUI_EVENT_TYPE et, const char* funcname){ + //lua_getfield(L,-1,"guielement");//{guielement} + //IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_element + //lua_pop(L,1);//{guielement} + registerguielement(L); + //int ref = luaL_ref(L,LUA_REGISTRYINDEX);// + //guicallback* gc = new guicallback(L,ref,funcname);//TODO:Clean this up somehow + //popregisterguicallback(el,et, gc); + //lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement} } +//int guigethandeler(lua_State* L){ + //printf("Called the get index handeler!\n"); + //LIGUIElement* button = toiguielement(L); + //if(!lua_isstring(L,2)){ + //luaL_error(L,"index of iguibutton must be of type 'string'"); + //} + //const char* lstr = lua_tostring(L,2); + //char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); + //strcpy(hashkey,lstr); + //int ref; + //if(hashmap_get(button->funcmap,hashkey,(void**)&ref) == MAP_OK){ + ////We found the value in our hashmap! + //lua_rawgeti(L,LUA_REGISTRYINDEX,ref); + //return 1; + //}else{ + ////Could not find in hashmap, check parrent + //lua_getglobal(L,button->type); + //printf("Button's type is %s\n",button->type); + //lua_getfield(L,-1,lstr); + //return 1; + //} +//} + +//int guisethandeler(lua_State* L){ + //printf("Called the set index handeler\n"); + //LIGUIElement* button = toiguielement(L); + //if(!lua_isstring(L,2)){ + //luaL_error(L,"index of iguibutton must be of type 'string'"); + //} + //const char* lstr = lua_tostring(L,2); + //char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); + //strcpy(hashkey,lstr); + //int oldref; + //if(hashmap_get(button->funcmap,hashkey,(void**)&oldref) == MAP_OK){ + //luaL_unref(L,LUA_REGISTRYINDEX,oldref); + //hashmap_remove(button->funcmap,hashkey); + //} + //int ref = luaL_ref(L,LUA_REGISTRYINDEX); + //if(hashmap_put(button->funcmap,hashkey,(void*)ref) != MAP_OK){ + //luaL_error(L,"Error while setting the hashkey on iguibutton"); + //} + //return 0; +//} + //ud_iguielement int guigetid(lua_State* L){ IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1); diff --git a/src/client/lua_api/gui/iguielement.hpp b/src/client/lua_api/gui/iguielement.hpp index 84fc2c9..f860d7e 100644 --- a/src/client/lua_api/gui/iguielement.hpp +++ b/src/client/lua_api/gui/iguielement.hpp @@ -12,6 +12,7 @@ int moveiguielement(lua_State* L); int getiguiclippingrect(lua_State* L); int setiguitext(lua_State* L); int removeiguielement(lua_State* L); +void setelementcallback(lua_State* L, irr::gui::EGUI_EVENT_TYPE et, const char* funcname); int guigethandeler(lua_State* L); int guisethandeler(lua_State* L); int guigetid(lua_State* L); diff --git a/src/client/lua_api/gui/iguilabel.cpp b/src/client/lua_api/gui/iguilabel.cpp index 7c00e84..dce1b15 100644 --- a/src/client/lua_api/gui/iguilabel.cpp +++ b/src/client/lua_api/gui/iguilabel.cpp @@ -13,89 +13,64 @@ extern "C" { #include <irrlicht.h> #include "../guiparts.hpp" #include "iguielement.hpp" +#include "iguilabel.hpp" #include "../../callbackhandeler.hpp" +#include <shared/lua_api/common.hpp> using namespace irr; using namespace gui; -//IrrlichtDevice* guidevice; - -static LIGUIElement* checkiguilabel(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"gui.iguilabel"); - luaL_argcheck(L,ud != NULL, index, "'gui.iguilabel' expected"); - return (LIGUIElement*) ud; -} - -static LIGUIElement* checkiguilabel(lua_State* L){ - return checkiguilabel(L,1); -} +extern IrrlichtDevice* device; -static bool iguilabelevent(irr::SEvent e){ - printf("Oh no! an iguilabel generated an event!"); - return false; -} +//IrrlichtDevice* guidevice; +//static bool iguilabelevent(irr::SEvent e){ + //printf("Oh no! an iguilabel generated an event!"); + //return false; +//} +//gui.newguilabel({{sx,sy},{ex,ey}},"text"[,parent]) :: {guielement} static int newiguilabel(lua_State* L){ - printf("Createing label!\n"); - int nargs = lua_gettop(L); - //The position of the text - int startx = luaL_optint(L,1,0); - int starty = luaL_optint(L,2,0); - int endx = luaL_optint(L,3,startx+100); - int endy = luaL_optint(L,4,starty+100); - - //Label and tooltip - wchar_t* label; - const char* labelopt = luaL_optstring(L,5,"Label"); - int bls = strlen(labelopt); - label = (wchar_t*)malloc(sizeof(wchar_t)*(bls)); - mbstowcs(label,labelopt,bls); - printf("Got the string option\n"); - - //If the element has a parrent - int parent = 0; - if(nargs >= 6){ - parent = luaL_optint(L,6,0); - printf("got the parrent\n"); - } - - - //Create the button - IGUIEnvironment* env = guidevice->getGUIEnvironment(); - //Create the label - IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect<s32>(startx,starty,endx,endy),false,false, guielements[parent], gui_elenum++, false); - printf("Created the button\n"); - - //Register it's callback - registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); - - //Create it's lua representation - LIGUIElement* ltext = (LIGUIElement*)lua_newuserdata(L, sizeof(LIGUIElement)); - int tref = luaL_ref(L,LUA_REGISTRYINDEX); - iguielements[llabel] = tref; - lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//Put it back on the stack since luaL_ref pops the object. - - //Set it's metatable - luaL_getmetatable(L, "gui.iguilabel"); - lua_setmetatable(L, -2); - - //Create the struct - ltext->e = llabel; - ltext->funcmap = hashmap_new(); - ltext->type = "iguilabel"; - - //Free up anything made in this function - free(label); - - //Put it on top and return it - lua_rawgeti(L,LUA_REGISTRYINDEX,tref); - return 1; + printf("Createing label!\n"); + int nargs = lua_gettop(L); + IGUIElement* parent = NULL; + if(nargs == 3){ + lua_getfield(L,-1,"guielement");//{{sx,sy},{ex,ey}},"text",{guielemtn=parent},parent + parent = (IGUIElement*)lua_touserdata(L,-1); + lua_pop(L,2);//{{sx,sy},{ex,ey}},"text" + } + //{{sx,sy},{ex,ey}},"text" + + const char* text = lua_tostring(L,-1);//{{sx,sy},{ex,ey}},"text" + int bls = strlen(text); + wchar_t* text_w = (wchar_t*)malloc(sizeof(wchar_t)*bls); + mbstowcs(text_w,text,bls); + lua_pop(L,1);//{{sx,sy},{ex,ey}} + + long sx, sy, ex, ey; + poprecti(L,&sx,&sy,&ex,&ey);// + + IGUIEnvironment* env = device->getGUIEnvironment(); + IGUIStaticText* statictext = env->addStaticText( + text_w, + core::rect<s32>(sx,sy,ex,ey), + false, + false, + parent, + -1, + false + ); + + lua_newtable(L); //{} + lua_pushlightuserdata(L,statictext);//{},*statictext + lua_setfield(L,-2,"guielement");//{guielement} + luaL_getmetatable(L,"gui.iguilabel");//{guielement},{m_guielement} + lua_setmetatable(L,-2);//{guielement} + registerguielement(L); + return 1; } static const luaL_reg iguilabel_f[] = { - {"new", newiguilabel}, - {"gethandeler", guigethandeler}, - {"sethandeler", guisethandeler}, + {"newlabel", newiguilabel}, {0,0}, }; @@ -106,23 +81,16 @@ static const luaL_reg iguilabel_m[] = { {0, 0}, }; -int iguilabel_register(lua_State* L, IrrlichtDevice* d){ - - luaL_newmetatable(L, "gui.iguilabel"); - - luaL_register(L,"iguilabel",iguilabel_f); - - lua_pushstring(L,"__index"); - lua_pushstring(L,"gethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); +void iguilabel_register(lua_State* L){ - lua_pushstring(L,"__newindex"); - lua_pushstring(L,"sethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); + luaL_newmetatable(L, "gui.iguilabel");//{m_gui.iguilabel} + lua_newtable(L);//{m_gui.iguilabel},{} - luaL_register(L, NULL, iguilabel_m); + luaL_register(L,"iguilabel",iguilabel_m);//{m_gui.iguilabel},{guilabel} + lua_setfield(L,-2,"__index");//{m_gui.iguilabel} + lua_pop(L,1); - return 1; + lua_getglobal(L,"gui");//{gui} + luaL_register(L, NULL,iguilabel_f);//{gui} + lua_pop(L,1);// } diff --git a/src/client/lua_api/gui/iguilabel.hpp b/src/client/lua_api/gui/iguilabel.hpp index c779c70..dba0dbf 100644 --- a/src/client/lua_api/gui/iguilabel.hpp +++ b/src/client/lua_api/gui/iguilabel.hpp @@ -8,4 +8,4 @@ extern "C" { } #include <irrlicht.h> -int iguilabel_register(lua_State* L, irr::IrrlichtDevice* d); +void iguilabel_register(lua_State* L); diff --git a/src/client/lua_api/gui/iguiwindow.cpp b/src/client/lua_api/gui/iguiwindow.cpp index 705af18..30af486 100644 --- a/src/client/lua_api/gui/iguiwindow.cpp +++ b/src/client/lua_api/gui/iguiwindow.cpp @@ -20,17 +20,17 @@ extern "C" { using namespace irr; using namespace gui; -static bool iguiwindowevent(irr::SEvent e){ - int ref = iguielements[e.GUIEvent.Caller]; - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - lua_getfield(tL,-1,"close"); +//static bool iguiwindowevent(irr::SEvent e){ + //int ref = iguielements[e.GUIEvent.Caller]; + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //lua_getfield(tL,-1,"close"); - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - lua_call(tL,1,1); + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //lua_call(tL,1,1); - int shouldclose = lua_toboolean(tL,-1); - return shouldclose == 1; -} + //int shouldclose = lua_toboolean(tL,-1); + //return shouldclose == 1; +//} //new({{sx,sy},{ex,ey}},"title"[,{guielement=parent}]) :: {guielement} static int newiguiwindow(lua_State* L){ @@ -68,11 +68,12 @@ static int newiguiwindow(lua_State* L){ luaL_getmetatable(L,"gui.window");//{element=ud_window},{m_gui.window} lua_setmetatable(L,-2);//{element=ud_window, __meta=gui.window} - int ref = luaL_ref(L,LUA_REGISTRYINDEX);//ref - lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//ref,{element=ud_window, __meta=gui.window} + int ref = luaL_ref(L,LUA_REGISTRYINDEX);// + lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{element=ud_window, __meta=gui.window} + registerguielement(L); iguielements[wi] = ref; - registerguicallback(wi,EGET_ELEMENT_CLOSED,iguiwindowevent); + //registerguicallback(wi,EGET_ELEMENT_CLOSED,iguiwindowevent); return 1; } diff --git a/src/client/lua_api/load_gui.cpp b/src/client/lua_api/load_gui.cpp index c90c8f5..598f842 100644 --- a/src/client/lua_api/load_gui.cpp +++ b/src/client/lua_api/load_gui.cpp @@ -27,38 +27,41 @@ extern IrrlichtDevice* device; //Things from guiparts.hpp std::map<irr::gui::IGUIElement*,int> iguielements; IrrlichtDevice* guidevice; -long gui_elenum; -std::vector<irr::gui::IGUIElement*> guielements(1); +//long gui_elenum; +//std::vector<irr::gui::IGUIElement*> guielements(1); lua_State* tL; int screenwidth(lua_State* L); int screenheight(lua_State* L); void load_guifuncs(lua_State* L){ - tL = L; - guidevice = device; - gui_elenum = 0; - guielements[0] = NULL; + printf("Started loading gui...\n"); + tL = L; + guidevice = device; + //gui_elenum = 0; + //guielements[0] = NULL; - iguilabel_register(L,device); - lua_pop(L, 1); - - //Various enums - register_skin(L); + //Various enums + register_skin(L); - lua_newtable(L); - lua_setglobal(L,"gui"); - iguicheckbox_register(L); - iguiwindow_register(L,device); - iguiimage_register(L); - iguibutton_register(L); - - lua_pushcfunction(L,screenwidth); - lua_setglobal(L,"scrw"); + lua_newtable(L); + lua_setglobal(L,"gui"); + //printf("Registering label...\n"); + iguilabel_register(L); + //printf("Registering checkbox...\n"); + iguicheckbox_register(L); + //printf("Registering window...\n"); + iguiwindow_register(L,device); + //printf("Registering guiimage\n"); + iguiimage_register(L); + //printf("Registering button\n"); + iguibutton_register(L); - lua_pushcfunction(L,screenheight); - lua_setglobal(L,"scrh"); + lua_pushcfunction(L,screenwidth); + lua_setglobal(L,"scrw"); + lua_pushcfunction(L,screenheight); + lua_setglobal(L,"scrh"); } diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp index 2935d21..0baf45a 100644 --- a/src/client/lua_api/phys/cbphysbox.cpp +++ b/src/client/lua_api/phys/cbphysbox.cpp @@ -100,8 +100,8 @@ int cbphyssetpos(lua_State* L){//{rigidbody=ud_btRigidbody,node=ud_iscenenode},{ r->activate(true); - //i->setPosition(vector3df(x,y,z)); - //i->updateAbsolutePosition(); + i->setPosition(vector3df(x,y,z)); + i->updateAbsolutePosition(); return 0; diff --git a/src/client/lua_api/scene/icamera.cpp b/src/client/lua_api/scene/icamera.cpp index 654fc7b..0554ce1 100644 --- a/src/client/lua_api/scene/icamera.cpp +++ b/src/client/lua_api/scene/icamera.cpp @@ -22,11 +22,11 @@ using namespace core; extern IrrlichtDevice* device; -static LISceneNode* checkiscenecamera(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"scene.iscenecamera"); - luaL_argcheck(L,ud != NULL, index, "'scene.iscenecamera' expected"); - return (LISceneNode*) ud; -} +//static LISceneNode* checkiscenecamera(lua_State* L, int index){ + //void* ud = luaL_checkudata(L,index,"scene.iscenecamera"); + //luaL_argcheck(L,ud != NULL, index, "'scene.iscenecamera' expected"); + //return (LISceneNode*) ud; +//} /* static LISceneNode* checkiscenecamera(lua_State* L){ @@ -34,11 +34,11 @@ static LISceneNode* checkiscenecamera(lua_State* L){ } */ -static LISceneNode* checkismayacamera(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"scene.iscenemayacamera"); - luaL_argcheck(L,ud != NULL, index, "'scene.iscenemayacamera' expected"); - return (LISceneNode*) ud; -} +//static LISceneNode* checkismayacamera(lua_State* L, int index){ + //void* ud = luaL_checkudata(L,index,"scene.iscenemayacamera"); + //luaL_argcheck(L,ud != NULL, index, "'scene.iscenemayacamera' expected"); + //return (LISceneNode*) ud; +//} /* static LISceneNode* checkismayacamera(lua_State* L){ return checkismayacamera(L,1); @@ -94,24 +94,28 @@ static int newiscenefpscamera(lua_State* L){// return 1; } -//iscenecamera.new(Vector position, Vector lookat, parrent) +//iscenecamera.new(Vector position, Vector lookat,{node=parent}) static int newiscenecamera(lua_State* L){ printf("Createing camera!\n"); int nargs = lua_gettop(L); double px,py,pz; double lx,ly,lz; - - int parent = lua_tonumber(L,-1); - lua_pop(L,1); + ISceneNode* parent = NULL; + if(nargs == 3){ + lua_getfield(L,-1,"node");//{position},{lookat},{parent},ud_ISceneNode + parent = (ISceneNode*)lua_touserdata(L,-1); + lua_pop(L,2);//{position},{lookat} + } + //{position},{lookat} //The position of the camera - popvector3d(L,&px,&py,&pz); + popvector3d(L,&px,&py,&pz);//{position} printf("position of camera was %f,%f,%f\n",px,py,pz); - popvector3d(L,&lx,&ly,&lz); + popvector3d(L,&lx,&ly,&lz);// printf("lookat of camera was %f,%f,%f\n",lx,ly,lz); //If the element has a parrent if(nargs >= 3){ - printf("got the parrent\n"); + printf("got the parrent, %p\n",parent); } @@ -119,11 +123,11 @@ static int newiscenecamera(lua_State* L){ ISceneManager* smgr = device->getSceneManager(); ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(px,py,pz), vector3df(lx,ly,lz)); printf("Registered the camera!\n"); - lua_newtable(L); - lua_pushlightuserdata(L,cam); - lua_setfield(L,-2,"node"); - luaL_getmetatable(L,"scene.icamera"); - lua_setmetatable(L,-2); + lua_newtable(L);//{} + lua_pushlightuserdata(L,cam);//{},ud_cam + lua_setfield(L,-2,"node");//{node=ud_cam} + luaL_getmetatable(L,"scene.icamera");//{node=ud_cam},{scene.icamera} + lua_setmetatable(L,-2);//{cam} return 1; } diff --git a/src/client/lua_api/scene/igeneric.cpp b/src/client/lua_api/scene/igeneric.cpp index 4619064..c60aa90 100644 --- a/src/client/lua_api/scene/igeneric.cpp +++ b/src/client/lua_api/scene/igeneric.cpp @@ -35,14 +35,14 @@ int iscenegetpos(lua_State* L){//{node=ud_IMeshSceneNode} return 1; } -int iscenesetpos(lua_State* L){//{node=ud_IMeshSceneNode},{x,y,z} +int iscenesetpos(lua_State* L){//{node=ISceneNode},{x,y,z} double x,y,z; - popvector3d(L,&x,&y,&z);//{node=ud_IMeshSceneNode} - lua_getfield(L,-1,"node");//{node=ud_IMeshSceneNode},ud_IMeshSceneNode - ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{node=ud_IMeshSceneNode},ud_IMeshSceneNode + popvector3d(L,&x,&y,&z);//{node=ud_ISceneNode} + lua_getfield(L,-1,"node");//{node=ud_ISceneNode},ud_ISceneNode + ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{node=ud_ISceneNode},ud_ISceneNode i->setPosition(vector3df(x,y,z)); i->updateAbsolutePosition(); - vector3df pos = i->getAbsolutePosition(); + //vector3df pos = i->getAbsolutePosition(); //printf("After setting pos, new pos is %f %f %f",pos.X,pos.Y,pos.Z); lua_pop(L,2);// return 0; diff --git a/src/client/lua_api/scene/ilight.cpp b/src/client/lua_api/scene/ilight.cpp index 8f52f2d..7473bfa 100644 --- a/src/client/lua_api/scene/ilight.cpp +++ b/src/client/lua_api/scene/ilight.cpp @@ -22,15 +22,15 @@ using namespace core; extern IrrlichtDevice* device; -static LISceneNode* checkiscenelight(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"scene.ilight"); - luaL_argcheck(L,ud != NULL, index, "'scene.ilight' expected"); - return (LISceneNode*) ud; -} - -static LISceneNode* checkilight(lua_State* L){ - return checkiscenelight(L,1); -} +//static LISceneNode* checkiscenelight(lua_State* L, int index){ + //void* ud = luaL_checkudata(L,index,"scene.ilight"); + //luaL_argcheck(L,ud != NULL, index, "'scene.ilight' expected"); + //return (LISceneNode*) ud; +//} + +//static LISceneNode* checkilight(lua_State* L){ + //return checkiscenelight(L,1); +//} //{} :: scene.newlight(radius, {v3 position}) static int newiscenelight(lua_State* L){ diff --git a/src/client/lua_api/scene/imesh.cpp b/src/client/lua_api/scene/imesh.cpp index c72e83a..b5c8939 100644 --- a/src/client/lua_api/scene/imesh.cpp +++ b/src/client/lua_api/scene/imesh.cpp @@ -23,11 +23,11 @@ using namespace video; extern IrrlichtDevice* device; -static LISceneNode* checkismesh(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"scene.imesh"); - luaL_argcheck(L,ud != NULL, index, "'scene.imesh' expected"); - return (LISceneNode*) ud; -} +//static LISceneNode* checkismesh(lua_State* L, int index){ + //void* ud = luaL_checkudata(L,index,"scene.imesh"); + //luaL_argcheck(L,ud != NULL, index, "'scene.imesh' expected"); + //return (LISceneNode*) ud; +//} /* static LISceneNode* checkismesh(lua_State* L){ diff --git a/src/client/lua_api/video/smaterial.cpp b/src/client/lua_api/video/smaterial.cpp index c72d4ca..2ef7053 100644 --- a/src/client/lua_api/video/smaterial.cpp +++ b/src/client/lua_api/video/smaterial.cpp @@ -14,22 +14,27 @@ using namespace irr::video; int newsmaterial(lua_State* L){ SMaterial* mat = new SMaterial(); - lua_pushlightuserdata(L,mat);//ud_smaterial + lua_newtable(L);//{} + lua_pushlightuserdata(L,mat);//{},ud_smaterial + lua_setfield(L,-2,"smaterial");//{smaterial} - luaL_getmetatable(L,"smaterial");//ud_smaterial,{m_smaterial} - lua_setmetatable(L,-2);//ud_smaterial + luaL_getmetatable(L,"video.smaterial");//{smaterial},{m_smaterial} + lua_setmetatable(L,-2);//{smaterial} return 1; } -//setMaterial(self,int_num,{ITexture texture}) +//setTexture(self,int_num,{ITexture texture}) int setTexture(lua_State* L){ + lua_getfield(L,-1,"texture"); ITexture* tex = (ITexture*)lua_touserdata(L,-1); - lua_pop(L,1); + lua_pop(L,2); double num = lua_tonumber(L,-1); lua_pop(L,1); + lua_getfield(L,-1,"smaterial"); SMaterial* self = (SMaterial*)lua_touserdata(L,-1); - lua_pop(L,1); + lua_pop(L,2); + self->setTexture(num,tex); return 0; } @@ -43,7 +48,7 @@ static const luaL_reg smaterial_m[] = { void smaterial_register(lua_State* L){ //Add globals dealing with material flags - luaL_newmetatable(L,"smaterial");//{m_smaterial} + luaL_newmetatable(L,"video.smaterial");//{m_smaterial} lua_newtable(L);//{m_smaterial},{} luaL_register(L,NULL,smaterial_m);//{m_smaterial},{smaterial} diff --git a/src/client/main.cpp b/src/client/main.cpp index f764fe9..1fcc65d 100644 --- a/src/client/main.cpp +++ b/src/client/main.cpp @@ -117,6 +117,7 @@ int main(int argc, char *argv[]){ //Create a new lua state, this gets shared everywhere lua_State *state = luaL_newstate(); L = state; + printf("Created lua state at %p\n",L); //Load the lua libraries loadLLibs(state); //Defined in initdevice.cpp, creates the irrlicht device @@ -133,12 +134,14 @@ int main(int argc, char *argv[]){ luaL_openlibs(state); printf("Loadded irr libs...\n"); //Sets the global event handeler + printf("Creating event receiver\n"); GlobalEventReceiver ger = GlobalEventReceiver(device); + printf("Created event receiver\n"); device->setEventReceiver(&ger); int iErr = luaL_dofile(state,"../data/init.lua"); if(iErr != 0){ + printf("Failed to open lua file:../data/init.lua\n"); lua_error(state); - printf("Failed to open lua file:../data/guitest.lua\n"); } //Load some bullet physics stuff @@ -160,6 +163,8 @@ int main(int argc, char *argv[]){ lua_pushcfunction(L,setbackgroundcolor); lua_setfield(L,-2,"setbackgroundcolor"); lua_pop(L,1); + printf("About to check if device run\n"); + printf("Device is %p\n",device); while(device->run()){ gameloop_net(L); gameloop_phys(UpdateElement); @@ -192,6 +197,7 @@ int main(int argc, char *argv[]){ lua_call(state,0,0); lua_pop(state,1); }else{ + printf("Tick was nil...\n"); lua_pop(state,2); } //lua_pop(state,2); diff --git a/src/client/menuhandeler.cpp b/src/client/menuhandeler.cpp index 53d38cc..b7c5f48 100644 --- a/src/client/menuhandeler.cpp +++ b/src/client/menuhandeler.cpp @@ -15,8 +15,7 @@ using namespace io; using namespace gui; void loadMenu(const char* name, IrrlichtDevice* device){ - IGUIEnvironment* env = device->getGUIEnvironment(); - IGUIWindow* window = env->addWindow(rect<s32>(0,0,200,200),true,L"Menu",0,-1); + } void showMenu(const char* name, IrrlichtDevice* device){ |
