]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_localplayer.cpp
Merge branch 'master' of https://github.com/minetest/minetest
[dragonfireclient.git] / src / script / lua_api / l_localplayer.cpp
index 2efb976c7ed0fc78ebf05d0d56aa6b5273429b4f..1da0679d69ea5bfefce9f05fa7d234407615683d 100644 (file)
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
+#include "l_clientobject.h"
 #include "l_localplayer.h"
 #include "l_internal.h"
 #include "lua_api/l_item.h"
@@ -24,7 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "client/localplayer.h"
 #include "hud.h"
 #include "common/c_content.h"
+#include "client/client.h"
 #include "client/content_cao.h"
+#include "client/game.h"
 
 LuaLocalPlayer::LuaLocalPlayer(LocalPlayer *m) : m_localplayer(m)
 {
@@ -60,6 +63,57 @@ int LuaLocalPlayer::l_get_velocity(lua_State *L)
        return 1;
 }
 
+int LuaLocalPlayer::l_set_velocity(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+
+       v3f pos = checkFloatPos(L, 2);
+       player->setSpeed(pos);
+
+       return 0;
+}
+
+int LuaLocalPlayer::l_get_yaw(lua_State *L)
+{
+    lua_pushnumber(L, wrapDegrees_0_360(g_game->cam_view.camera_yaw));
+    return 1;
+}
+
+int LuaLocalPlayer::l_set_yaw(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+
+       if (lua_isnumber(L, 2)) {
+               double yaw = lua_tonumber(L, 2);
+               player->setYaw(yaw);
+               g_game->cam_view.camera_yaw = yaw;
+               g_game->cam_view_target.camera_yaw = yaw;
+       }
+
+       return 0;
+}
+
+int LuaLocalPlayer::l_get_pitch(lua_State *L)
+{
+    lua_pushnumber(L, -wrapDegrees_180(g_game->cam_view.camera_pitch) );
+    return 1;
+}
+
+int LuaLocalPlayer::l_set_pitch(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+
+       if (lua_isnumber(L, 2)) {
+               double pitch = lua_tonumber(L, 2);
+               player->setPitch(pitch);
+               g_game->cam_view.camera_pitch = pitch;
+               g_game->cam_view_target.camera_pitch = pitch;
+       }
+
+       return 0;
+}
+
+
 int LuaLocalPlayer::l_get_hp(lua_State *L)
 {
        LocalPlayer *player = getobject(L, 1);
@@ -81,10 +135,24 @@ int LuaLocalPlayer::l_get_wield_index(lua_State *L)
 {
        LocalPlayer *player = getobject(L, 1);
 
-       lua_pushinteger(L, player->getWieldIndex());
+       lua_pushinteger(L, player->getWieldIndex() + 1);
        return 1;
 }
 
+// set_wield_index(self)
+int LuaLocalPlayer::l_set_wield_index(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+       u32 index = luaL_checkinteger(L, 2) - 1;
+
+       player->setWieldIndex(index);
+       g_game->processItemSelection(&g_game->runData.new_playeritem);
+       ItemStack selected_item, hand_item;
+       ItemStack &tool_item = player->getWieldedItem(&selected_item, &hand_item);
+       g_game->camera->wield(tool_item);
+       return 0;
+}
+
 // get_wielded_item(self)
 int LuaLocalPlayer::l_get_wielded_item(lua_State *L)
 {
@@ -157,26 +225,30 @@ int LuaLocalPlayer::l_get_physics_override(lua_State *L)
 {
        LocalPlayer *player = getobject(L, 1);
 
-       lua_newtable(L);
-       lua_pushnumber(L, player->physics_override_speed);
-       lua_setfield(L, -2, "speed");
+       push_physics_override(L, player->physics_override_speed, player->physics_override_jump, player->physics_override_gravity, player->physics_override_sneak, player->physics_override_sneak_glitch, player->physics_override_new_move);
 
-       lua_pushnumber(L, player->physics_override_jump);
-       lua_setfield(L, -2, "jump");
-
-       lua_pushnumber(L, player->physics_override_gravity);
-       lua_setfield(L, -2, "gravity");
-
-       lua_pushboolean(L, player->physics_override_sneak);
-       lua_setfield(L, -2, "sneak");
+       return 1;
+}
 
-       lua_pushboolean(L, player->physics_override_sneak_glitch);
-       lua_setfield(L, -2, "sneak_glitch");
+// set_physics_override(self, override)
+int LuaLocalPlayer::l_set_physics_override(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
 
-       lua_pushboolean(L, player->physics_override_new_move);
-       lua_setfield(L, -2, "new_move");
+       player->physics_override_speed = getfloatfield_default(
+                       L, 2, "speed", player->physics_override_speed);
+       player->physics_override_jump = getfloatfield_default(
+                       L, 2, "jump", player->physics_override_jump);
+       player->physics_override_gravity = getfloatfield_default(
+                       L, 2, "gravity", player->physics_override_gravity);
+       player->physics_override_sneak = getboolfield_default(
+                       L, 2, "sneak", player->physics_override_sneak);
+       player->physics_override_sneak_glitch = getboolfield_default(
+                       L, 2, "sneak_glitch", player->physics_override_sneak_glitch);
+       player->physics_override_new_move = getboolfield_default(
+                       L, 2, "new_move", player->physics_override_new_move);
 
-       return 1;
+       return 0;
 }
 
 int LuaLocalPlayer::l_get_last_pos(lua_State *L)
@@ -261,6 +333,17 @@ int LuaLocalPlayer::l_get_pos(lua_State *L)
        return 1;
 }
 
+// set_pos(self, pos)
+int LuaLocalPlayer::l_set_pos(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+
+       v3f pos = checkFloatPos(L, 2);
+       player->setPosition(pos);
+       getClient(L)->sendPlayerPos();
+       return 0;
+}
+
 // get_movement_acceleration(self)
 int LuaLocalPlayer::l_get_movement_acceleration(lua_State *L)
 {
@@ -400,6 +483,27 @@ int LuaLocalPlayer::l_hud_get(lua_State *L)
        return 1;
 }
 
+// get_object(self)
+int LuaLocalPlayer::l_get_object(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+       ClientEnvironment &env = getClient(L)->getEnv();
+       ClientActiveObject *obj = env.getGenericCAO(player->getCAO()->getId());
+
+       push_objectRef(L, obj->getId());
+
+       return 1;
+}
+
+// get_hotbar_size(self)
+int LuaLocalPlayer::l_get_hotbar_size(lua_State *L)
+{
+       LocalPlayer *player = getobject(L, 1);
+       lua_pushnumber(L, player->hud_hotbar_itemcount);
+
+       return 1;
+}
+
 LuaLocalPlayer *LuaLocalPlayer::checkobject(lua_State *L, int narg)
 {
        luaL_checktype(L, narg, LUA_TUSERDATA);
@@ -460,9 +564,15 @@ void LuaLocalPlayer::Register(lua_State *L)
 const char LuaLocalPlayer::className[] = "LocalPlayer";
 const luaL_Reg LuaLocalPlayer::methods[] = {
                luamethod(LuaLocalPlayer, get_velocity),
+               luamethod(LuaLocalPlayer, set_velocity),
+               luamethod(LuaLocalPlayer, get_yaw),
+               luamethod(LuaLocalPlayer, set_yaw),
+               luamethod(LuaLocalPlayer, get_pitch),
+               luamethod(LuaLocalPlayer, set_pitch),
                luamethod(LuaLocalPlayer, get_hp),
                luamethod(LuaLocalPlayer, get_name),
                luamethod(LuaLocalPlayer, get_wield_index),
+               luamethod(LuaLocalPlayer, set_wield_index),
                luamethod(LuaLocalPlayer, get_wielded_item),
                luamethod(LuaLocalPlayer, is_attached),
                luamethod(LuaLocalPlayer, is_touching_ground),
@@ -471,6 +581,7 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
                luamethod(LuaLocalPlayer, is_climbing),
                luamethod(LuaLocalPlayer, swimming_vertical),
                luamethod(LuaLocalPlayer, get_physics_override),
+               luamethod(LuaLocalPlayer, set_physics_override),
                // TODO: figure our if these are useful in any way
                luamethod(LuaLocalPlayer, get_last_pos),
                luamethod(LuaLocalPlayer, get_last_velocity),
@@ -480,6 +591,7 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
                luamethod(LuaLocalPlayer, get_control),
                luamethod(LuaLocalPlayer, get_breath),
                luamethod(LuaLocalPlayer, get_pos),
+               luamethod(LuaLocalPlayer, set_pos),
                luamethod(LuaLocalPlayer, get_movement_acceleration),
                luamethod(LuaLocalPlayer, get_movement_speed),
                luamethod(LuaLocalPlayer, get_movement),
@@ -488,6 +600,8 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
                luamethod(LuaLocalPlayer, hud_remove),
                luamethod(LuaLocalPlayer, hud_change),
                luamethod(LuaLocalPlayer, hud_get),
+               luamethod(LuaLocalPlayer, get_object),
+               luamethod(LuaLocalPlayer, get_hotbar_size),
 
                luamethod(LuaLocalPlayer, get_move_resistance),