From ed58795eaf03bdee0b1fae8d05ce5b86d17549f7 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 30 Jun 2018 16:15:05 -0600 Subject: Warning-less build All compile warning for -Wall have been fixed --- src/client/lua_api/gui/iguibutton.cpp | 112 ++++++++++---------- src/client/lua_api/gui/iguibutton.hpp | 2 +- src/client/lua_api/gui/iguicheckbox.cpp | 6 +- src/client/lua_api/gui/iguielement.cpp | 181 ++++++++++++++++++++------------ src/client/lua_api/gui/iguielement.hpp | 1 + src/client/lua_api/gui/iguilabel.cpp | 144 ++++++++++--------------- src/client/lua_api/gui/iguilabel.hpp | 2 +- src/client/lua_api/gui/iguiwindow.cpp | 25 ++--- src/client/lua_api/load_gui.cpp | 47 +++++---- src/client/lua_api/phys/cbphysbox.cpp | 4 +- src/client/lua_api/scene/icamera.cpp | 48 +++++---- src/client/lua_api/scene/igeneric.cpp | 10 +- src/client/lua_api/scene/ilight.cpp | 18 ++-- src/client/lua_api/scene/imesh.cpp | 10 +- src/client/lua_api/video/smaterial.cpp | 19 ++-- 15 files changed, 327 insertions(+), 302 deletions(-) (limited to 'src/client/lua_api') 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 dim = rect(x,y,x+w,y+h); + rect dim = rect(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 -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 #include #include "../guiparts.hpp" +#include 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 rect = el->getAbsoluteClippingRect(); - position2d ul = rect.UpperLeftCorner; - position2d 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 #include "../guiparts.hpp" #include "iguielement.hpp" +#include "iguilabel.hpp" #include "../../callbackhandeler.hpp" +#include 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(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(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 -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 iguielements; IrrlichtDevice* guidevice; -long gui_elenum; -std::vector guielements(1); +//long gui_elenum; +//std::vector 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} -- cgit v1.2.3-70-g09d2