diff options
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguielement.cpp | 10 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguielement.hpp | 1 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguigeneric.cpp | 27 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguigeneric.hpp | 11 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguiimage.cpp | 1 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguiwindow.cpp | 31 | ||||
| -rw-r--r-- | src/client/lua_api/load_gui.cpp | 2 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysbox.cpp | 22 | ||||
| -rw-r--r-- | src/client/lua_api/scene/igeneric.cpp | 17 | ||||
| -rw-r--r-- | src/client/lua_api/scene/imesh.cpp | 26 | ||||
| -rw-r--r-- | src/client/lua_api/video/smaterial.cpp | 36 | ||||
| -rw-r--r-- | src/client/main.cpp | 16 |
13 files changed, 111 insertions, 92 deletions
@@ -134,9 +134,6 @@ $(CLIENT_BUILD)iguicheckbox.o : $(CLIENT_SRC)lua_api/gui/iguicheckbox.cpp $(CLIE $(CLIENT_BUILD)iguielement.o : $(CLIENT_BUILD)hashmap.o $(CLIENT_SRC)lua_api/gui/iguielement.cpp $(CLIENT_SRC)lua_api/gui/iguielement.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguielement.o $(CLIENT_SRC)lua_api/gui/iguielement.cpp -$(CLIENT_BUILD)iguigeneric.o : $(CLIENT_SRC)lua_api/gui/iguigeneric.cpp $(CLIENT_SRC)lua_api/gui/iguigeneric.hpp - $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguigeneric.o $(CLIENT_SRC)lua_api/gui/iguigeneric.cpp - $(CLIENT_BUILD)iguiskin.o : $(CLIENT_SRC)lua_api/gui/iguiskin.cpp $(CLIENT_SRC)lua_api/gui/iguiskin.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiskin.o $(CLIENT_SRC)lua_api/gui/iguiskin.cpp diff --git a/src/client/lua_api/gui/iguielement.cpp b/src/client/lua_api/gui/iguielement.cpp index cb395af..c01fa70 100644 --- a/src/client/lua_api/gui/iguielement.cpp +++ b/src/client/lua_api/gui/iguielement.cpp @@ -9,6 +9,7 @@ extern "C" { using namespace irr; using namespace core; +using namespace gui; static LIGUIElement* toiguielement(lua_State* L,int index){ LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index); @@ -91,3 +92,12 @@ int guisethandeler(lua_State* L){ } return 0; } + +//ud_iguielement +int guigetid(lua_State* L){ + IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1); + lua_pop(L,1); + int id = el->getID(); + lua_pushnumber(L,id); + return 1; +} diff --git a/src/client/lua_api/gui/iguielement.hpp b/src/client/lua_api/gui/iguielement.hpp index 5756a34..a036fd5 100644 --- a/src/client/lua_api/gui/iguielement.hpp +++ b/src/client/lua_api/gui/iguielement.hpp @@ -13,3 +13,4 @@ int setiguitext(lua_State* L); int removeiguielement(lua_State* L); int guigethandeler(lua_State* L); int guisethandeler(lua_State* L); +int guigetid(lua_State* L); diff --git a/src/client/lua_api/gui/iguigeneric.cpp b/src/client/lua_api/gui/iguigeneric.cpp deleted file mode 100644 index 7f39fdc..0000000 --- a/src/client/lua_api/gui/iguigeneric.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <vector> -#include <memory> -#include <map> -#include <string> -#include <functional> -extern "C" { - #include <lua.h> - #include <lauxlib.h> - #include <lualib.h> -} -#include <irrlicht.h> -#include "../guiparts.hpp" -#include "iguielement.hpp" -#include "../../callbackhandeler.hpp" -#include "../../util/hashmap.h" - -using namespace irr; -using namespace gui; - -extern IrrlichtDevice* device; - -int iguigeneric_register(lua_State* L, IrrlichtDevice* d){ - - return 0; -} diff --git a/src/client/lua_api/gui/iguigeneric.hpp b/src/client/lua_api/gui/iguigeneric.hpp deleted file mode 100644 index 287fb4e..0000000 --- a/src/client/lua_api/gui/iguigeneric.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <vector> -extern "C" { - #include <lua.h> - #include <lauxlib.h> - #include <lualib.h> -} -#include <irrlicht.h> - -int iguigeneric_register(lua_State* L, irr::IrrlichtDevice* d); diff --git a/src/client/lua_api/gui/iguiimage.cpp b/src/client/lua_api/gui/iguiimage.cpp index c349c3e..fea283b 100644 --- a/src/client/lua_api/gui/iguiimage.cpp +++ b/src/client/lua_api/gui/iguiimage.cpp @@ -86,6 +86,7 @@ static const luaL_reg iguiimage_m[] = { void iguiimage_register(lua_State* L){ printf("Loading iguiimage\n"); luaL_newmetatable(L,"iguiimage");//{m_iguiimg} + printf("made meta table\n"); lua_newtable(L);//{m_iguiimg},{} luaL_register(L,NULL,iguiimage_m);//{m_iguiimg},{iguiimg_m} printf("About to set field\n"); diff --git a/src/client/lua_api/gui/iguiwindow.cpp b/src/client/lua_api/gui/iguiwindow.cpp index 038c9f7..9a42dff 100644 --- a/src/client/lua_api/gui/iguiwindow.cpp +++ b/src/client/lua_api/gui/iguiwindow.cpp @@ -59,9 +59,12 @@ static bool iguiwindowevent(irr::SEvent e){ return false; } -//new({posx,posy},{width,height}[,"title"][,parent]) +//new({width,height},{posx,posy},"title"[,parent]) static int newiguiwindow(lua_State* L){ printf("Creating window\n"); + + int numargs = lua_gettop(L); + int parentid = lua_tointeger(L,-1); lua_pop(L,1); @@ -97,15 +100,11 @@ static int newiguiwindow(lua_State* L){ return 1; } -static const luaL_reg iguiwindow_f[] = { - {"new", newiguiwindow}, - {0,0}, -}; - static const luaL_reg iguiwindow_m[] = { {"move", moveiguielement}, {"settext", setiguitext}, {"remove", removeiguielement}, + {"getid", guigetid}, {0, 0}, }; @@ -116,27 +115,9 @@ int iguiwindow_register(lua_State* L, IrrlichtDevice* d){ lua_pop(L,1);// lua_getglobal(L,"gui"); - lua_pushstring(L,"newwindow"); lua_pushcfunction(L,newiguiwindow); - lua_settable(L,-3); + lua_setfield(L,-2,"newwindow"); lua_pop(L,1); return 0; - //luaL_newmetatable(L, "gui.iguiwindow"); - - //luaL_register(L,"iguiwindow",iguiwindow_f); - - //lua_pushstring(L,"__index"); - //lua_pushstring(L,"gethandeler"); - //lua_gettable(L,-3); - //lua_settable(L,-4); - - //lua_pushstring(L,"__newindex"); - //lua_pushstring(L,"sethandeler"); - //lua_gettable(L,-3); - //lua_settable(L,-4); - - //luaL_register(L, NULL, iguiwindow_m); - - //return 1; } diff --git a/src/client/lua_api/load_gui.cpp b/src/client/lua_api/load_gui.cpp index 86c95cc..b2e941b 100644 --- a/src/client/lua_api/load_gui.cpp +++ b/src/client/lua_api/load_gui.cpp @@ -11,7 +11,6 @@ extern "C" { #include "gui/iguibutton.hpp" #include "gui/iguilabel.hpp" -#include "gui/iguigeneric.hpp" #include "gui/iguiwindow.hpp" #include "gui/iguiskin.hpp" #include "gui/iguicheckbox.hpp" @@ -43,7 +42,6 @@ void load_guifuncs(lua_State* L){ iguibutton_register(L,device); iguilabel_register(L,device); - iguigeneric_register(L,device); lua_pop(L, 1); //Various enums diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp index 6cbd749..3e72672 100644 --- a/src/client/lua_api/phys/cbphysbox.cpp +++ b/src/client/lua_api/phys/cbphysbox.cpp @@ -13,6 +13,7 @@ extern "C" { #include "cbphysbox.hpp" #include "../scene/imesh.hpp" #include "../../../shared/lua_api/phys/bphysbox.hpp" +#include "../scene/igeneric.hpp" using namespace irr; using namespace scene; @@ -134,11 +135,32 @@ int cbphysapplygravity(lua_State* L){ return 0; } +//setMaterial(self,material) +int cbsetmaterial(lua_State* L){ + printf("Call to setmaterial\n"); + //SMaterial* mat = (SMaterial*)lua_touserdata(L,-1);//{node=ud_ISceneNode},ud_IMaterial + ITexture* tex = (ITexture*)lua_touserdata(L,-1); + lua_pop(L,1);//{node=ud_ISceneNode} + printf("About to get field node\n"); + lua_getfield(L,-1,"node");//{node=ud_ISceneNode},ud_ISceneNode + printf("After call to field node\n"); + ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{node=ud_ISceneNode},ud_ISceneNode + lua_pop(L,2);// + + lua_pushlightuserdata(L,i); + lua_pushlightuserdata(L,tex); + printf("Finished getting everything for setmaterial\n"); + iscenesetmaterial(L); + + return 0; +} + static const luaL_reg cbphysbox_m[] = { {"setcpos", cbphyssetpos},//overload {"getcpos", cbphysgetpos}, {"getgravity", cbphysgetgravity}, {"applygravity",cbphysapplygravity}, + {"setMaterial", cbsetmaterial}, // {"delete", delbphysbox},//client side delete needs to delete the visual representation {0, 0}, }; diff --git a/src/client/lua_api/scene/igeneric.cpp b/src/client/lua_api/scene/igeneric.cpp index 8280008..c016788 100644 --- a/src/client/lua_api/scene/igeneric.cpp +++ b/src/client/lua_api/scene/igeneric.cpp @@ -66,14 +66,15 @@ int iscenesetangle(lua_State* L){//{node=ud_ISceneNode},{x,y,z} return 0; } -/* +//iscenesetmaterial(ud_ISceneNode,ud_itexture) int iscenesetmaterial(lua_State* L){ - ISceneNode* i = toiscenenode(L,1)->n; - const char* s = luaL_optstring(L,2,"error.png"); - printf("Setting material to %s",s); - IVideoDriver* driver = device->getVideoDriver(); - i->setMaterialTexture(0, driver->getTexture(s)); + printf("Calling generic iscenesetmaterial function\n"); + ITexture* txt = (ITexture*)lua_touserdata(L,-1);//ud_ISceneNode,ud_itexture + lua_pop(L,1);//ud_ISceneNode + ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//ud_ISceneNode + lua_pop(L,2);// + + i->setMaterialTexture(0,txt); - return 0; + return 0; } -*/ diff --git a/src/client/lua_api/scene/imesh.cpp b/src/client/lua_api/scene/imesh.cpp index f391431..2760067 100644 --- a/src/client/lua_api/scene/imesh.cpp +++ b/src/client/lua_api/scene/imesh.cpp @@ -91,19 +91,19 @@ int newiscenecube(lua_State* L){//{v3 size}, {v3 origin} } // self:setMaterial("path/to/material") -int iscenesetmaterial(lua_State* L){//self,"path/to" - ISceneNode* node = (IMeshSceneNode*)lua_touserdata(L,-2); - const char* s = lua_tostring(L,-1); - //ISceneNode* i = toiscenenode(L,1)->n; - //const char* s = luaL_optstring(L,2,"error.png"); - //printf("Setting material to %s",s); - - IVideoDriver* driver = device->getVideoDriver(); - node->setMaterialTexture(0, driver->getTexture(s)); - - lua_pop(L,2); - return 0; -} +//int iscenesetmaterial(lua_State* L){//self,"path/to" + //ISceneNode* node = (IMeshSceneNode*)lua_touserdata(L,-2); + //const char* s = lua_tostring(L,-1); + ////ISceneNode* i = toiscenenode(L,1)->n; + ////const char* s = luaL_optstring(L,2,"error.png"); + ////printf("Setting material to %s",s); + + //IVideoDriver* driver = device->getVideoDriver(); + //node->setMaterialTexture(0, driver->getTexture(s)); + + //lua_pop(L,2); + //return 0; +//} static const luaL_reg imesh_m[] = { {"setMaterial", iscenesetmaterial}, diff --git a/src/client/lua_api/video/smaterial.cpp b/src/client/lua_api/video/smaterial.cpp index e5b9eff..c72d4ca 100644 --- a/src/client/lua_api/video/smaterial.cpp +++ b/src/client/lua_api/video/smaterial.cpp @@ -10,18 +10,48 @@ extern "C" { using namespace irr::video; /*This probably needs a _gc metamethod*/ +//newsmaterial() int newsmaterial(lua_State* L){ + SMaterial* mat = new SMaterial(); - lua_pushlightuserdata(L,mat); + lua_pushlightuserdata(L,mat);//ud_smaterial + + luaL_getmetatable(L,"smaterial");//ud_smaterial,{m_smaterial} + lua_setmetatable(L,-2);//ud_smaterial + return 1; +} + +//setMaterial(self,int_num,{ITexture texture}) +int setTexture(lua_State* L){ + ITexture* tex = (ITexture*)lua_touserdata(L,-1); + lua_pop(L,1); + double num = lua_tonumber(L,-1); + lua_pop(L,1); + SMaterial* self = (SMaterial*)lua_touserdata(L,-1); + lua_pop(L,1); return 0; } +static const luaL_reg smaterial_m[] = { + {"setTexture", setTexture}, + {0,0}, +}; + #define set_const(l,x) lua_pushstring(l,#x);lua_pushinteger(l,x);lua_settable(l,-3); void smaterial_register(lua_State* L){ //Add globals dealing with material flags + luaL_newmetatable(L,"smaterial");//{m_smaterial} + + lua_newtable(L);//{m_smaterial},{} + luaL_register(L,NULL,smaterial_m);//{m_smaterial},{smaterial} + + lua_setfield(L,-2,"__index");//{m_smaterial} + + lua_pop(L,1);// + lua_getglobal(L,"video");//{} set_const(L,EMF_WIREFRAME); @@ -46,6 +76,8 @@ void smaterial_register(lua_State* L){ set_const(L,EMF_POLYGON_OFFSET); lua_pushcfunction(L,newsmaterial);//{},newsmaterial - lua_setfield(L,-2,"newsmaterial"); + lua_setfield(L,-2,"newsmaterial");//{} + + lua_pop(L,1);// } diff --git a/src/client/main.cpp b/src/client/main.cpp index 54aafc0..fbe707b 100644 --- a/src/client/main.cpp +++ b/src/client/main.cpp @@ -98,6 +98,16 @@ void UpdateElement(btRigidBody* TObject){ } +SColor background = SColor(255,100,101,140); + +//setbackgroundcolor(r,g,b) +int setbackgroundcolor(lua_State* L){ + long r,g,b; + popvector3i(L,&r,&g,&b); + background = SColor(255,r,g,b); + return 0; +} + int main(int argc, char *argv[]){ printf("Brok[en]gine Client"); // Initialize bullet @@ -140,6 +150,10 @@ int main(int argc, char *argv[]){ //u32 TimeStamp = irrTimer->getTime(), DeltaTime = 0; //high_resolution_clock::time_point t1 = high_resolution_clock::now(); + lua_getglobal(L,"GAME"); + lua_pushcfunction(L,setbackgroundcolor); + lua_setfield(L,-2,"setbackgroundcolor"); + lua_pop(L,1); while(device->run()){ gameloop_net(L); gameloop_phys(UpdateElement); @@ -149,7 +163,7 @@ int main(int argc, char *argv[]){ //double steps = delta.count() * 100; //UpdatePhysics(steps,UpdateElement); //t1 = now; - driver->beginScene(true, true, SColor(255,100,101,140)); + driver->beginScene(true, true, background); smgr->drawAll(); guienv->drawAll(); driver->endScene(); |
