Add offset to automatic_face_movement_dir

This commit is contained in:
PilzAdam 2013-08-18 15:49:09 +02:00
parent 681e136d5f
commit 4feea0ac68
7 changed files with 24 additions and 8 deletions

@ -1888,7 +1888,8 @@ Object Properties
makes_footstep_sound = false, makes_footstep_sound = false,
automatic_rotate = false, automatic_rotate = false,
stepheight = 0, stepheight = 0,
automatic_face_movement_dir = false, automatic_face_movement_dir = 0.0,
^ automatically set yaw to movement direction; offset in degrees; false to disable
} }
Entity definition (register_entity) Entity definition (register_entity)

@ -98,7 +98,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
drowning, leveled and liquid_range added to ContentFeatures drowning, leveled and liquid_range added to ContentFeatures
stepheight and collideWithObjects added to object properties stepheight and collideWithObjects added to object properties
version, heat and humidity transfer in MapBock version, heat and humidity transfer in MapBock
added new property to entities automatic_face_movement_dir automatic_face_movement_dir and automatic_face_movement_dir_offset
added to object properties
*/ */
#define LATEST_PROTOCOL_VERSION 21 #define LATEST_PROTOCOL_VERSION 21

@ -1211,8 +1211,9 @@ public:
updateNodePos(); updateNodePos();
} }
if (getParent() == NULL && m_prop.automatic_face_movement_dir){ if (getParent() == NULL && m_prop.automatic_face_movement_dir &&
m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI; (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)){
m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI + m_prop.automatic_face_movement_dir_offset;
updateNodePos(); updateNodePos();
} }
} }

@ -527,8 +527,9 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
m_velocity += dtime * m_acceleration; m_velocity += dtime * m_acceleration;
} }
if(m_prop.automatic_face_movement_dir){ if((m_prop.automatic_face_movement_dir) &&
m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI; (fabs(m_velocity.Z) > 0.001 || fabs(m_velocity.X) > 0.001)){
m_yaw = atan2(m_velocity.Z,m_velocity.X) * 180 / M_PI + m_prop.automatic_face_movement_dir_offset;
} }
} }

@ -41,7 +41,8 @@ ObjectProperties::ObjectProperties():
makes_footstep_sound(false), makes_footstep_sound(false),
automatic_rotate(0), automatic_rotate(0),
stepheight(0), stepheight(0),
automatic_face_movement_dir(false) automatic_face_movement_dir(false),
automatic_face_movement_dir_offset(0.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));
@ -104,6 +105,7 @@ void ObjectProperties::serialize(std::ostream &os) const
writeU8(os, collideWithObjects); writeU8(os, collideWithObjects);
writeF1000(os,stepheight); writeF1000(os,stepheight);
writeU8(os, automatic_face_movement_dir); writeU8(os, automatic_face_movement_dir);
writeF1000(os, automatic_face_movement_dir_offset);
// 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
} }
@ -139,6 +141,7 @@ void ObjectProperties::deSerialize(std::istream &is)
collideWithObjects = readU8(is); collideWithObjects = readU8(is);
stepheight = readF1000(is); stepheight = readF1000(is);
automatic_face_movement_dir = readU8(is); automatic_face_movement_dir = readU8(is);
automatic_face_movement_dir_offset = readF1000(is);
}catch(SerializationError &e){} }catch(SerializationError &e){}
} }
else else

@ -46,6 +46,7 @@ struct ObjectProperties
float automatic_rotate; float automatic_rotate;
f32 stepheight; f32 stepheight;
bool automatic_face_movement_dir; bool automatic_face_movement_dir;
f32 automatic_face_movement_dir_offset;
ObjectProperties(); ObjectProperties();

@ -191,7 +191,15 @@ void read_object_properties(lua_State *L, int index,
getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate); getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate);
getfloatfield(L, -1, "stepheight", prop->stepheight); getfloatfield(L, -1, "stepheight", prop->stepheight);
prop->stepheight*=BS; prop->stepheight*=BS;
getboolfield(L, -1, "automatic_face_movement_dir", prop->automatic_face_movement_dir); lua_getfield(L, -1, "automatic_face_movement_dir");
if (lua_isnumber(L, -1)) {
prop->automatic_face_movement_dir = true;
prop->automatic_face_movement_dir_offset = luaL_checknumber(L, -1);
} else if (lua_isboolean(L, -1)) {
prop->automatic_face_movement_dir = lua_toboolean(L, -1);
prop->automatic_face_movement_dir_offset = 0.0;
}
lua_pop(L, 1);
} }
/******************************************************************************/ /******************************************************************************/