From 2831e232b886c5e3b0791ea5192f9e5194e6abf3 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Fri, 9 Mar 2018 23:55:49 -0500 Subject: Added IGUIImages Added the ability to display itextures on the gui --- src/client/lua_api/gui/iguiimage.cpp | 100 +++++++++++++++++++++++++++++++++++ src/client/lua_api/gui/iguiimage.hpp | 12 +++++ src/client/lua_api/gui/simple.cpp | 55 +++++++++++++++++++ src/client/lua_api/gui/simple.hpp | 0 4 files changed, 167 insertions(+) create mode 100644 src/client/lua_api/gui/iguiimage.cpp create mode 100644 src/client/lua_api/gui/iguiimage.hpp create mode 100644 src/client/lua_api/gui/simple.cpp create mode 100644 src/client/lua_api/gui/simple.hpp (limited to 'src/client/lua_api/gui') diff --git a/src/client/lua_api/gui/iguiimage.cpp b/src/client/lua_api/gui/iguiimage.cpp new file mode 100644 index 0000000..c349c3e --- /dev/null +++ b/src/client/lua_api/gui/iguiimage.cpp @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include +#include +extern "C" { + #include + #include + #include +} +#include +#include "../guiparts.hpp" +#include "iguielement.hpp" +#include "iguiwindow.hpp" +#include "iguiutil.hpp" +#include "../../callbackhandeler.hpp" +#include "../../../shared/lua_api/common.h" + +using namespace irr; +using namespace gui; + +extern IrrlichtDevice* device; +extern IGUIEnvironment* env; +//IrrlichtDevice* guidevice; + + +//static bool iguiimageevent(irr::SEvent e){ + //IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller; + //int ref = iguielements[caller]; + //EGUI_EVENT_TYPE etype = e.GUIEvent.EventType; + //printf("Detected image event\n"); + //if(etype == EGET_ELEMENT_CLOSED){ + //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 = checkiguiwindow(tL,-1); + //int hashmapresponse; + //char* hashkey = (char*)"onclose"; + //int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse); + //if(terror == MAP_OK){ //Only call if we actually have that function. + //printf("Looks like we have an onclose function, calling!\n"); + //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); //push the function + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); //push the referance to iguielement + //lua_call(tL,1,1); + ////int b = lua_isnoneornil(tL,1); + //int a = lua_toboolean(tL,-1); + //printf("a:%d\n",a); + //return a; + //} + //} + //printf("Oh no! an iguiimage generated an event!"); + //return false; +//} + +//new({startx,starty},alpha,itexture) +static int newiguiimage(lua_State* L){ + printf("Creating iguiimage\n"); + + video::ITexture* tex = (video::ITexture*)lua_touserdata(L,-1); + lua_pop(L,1); + + bool usealpha = lua_toboolean(L,-1); + lua_pop(L,1); + + long sx,sy; + popvector2i(L,&sx,&sy); + + IGUIEnvironment* env = device->getGUIEnvironment(); + IGUIImage* img = env->addImage(tex,core::position2d(sx,sy),usealpha,0,-1,L""); + img->setImage(tex); + + lua_pushlightuserdata(L,img);//ud_iguiimg + luaL_getmetatable(L,"iguiimage");//ud_iguiimg,{m_iguiimg} + lua_setmetatable(L,-1);//ud_iguiimg + + return 1; +} + +static const luaL_reg iguiimage_m[] = { + //{"move", moveiguielement}, + //{"settext", setiguitext}, + //{"remove", removeiguielement}, + {0, 0}, +}; + +void iguiimage_register(lua_State* L){ + printf("Loading iguiimage\n"); + luaL_newmetatable(L,"iguiimage");//{m_iguiimg} + lua_newtable(L);//{m_iguiimg},{} + luaL_register(L,NULL,iguiimage_m);//{m_iguiimg},{iguiimg_m} + printf("About to set field\n"); + lua_setfield(L,-2,"__index");//{m_iguiimg} + lua_pop(L,1);// + printf("Got half way\n"); + lua_getglobal(L,"gui");//{gui} + lua_pushcfunction(L,newiguiimage);//{gui},newimg() + lua_setfield(L,-2,"newiguiimage");//{gui} + lua_pop(L,1);// + printf("Finished loading iguiimage\n"); +} diff --git a/src/client/lua_api/gui/iguiimage.hpp b/src/client/lua_api/gui/iguiimage.hpp new file mode 100644 index 0000000..7210ff0 --- /dev/null +++ b/src/client/lua_api/gui/iguiimage.hpp @@ -0,0 +1,12 @@ + + +#include +#include +extern "C" { + #include + #include + #include +} +#include + +int iguiimage_register(lua_State* L); diff --git a/src/client/lua_api/gui/simple.cpp b/src/client/lua_api/gui/simple.cpp new file mode 100644 index 0000000..8790069 --- /dev/null +++ b/src/client/lua_api/gui/simple.cpp @@ -0,0 +1,55 @@ +#include +extern "C" { + #include + #include + #include +} + +// {{startx, starty},{endx,endy}} +lua_torecti(lua_State* L, int number, int* sx, int* sy, int* ex, int* ey){ + lua_pushnumber(L,1);// ...,{},...,1 + lua_gettable(L,number);// ...,{{sx,sy},{ex,ey}},...,{sx,sy} + + lua_pushnumber(L,1);// ...,{{sx,sy},{ex,ey}},...,{sx,sy},1 + lua_gettable(L,-2);// ...,{{sx,sy},{ex,ey}},...,{sx,sy},sx + *sx = lua_tonumber(L,-1);// ...,{{sx,sy},{ex,ey}},...,{sx,sy},sx + + lua_pop(1);// ...,{{sx,sy},{ex,ey}},...,{sx,sy} + + lua_pushnumber(L,2);// ...,{{sx,sy},{ex,ey}},...,{sx,sy},2 + lua_gettable(L,-2);// ...,{{sx,sy},{ex,ey}},...,{sx,sy},sy + *sy = lua_tonumber(L,-1); + + lua_pop(2);// ...,{{sx,sy},{ex,ey}},... + + + lua_pushnumber(L,2);// ...,{{sx,sy},{ex,ey}},...,2 + lua_gettable(L,number);// ...,{{sx,sy},{ex,ey}},...,{ex,ey} + lua_pushnumber(L,1);// ...,{{sx,sy},{ex,ey}},...,{ex,ey},1 + + lua_gettable(L,-2);// ...,{{sx,sy},{ex,ey}},...,{ex,ey},ex + *ex = lua_tonumber(L,-1);// ...,{{sx,sy},{ex,ey}},...,{ex,ey},ex + lua_pop(L,1);// ...,{{sx,sy},{ex,ey}},...,{ex,ey} + + lua_pushnumber(L,2);// ...,{{sx,sy},{ex,ey}},...,{ex,ey},2 + lua_gettable(L,-2);// ...,{{sx,sy},{ex,ey}},...,{ex,ey},ey + *ey = lua_tonumber(L,-1);// ...,{{sx,sy},{ex,ey}},...,{ex,ey},ey + + lua_pop(L,2);// ...,{{sx,sy},{ex,ey}},... +} + +int addIGUIButton(lua_State* L){ + IGUIEnvironment env = lua_touserdata(L,1); + IGUIElement parent = lua_touserdata(L,2); + s32 id = lua_tonumber(L,3); + s32 sx,sy,ex,ey; + lua_torecti(L,4,&sx,&sy,&ex,&ey); + core::rect rect = core::rect(sx,sy,ex,ey); + IGUIElement* button = env->addButton(rect,parent,id, + +} + +void add_gui(lua_State* L){ + +} + diff --git a/src/client/lua_api/gui/simple.hpp b/src/client/lua_api/gui/simple.hpp new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3-70-g09d2