diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2018-03-09 23:55:49 -0500 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2018-03-09 23:55:49 -0500 |
| commit | 2831e232b886c5e3b0791ea5192f9e5194e6abf3 (patch) | |
| tree | 4fb9309d18f388673b7a21b8f0e927727006f585 /src/client/lua_api/gui/iguiimage.cpp | |
| parent | 35b7c646fd7f80b64c1ef49b6d81f9df9bc1b940 (diff) | |
| download | brokengine-2831e232b886c5e3b0791ea5192f9e5194e6abf3.tar.gz brokengine-2831e232b886c5e3b0791ea5192f9e5194e6abf3.tar.bz2 brokengine-2831e232b886c5e3b0791ea5192f9e5194e6abf3.zip | |
Added IGUIImages
Added the ability to display itextures on the gui
Diffstat (limited to 'src/client/lua_api/gui/iguiimage.cpp')
| -rw-r--r-- | src/client/lua_api/gui/iguiimage.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> +#include <vector> +#include <memory> +#include <map> +#include <functional> +extern "C" { + #include <lua.h> + #include <lauxlib.h> + #include <lualib.h> +} +#include <irrlicht.h> +#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<s32>(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"); +} |
