Make the player collisionbox settable
authorTeTpaAka <TeTpaAka@users.noreply.github.com>
Fri, 29 May 2015 18:30:55 +0000 (20:30 +0200)
committerShadowNinja <shadowninja@minetest.net>
Sat, 6 May 2017 19:41:05 +0000 (15:41 -0400)
doc/lua_api.txt
src/content_cao.cpp
src/content_sao.cpp
src/localplayer.h

index 166cc024a8b957bc341ff04a9295194c5ddf3323..1f8abd70cc896367fdf5dc8ae6812a33ad235480 100644 (file)
@@ -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},
index c5cb1e21af2a6d9b68641efdac9f4f2141e4c29b..d18a0233f14b7e9657b695033623cc8884992c90 100644 (file)
@@ -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 == "")
index d59f9727618574c3e6705086de29e413dff29bad..20b0396cdb0ce933a80709e2003d805f75213fc8 100644 (file)
@@ -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;
index 9cbefae2342eca71f940af1df138ea57ff5e5aae..efea8bb86294872dbe059da305a2889c57e48924 100644 (file)
@@ -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);