aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/scene/icamera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/lua_api/scene/icamera.cpp')
-rw-r--r--src/client/lua_api/scene/icamera.cpp51
1 files changed, 43 insertions, 8 deletions
diff --git a/src/client/lua_api/scene/icamera.cpp b/src/client/lua_api/scene/icamera.cpp
index 482bf31..003f2ad 100644
--- a/src/client/lua_api/scene/icamera.cpp
+++ b/src/client/lua_api/scene/icamera.cpp
@@ -42,6 +42,7 @@ static int newiscenemayacamera(lua_State* L){
static int newiscenefpscamera(lua_State* L){//
ISceneManager* smgr = device->getSceneManager();
ICameraSceneNode* cam = smgr->addCameraSceneNodeFPS();
+ //cam->bindTargetAndRotation(false);
lua_newtable(L);//{}
lua_pushlightuserdata(L,cam);//{},ud_cam
lua_setfield(L,-2,"node");
@@ -97,21 +98,52 @@ static int newiscenecamera(lua_State* L){
return 1;
}
+//camera:bind_target(bool) :: nil
+static int icamerabindtarget(lua_State *L){
+ int should_bind = lua_toboolean(L,-1);//{node=ud_cam},bool_shouldbind
+ printf("Bind target called %d\n",should_bind);
+ lua_pop(L,1);//{node=ud_cam}
+ lua_getfield(L,-1,"node");//{node=ud_cam},ud_cam
+ ICameraSceneNode *cam = (ICameraSceneNode*)lua_touserdata(L,-1);
+ lua_pop(L,2);//
+ cam->bindTargetAndRotation(should_bind == 1);
+ return 0;
+}
+
+//camera:gettarget() :: v3f
+static int icameragettarget(lua_State *L){
+ lua_getfield(L,-1,"node");
+ ICameraSceneNode *cam = (ICameraSceneNode*)lua_touserdata(L,-1);
+ lua_pop(L,2);//
+ vector3df targ = cam->getTarget();
+ pushvector3d(L,targ.X, targ.Y, targ.Z);
+ return 1;
+}
+
+//camera:settarget(v3f)
+static int icamerasettarget(lua_State *L){
+ double x,y,z;
+ popvector3d(L,&x,&y,&z);
+ lua_getfield(L,-1,"node");
+ ICameraSceneNode *cam = (ICameraSceneNode*)lua_touserdata(L,-1);
+ lua_pop(L,2);//
+ cam->setTarget(vector3df(x,y,z));
+ return 0;
+}
+
static const luaL_reg icamera_m[] = {
- {"getpos", iscenegetpos},
- {"setpos", iscenesetpos},
- {"getangle", iscenegetangle},
- {"setangle", iscenesetangle},
- {0, 0},
+ {"bindtarget", icamerabindtarget},
+ {"gettarget", icameragettarget},
+ {"settarget", icamerasettarget},
+ {0,0},
};
static const luaL_reg imayacamera_m[] = {
- {0,0},
+ {0,0},
};
static const luaL_reg ifpscamera_m[] = {
- {"getpos", iscenegetpos},
- {0,0},
+ {0,0},
};
void icamera_register(lua_State* L){
@@ -119,6 +151,7 @@ void icamera_register(lua_State* L){
luaL_newmetatable(L, "scene.icamera");//scene.icamera
lua_newtable(L);//scene.icamera, {}
luaL_register(L,NULL,icamera_m);//scene.icamera, {}
+ luaL_register(L,NULL,igeneric_m);//scene.icamera, {}
lua_setfield(L,-2,"__index");//scene.icamera
lua_pop(L,1);//
@@ -126,6 +159,7 @@ void icamera_register(lua_State* L){
lua_newtable(L);//scene.imayascamera,{}
luaL_register(L,NULL,imayacamera_m);//scene.imayascamera,{}
luaL_register(L,NULL,icamera_m);//scene.imayascamera,{}
+ luaL_register(L,NULL,igeneric_m);
lua_setfield(L,-2,"__index");//scene.imayascamera
lua_pop(L,1);//
@@ -133,6 +167,7 @@ void icamera_register(lua_State* L){
lua_newtable(L);//scene.ifpscamera, {}
luaL_register(L,NULL,ifpscamera_m);//scene.ifpscamera,{}
luaL_register(L,NULL,icamera_m);//scene.ifpscamera,{}
+ luaL_register(L,NULL,igeneric_m);
lua_setfield(L,-2,"__index");//scene.ifpscamera
lua_pop(L,1);//