aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/gui
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2018-03-09 23:55:49 -0500
committerAlexander Pickering <alexandermpickering@gmail.com>2018-03-09 23:55:49 -0500
commit2831e232b886c5e3b0791ea5192f9e5194e6abf3 (patch)
tree4fb9309d18f388673b7a21b8f0e927727006f585 /src/client/lua_api/gui
parent35b7c646fd7f80b64c1ef49b6d81f9df9bc1b940 (diff)
downloadbrokengine-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')
-rw-r--r--src/client/lua_api/gui/iguiimage.cpp100
-rw-r--r--src/client/lua_api/gui/iguiimage.hpp12
-rw-r--r--src/client/lua_api/gui/simple.cpp55
-rw-r--r--src/client/lua_api/gui/simple.hpp0
4 files changed, 167 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");
+}
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 <stdio.h>
+#include <stdlib.h>
+extern "C" {
+ #include <lua.h>
+ #include <lauxlib.h>
+ #include <lualib.h>
+}
+#include <irrlicht.h>
+
+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 <irrlicht.h>
+extern "C" {
+ #include <lua.h>
+ #include <lauxlib.h>
+ #include <lualib.h>
+}
+
+// {{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<s32> rect = core::rect<s32>(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
--- /dev/null
+++ b/src/client/lua_api/gui/simple.hpp