diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2017-07-15 11:35:44 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2017-07-15 11:35:44 -0400 |
| commit | fa49161fe2d7e0a025c9fd8559815d56dfd1f427 (patch) | |
| tree | cb3a64e2d45ff9f675c256a94f5c1ccb01ec5a09 /src/client/lua_api/scene/ilight.cpp | |
| parent | b98dbac4ed2f755ce71bd9be17f26a3f86c1e3cc (diff) | |
| download | brokengine-fa49161fe2d7e0a025c9fd8559815d56dfd1f427.tar.gz brokengine-fa49161fe2d7e0a025c9fd8559815d56dfd1f427.tar.bz2 brokengine-fa49161fe2d7e0a025c9fd8559815d56dfd1f427.zip | |
Added static physics things
Added some phyics stuff! woo!
* Added physics models from file
* Added physics boxes
* Added a maya camera
* Added lights
* Various refactoring
Diffstat (limited to 'src/client/lua_api/scene/ilight.cpp')
| -rw-r--r-- | src/client/lua_api/scene/ilight.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/client/lua_api/scene/ilight.cpp b/src/client/lua_api/scene/ilight.cpp new file mode 100644 index 0000000..df01dd3 --- /dev/null +++ b/src/client/lua_api/scene/ilight.cpp @@ -0,0 +1,130 @@ + +#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 "ilight.hpp" +#include "igeneric.hpp" + +using namespace irr; +using namespace scene; +using namespace core; + +extern IrrlichtDevice* device; + +static LISceneNode* checkiscenelight(lua_State* L, int index){ + void* ud = luaL_checkudata(L,index,"scene.ilight"); + luaL_argcheck(L,ud != NULL, index, "'scene.ilight' expected"); + return (LISceneNode*) ud; +} + +static LISceneNode* checkilight(lua_State* L){ + return checkiscenelight(L,1); +} + +//iscenelight.new(Vector position, parrent = nil) +static int newiscenelight(lua_State* L){ + printf("Createing light!\n"); + int nargs = lua_gettop(L); + //lua_pop(L,1); + // float radius = 100; + // if(nargs == 2){ + // radius = luaL_optnumber(L,2,100); + // } + float radius = lua_tonumber(L,-1); + printf("radius was %f\n" ,radius); + lua_pop(L,1); + + //The position of the light + lua_pushnumber(L,1); + lua_gettable(L,-2); + float x = lua_tonumber(L,-1); + printf("got x: %f\n",x); + lua_pop(L,1); + lua_pushnumber(L,2); + lua_gettable(L,-2); + float y = lua_tonumber(L,-1); + lua_pop(L,1); + lua_pushnumber(L,3); + lua_gettable(L,-2); + float z = lua_tonumber(L,-1); + lua_pop(L,1); + printf("Found position for light: %f %f %f\n",x,y,z); + + //Create the mesh + ISceneManager* smgr = device->getSceneManager(); + ILightSceneNode* light = smgr->addLightSceneNode(0,vector3df(x,y,z),video::SColor(1.0f,1.0f,1.0f,1.0f),(f32)radius,(s32)-1); + printf("Registered the light!\n"); + + //Register it's callback + //registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); + + //Create it's lua representation + LISceneNode* lnode = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode)); + int tref = luaL_ref(L,LUA_REGISTRYINDEX); + //iguielements[lcam] = 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, "scene.imesh"); + lua_setmetatable(L, -2); + + lnode->n = light; + lnode->funcmap = hashmap_new(); + lnode->type = "ilight"; + + //Put it on top and return it + lua_rawgeti(L,LUA_REGISTRYINDEX,tref); + return 1; + + } + +static const luaL_reg icamera_f[] = { + {"new", newiscenelight}, +// {"gethandeler", guigethandeler}, +// {"sethandeler", guisethandeler}, + {0,0}, +}; + +static const luaL_reg icamera_m[] = { + {"getpos", iscenegetpos}, + {"setpos", iscenesetpos}, +// {"move", moveiguielement}, +// {"settext", setiguitext}, +// {"remove", removeiguielement}, + {0, 0}, +}; + +int ilight_register(lua_State* L, IrrlichtDevice* d){ + + device = d; + + printf("icamera registered\n"); + + luaL_newmetatable(L, "scene.ilight"); + + luaL_register(L,"ilight",icamera_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, icamera_m); + + return 1; +} |
