diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2016-11-01 00:28:16 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2016-11-01 00:28:16 -0400 |
| commit | d2b36e6c65ec8126c0ebc96adb7e011e78a5eacc (patch) | |
| tree | 9e005502ea2c125c90b5011f573f381f84ade0ef /src/client/lua_api/scene | |
| download | brokengine-d2b36e6c65ec8126c0ebc96adb7e011e78a5eacc.tar.gz brokengine-d2b36e6c65ec8126c0ebc96adb7e011e78a5eacc.tar.bz2 brokengine-d2b36e6c65ec8126c0ebc96adb7e011e78a5eacc.zip | |
Initial commit
Diffstat (limited to 'src/client/lua_api/scene')
| -rw-r--r-- | src/client/lua_api/scene/icamera.cpp | 124 | ||||
| -rw-r--r-- | src/client/lua_api/scene/icamera.hpp | 11 |
2 files changed, 135 insertions, 0 deletions
diff --git a/src/client/lua_api/scene/icamera.cpp b/src/client/lua_api/scene/icamera.cpp new file mode 100644 index 0000000..2dd5a67 --- /dev/null +++ b/src/client/lua_api/scene/icamera.cpp @@ -0,0 +1,124 @@ + +#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 "../gameparts.hpp" +#include "icamera.hpp" + +using namespace irr; +using namespace scene; + +//IrrlichtDevice* guidevice; + +static LISceneNode* checkiscenecamera(lua_State* L, int index){ + void* ud = luaL_checkudata(L,index,"scene.icamera"); + luaL_argcheck(L,ud != NULL, index, "'scene.icamera' expected"); + return (LISceneNode*) ud; +} + +static LISceneNode* checkiscenecamera(lua_State* L){ + return checkiscenecamera(L,1); +} + +//iscenecamera.new(Vector position, Vector lookat, parrent) +static int newiscenecamera(lua_State* L){ + printf("Createing camera!\n"); + int nargs = lua_gettop(L); + //The position of the camera + 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(); + //printf("Createing button with data %d %d %d %d, %p, %d, %s, %s\n", startx,starty,endx,endy,guielements[parent],gui_elenum,button_label,button_tooltip); + //Create the label + IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect<s32>(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; +} + +static const luaL_reg iguilabel_f[] = { + {"new", newiguilabel}, + {"gethandeler", guigethandeler}, + {"sethandeler", guisethandeler}, + {0,0}, +}; + +static const luaL_reg iguilabel_m[] = { + {"move", moveiguielement}, + {"settext", setiguitext}, + {"remove", removeiguielement}, + {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); + + lua_pushstring(L,"__newindex"); + lua_pushstring(L,"sethandeler"); + lua_gettable(L,-3); + lua_settable(L,-4); + + luaL_register(L, NULL, iguilabel_m); + + return 1; +} diff --git a/src/client/lua_api/scene/icamera.hpp b/src/client/lua_api/scene/icamera.hpp new file mode 100644 index 0000000..15525f8 --- /dev/null +++ b/src/client/lua_api/scene/icamera.hpp @@ -0,0 +1,11 @@ + +#include <stdio.h> +#include <stdlib.h> +extern "C" { + #include <lua.h> + #include <lauxlib.h> + #include <lualib.h> +} +#include <irrlicht.h> + +int icamera_register(lua_State* L, irr::IrrlichtDevice* d); |
