From 7f51b2da28e004b82fc6835e5257e619da4666b2 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Sun, 17 Mar 2013 12:16:57 +0100 Subject: lua methods set_look_pitch and set_look_yaw --- src/content_sao.cpp | 14 ++++++++++++++ src/content_sao.h | 2 ++ src/scriptapi_object.cpp | 27 ++++++++++++++++++++++++++- src/scriptapi_object.h | 8 +++++++- 4 files changed, 49 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 1e02ea5a5..d7afc31d8 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1230,6 +1230,20 @@ void PlayerSAO::moveTo(v3f pos, bool continuous) m_moved = true; } +void PlayerSAO::setYaw(float yaw) +{ + m_player->setYaw(yaw); + // Force change on client + m_moved = true; +} + +void PlayerSAO::setPitch(float pitch) +{ + m_player->setPitch(pitch); + // Force change on client + m_moved = true; +} + int PlayerSAO::punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, diff --git a/src/content_sao.h b/src/content_sao.h index 2fd1034eb..e5b89d447 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -147,6 +147,8 @@ public: void setBasePosition(const v3f &position); void setPos(v3f pos); void moveTo(v3f pos, bool continuous); + void setYaw(float); + void setPitch(float); /* Interaction interface diff --git a/src/scriptapi_object.cpp b/src/scriptapi_object.cpp index ba72840c0..a0f93cbba 100644 --- a/src/scriptapi_object.cpp +++ b/src/scriptapi_object.cpp @@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "scriptapi_entity.h" #include "scriptapi_common.h" - /* ObjectRef */ @@ -582,6 +581,30 @@ int ObjectRef::l_get_look_yaw(lua_State *L) return 1; } +// set_look_pitch(self, radians) +int ObjectRef::l_set_look_pitch(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + PlayerSAO* co = getplayersao(ref); + if(co == NULL) return 0; + float pitch = luaL_checknumber(L, 2) * core::RADTODEG; + // Do it + co->setPitch(pitch); + return 1; +} + +// set_look_yaw(self, radians) +int ObjectRef::l_set_look_yaw(lua_State *L) +{ + ObjectRef *ref = checkobject(L, 1); + PlayerSAO* co = getplayersao(ref); + if(co == NULL) return 0; + float yaw = luaL_checknumber(L, 2) * core::RADTODEG; + // Do it + co->setYaw(yaw); + return 1; +} + // set_inventory_formspec(self, formspec) int ObjectRef::l_set_inventory_formspec(lua_State *L) { @@ -755,6 +778,8 @@ const luaL_reg ObjectRef::methods[] = { luamethod(ObjectRef, get_look_dir), luamethod(ObjectRef, get_look_pitch), luamethod(ObjectRef, get_look_yaw), + luamethod(ObjectRef, set_look_yaw), + luamethod(ObjectRef, set_look_pitch), luamethod(ObjectRef, set_inventory_formspec), luamethod(ObjectRef, get_inventory_formspec), luamethod(ObjectRef, get_player_control), diff --git a/src/scriptapi_object.h b/src/scriptapi_object.h index ba1e7db39..a37abbb78 100644 --- a/src/scriptapi_object.h +++ b/src/scriptapi_object.h @@ -1,5 +1,5 @@ /* -Minetest-c55 +Minetest Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify @@ -169,6 +169,12 @@ private: // get_look_yaw(self) static int l_get_look_yaw(lua_State *L); + // set_look_pitch(self, radians) + static int l_set_look_pitch(lua_State *L); + + // set_look_yaw(self, radians) + static int l_set_look_yaw(lua_State *L); + // set_inventory_formspec(self, formspec) static int l_set_inventory_formspec(lua_State *L); -- cgit v1.2.3