#include #include #include #include #include #include extern "C" { #include #include #include } #include #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(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; }