Add support for setting stepheight for entities

This commit is contained in:
sapier 2013-07-22 18:54:30 +02:00 committed by PilzAdam
parent ff7c380d0e
commit 251e3e01c7
7 changed files with 12 additions and 5 deletions

@ -1860,6 +1860,7 @@ Object Properties
is_visible = true, is_visible = true,
makes_footstep_sound = false, makes_footstep_sound = false,
automatic_rotate = false, automatic_rotate = false,
stepheight = 0,
} }
Entity definition (register_entity) Entity definition (register_entity)

@ -100,6 +100,7 @@ SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
TOSERVER_BREATH TOSERVER_BREATH
range added to ItemDefinition range added to ItemDefinition
drowning, leveled and liquid_range added to ContentFeatures drowning, leveled and liquid_range added to ContentFeatures
stepheight and collideWithObjects added to object properties
*/ */
#define LATEST_PROTOCOL_VERSION 21 #define LATEST_PROTOCOL_VERSION 21

@ -1150,12 +1150,11 @@ public:
box.MaxEdge *= BS; box.MaxEdge *= BS;
collisionMoveResult moveresult; collisionMoveResult moveresult;
f32 pos_max_d = BS*0.125; // Distance per iteration f32 pos_max_d = BS*0.125; // Distance per iteration
f32 stepheight = 0;
v3f p_pos = m_position; v3f p_pos = m_position;
v3f p_velocity = m_velocity; v3f p_velocity = m_velocity;
v3f p_acceleration = m_acceleration; v3f p_acceleration = m_acceleration;
moveresult = collisionMoveSimple(env,env->getGameDef(), 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, p_pos, p_velocity, p_acceleration,
this, m_prop.collideWithObjects); this, m_prop.collideWithObjects);
// Apply results // Apply results

@ -505,14 +505,14 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
box.MaxEdge *= BS; box.MaxEdge *= BS;
collisionMoveResult moveresult; collisionMoveResult moveresult;
f32 pos_max_d = BS*0.25; // Distance per iteration 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_pos = m_base_position;
v3f p_velocity = m_velocity; v3f p_velocity = m_velocity;
v3f p_acceleration = m_acceleration; v3f p_acceleration = m_acceleration;
moveresult = collisionMoveSimple(m_env,m_env->getGameDef(), 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, p_pos, p_velocity, p_acceleration,
this, m_prop.collideWithObjects); this, m_prop.collideWithObjects);
// Apply results // Apply results
m_base_position = p_pos; m_base_position = p_pos;
m_velocity = p_velocity; m_velocity = p_velocity;

@ -39,7 +39,8 @@ ObjectProperties::ObjectProperties():
initial_sprite_basepos(0,0), initial_sprite_basepos(0,0),
is_visible(true), is_visible(true),
makes_footstep_sound(false), makes_footstep_sound(false),
automatic_rotate(0) automatic_rotate(0),
stepheight(0)
{ {
textures.push_back("unknown_object.png"); textures.push_back("unknown_object.png");
colors.push_back(video::SColor(255,255,255,255)); colors.push_back(video::SColor(255,255,255,255));
@ -100,6 +101,7 @@ void ObjectProperties::serialize(std::ostream &os) const
writeARGB8(os, colors[i]); writeARGB8(os, colors[i]);
} }
writeU8(os, collideWithObjects); writeU8(os, collideWithObjects);
writeF1000(os,stepheight);
// Add stuff only at the bottom. // Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this // 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)); colors.push_back(readARGB8(is));
} }
collideWithObjects = readU8(is); collideWithObjects = readU8(is);
stepheight = readF1000(is);
}catch(SerializationError &e){} }catch(SerializationError &e){}
} }
else else

@ -44,6 +44,7 @@ struct ObjectProperties
bool is_visible; bool is_visible;
bool makes_footstep_sound; bool makes_footstep_sound;
float automatic_rotate; float automatic_rotate;
f32 stepheight;
ObjectProperties(); ObjectProperties();

@ -188,6 +188,8 @@ void read_object_properties(lua_State *L, int index,
getboolfield(L, -1, "is_visible", prop->is_visible); getboolfield(L, -1, "is_visible", prop->is_visible);
getboolfield(L, -1, "makes_footstep_sound", prop->makes_footstep_sound); getboolfield(L, -1, "makes_footstep_sound", prop->makes_footstep_sound);
getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate); getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate);
getfloatfield(L, -1, "stepheight", prop->stepheight);
prop->stepheight*=BS;
} }
/******************************************************************************/ /******************************************************************************/