From 7f51b2da28e004b82fc6835e5257e619da4666b2 Mon Sep 17 00:00:00 2001
From: RealBadAngel <mk@realbadangel.pl>
Date: Sun, 17 Mar 2013 12:16:57 +0100
Subject: [PATCH] lua methods set_look_pitch and set_look_yaw

---
 doc/lua_api.txt          |  2 ++
 src/content_sao.cpp      | 14 ++++++++++++++
 src/content_sao.h        |  2 ++
 src/scriptapi_object.cpp | 27 ++++++++++++++++++++++++++-
 src/scriptapi_object.h   |  8 +++++++-
 5 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index eb05d117e..7d8fa149f 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1228,6 +1228,8 @@ Player-only: (no-op for other objects)
 - get_look_dir(): get camera direction as a unit vector
 - get_look_pitch(): pitch in radians
 - get_look_yaw(): yaw in radians (wraps around pretty randomly as of now)
+- set_look_pitch(radians): sets look pitch
+- set_look_yaw(radians): sets look yaw
 - set_inventory_formspec(formspec)
   ^ Redefine player's inventory form
   ^ Should usually be called in on_joinplayer
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 @@ class PlayerSAO : public ServerActiveObject
 	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 <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
@@ -169,6 +169,12 @@ class ObjectRef
 	// 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);
 
-- 
GitLab