Add support for setting stepheight for entities
authorsapier <Sapier at GMX dot net>
Mon, 22 Jul 2013 16:54:30 +0000 (18:54 +0200)
committerPilzAdam <pilzadam@minetest.net>
Tue, 30 Jul 2013 17:48:02 +0000 (19:48 +0200)
doc/lua_api.txt
src/clientserver.h
src/content_cao.cpp
src/content_sao.cpp
src/object_properties.cpp
src/object_properties.h
src/script/common/c_content.cpp

index e5fbd7a3a52b762102e3a529207a8cdad75e1b60..b5a9762b41d9645a9118d04b5dae74ddc1b468f2 100644 (file)
@@ -1860,6 +1860,7 @@ Object Properties
     is_visible = true,
     makes_footstep_sound = false,
     automatic_rotate = false,
+    stepheight = 0,
 }
 
 Entity definition (register_entity)
index 0d07d64ff80451291a619e96b969b29928951b8c..f490508c27552399cfcd6a5503cfc9c1422ad88f 100644 (file)
@@ -100,6 +100,7 @@ SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
                TOSERVER_BREATH
                range added to ItemDefinition
                drowning, leveled and liquid_range added to ContentFeatures
+               stepheight and collideWithObjects added to object properties
 */
 
 #define LATEST_PROTOCOL_VERSION 21
index 925855288f58ea025e6894fd51e40a56403c2d1b..bbee0bc8350243ddb182cd41107495361ab79a90 100644 (file)
@@ -1150,12 +1150,11 @@ public:
                                box.MaxEdge *= BS;
                                collisionMoveResult moveresult;
                                f32 pos_max_d = BS*0.125; // Distance per iteration
-                               f32 stepheight = 0;
                                v3f p_pos = m_position;
                                v3f p_velocity = m_velocity;
                                v3f p_acceleration = m_acceleration;
                                moveresult = collisionMoveSimple(env,env->getGameDef(),
-                                               pos_max_d, box, stepheight, dtime,
+                                               pos_max_d, box, m_prop.stepheight, dtime,
                                                p_pos, p_velocity, p_acceleration,
                                                this, m_prop.collideWithObjects);
                                // Apply results
index 6b3593ec7b134eb7e7bfdfc3dc6ea3ea055e6414..90c4fa69cb43d9cfd8019533ada0090e458aaab3 100644 (file)
@@ -505,14 +505,14 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
                        box.MaxEdge *= BS;
                        collisionMoveResult moveresult;
                        f32 pos_max_d = BS*0.25; // Distance per iteration
-                       f32 stepheight = 0; // Maximum climbable step height
                        v3f p_pos = m_base_position;
                        v3f p_velocity = m_velocity;
                        v3f p_acceleration = m_acceleration;
                        moveresult = collisionMoveSimple(m_env,m_env->getGameDef(),
-                                       pos_max_d, box, stepheight, dtime,
+                                       pos_max_d, box, m_prop.stepheight, dtime,
                                        p_pos, p_velocity, p_acceleration,
                                        this, m_prop.collideWithObjects);
+
                        // Apply results
                        m_base_position = p_pos;
                        m_velocity = p_velocity;
index c2debf328296eabbc34b2a18bfd4346101f65c4b..1602f03f20312faff3873cb3919b333f89b961a4 100644 (file)
@@ -39,7 +39,8 @@ ObjectProperties::ObjectProperties():
        initial_sprite_basepos(0,0),
        is_visible(true),
        makes_footstep_sound(false),
-       automatic_rotate(0)
+       automatic_rotate(0),
+       stepheight(0)
 {
        textures.push_back("unknown_object.png");
        colors.push_back(video::SColor(255,255,255,255));
@@ -100,6 +101,7 @@ void ObjectProperties::serialize(std::ostream &os) const
                writeARGB8(os, colors[i]);
        }
        writeU8(os, collideWithObjects);
+       writeF1000(os,stepheight);
        // Add stuff only at the bottom.
        // Never remove anything, because we don't want new versions of this
 }
@@ -133,6 +135,7 @@ void ObjectProperties::deSerialize(std::istream &is)
                                colors.push_back(readARGB8(is));
                        }
                        collideWithObjects = readU8(is);
+                       stepheight = readF1000(is);
                }catch(SerializationError &e){}
        }
        else
index a0f5618d635ed942b88457ddb4c875b9ae3146dd..e8188cb604dbd96ca0c2a915573f9729fd549417 100644 (file)
@@ -44,6 +44,7 @@ struct ObjectProperties
        bool is_visible;
        bool makes_footstep_sound;
        float automatic_rotate;
+       f32 stepheight;
 
 
        ObjectProperties();
index d97264009ccfcde28496577a9756511d0ea16301..ef0544400650da63e4bbc2356abe69b8d6077337 100644 (file)
@@ -188,6 +188,8 @@ void read_object_properties(lua_State *L, int index,
        getboolfield(L, -1, "is_visible", prop->is_visible);
        getboolfield(L, -1, "makes_footstep_sound", prop->makes_footstep_sound);
        getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate);
+       getfloatfield(L, -1, "stepheight", prop->stepheight);
+       prop->stepheight*=BS;
 }
 
 /******************************************************************************/