From: TeTpaAka <TeTpaAka@users.noreply.github.com>
Date: Fri, 29 May 2015 18:30:55 +0000 (+0200)
Subject: Make the player collisionbox settable
X-Git-Tag: 0.4.16~141
X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b6f4a9c7e1a4f0bac66fd6f6ff844425ac775975;p=oweals%2Fminetest.git

Make the player collisionbox settable
---

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);