aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/scene
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2016-11-01 00:28:16 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2016-11-01 00:28:16 -0400
commitd2b36e6c65ec8126c0ebc96adb7e011e78a5eacc (patch)
tree9e005502ea2c125c90b5011f573f381f84ade0ef /src/client/lua_api/scene
downloadbrokengine-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.cpp124
-rw-r--r--src/client/lua_api/scene/icamera.hpp11
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);