From b6f4a9c7e1a4f0bac66fd6f6ff844425ac775975 Mon Sep 17 00:00:00 2001 From: TeTpaAka Date: Fri, 29 May 2015 20:30:55 +0200 Subject: [PATCH] Make the player collisionbox settable --- doc/lua_api.txt | 3 ++- src/content_cao.cpp | 6 ++++++ src/content_sao.cpp | 5 ++++- src/localplayer.h | 2 ++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 166cc024a..1f8abd70c 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3705,7 +3705,8 @@ Definition tables collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, visual = "cube"/"sprite"/"upright_sprite"/"mesh"/"wielditem", visual_size = {x=1, y=1}, - mesh = "model", + mesh = "model", -- for players (0, -1, 0) is ground level, + -- for all other entities (0, 0, 0) is ground level. textures = {}, -- number of required textures depends on visual colors = {}, -- number of required colors depends on visual spritediv = {x=1, y=1}, diff --git a/src/content_cao.cpp b/src/content_cao.cpp index c5cb1e21a..d18a0233f 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1585,7 +1585,13 @@ void GenericCAO::processMessage(const std::string &data) } if (m_is_local_player) { LocalPlayer *player = m_env->getLocalPlayer(); + player->makes_footstep_sound = m_prop.makes_footstep_sound; + + aabb3f collisionbox = m_selection_box; + collisionbox.MinEdge += v3f(0, BS, 0); + collisionbox.MaxEdge += v3f(0, BS, 0); + player->setCollisionbox(collisionbox); } if ((m_is_player && !m_is_local_player) && m_prop.nametag == "") diff --git a/src/content_sao.cpp b/src/content_sao.cpp index d59f97276..20b0396cd 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1429,7 +1429,10 @@ bool PlayerSAO::checkMovementCheat() bool PlayerSAO::getCollisionBox(aabb3f *toset) const { - *toset = aabb3f(-BS * 0.30, 0.0, -BS * 0.30, BS * 0.30, BS * 1.75, BS * 0.30); + //update collision box + toset->MinEdge = m_prop.collisionbox.MinEdge * BS + v3f(0, BS, 0); + toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS + v3f(0, BS, 0); + toset->MinEdge += m_base_position; toset->MaxEdge += m_base_position; return true; diff --git a/src/localplayer.h b/src/localplayer.h index 9cbefae23..efea8bb86 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -137,6 +137,8 @@ public: v3f getEyePosition() const { return m_position + getEyeOffset(); } v3f getEyeOffset() const; + void setCollisionbox(aabb3f box) { m_collisionbox = box; } + private: void accelerateHorizontal(const v3f &target_speed, const f32 max_increase); void accelerateVertical(const v3f &target_speed, const f32 max_increase);