forked from Mirrorlandia_minetest/minetest
Player eye height: Make this a settable player object property
This commit is contained in:
parent
a07d2594e3
commit
4c40e0775c
@ -1260,6 +1260,7 @@ void GenericCAO::processMessage(const std::string &data)
|
|||||||
collision_box.MaxEdge *= BS;
|
collision_box.MaxEdge *= BS;
|
||||||
player->setCollisionbox(collision_box);
|
player->setCollisionbox(collision_box);
|
||||||
player->setCanZoom(m_prop.can_zoom);
|
player->setCanZoom(m_prop.can_zoom);
|
||||||
|
player->setEyeHeight(m_prop.eye_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_is_player && !m_is_local_player) && m_prop.nametag.empty())
|
if ((m_is_player && !m_is_local_player) && m_prop.nametag.empty())
|
||||||
|
@ -809,6 +809,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t p
|
|||||||
m_prop.colors.clear();
|
m_prop.colors.clear();
|
||||||
m_prop.colors.emplace_back(255, 255, 255, 255);
|
m_prop.colors.emplace_back(255, 255, 255, 255);
|
||||||
m_prop.spritediv = v2s16(1,1);
|
m_prop.spritediv = v2s16(1,1);
|
||||||
|
m_prop.eye_height = 1.625f;
|
||||||
// end of default appearance
|
// end of default appearance
|
||||||
m_prop.is_visible = true;
|
m_prop.is_visible = true;
|
||||||
m_prop.makes_footstep_sound = true;
|
m_prop.makes_footstep_sound = true;
|
||||||
@ -834,7 +835,7 @@ void PlayerSAO::finalize(RemotePlayer *player, const std::set<std::string> &priv
|
|||||||
|
|
||||||
v3f PlayerSAO::getEyeOffset() const
|
v3f PlayerSAO::getEyeOffset() const
|
||||||
{
|
{
|
||||||
return v3f(0, BS * 1.625f, 0);
|
return v3f(0, BS * m_prop.eye_height, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string PlayerSAO::getDescription()
|
std::string PlayerSAO::getDescription()
|
||||||
|
@ -718,7 +718,8 @@ v3s16 LocalPlayer::getLightPosition() const
|
|||||||
|
|
||||||
v3f LocalPlayer::getEyeOffset() const
|
v3f LocalPlayer::getEyeOffset() const
|
||||||
{
|
{
|
||||||
float eye_height = camera_barely_in_ceiling ? 1.5f : 1.625f;
|
float eye_height = camera_barely_in_ceiling ?
|
||||||
|
m_eye_height - 0.125f : m_eye_height;
|
||||||
return v3f(0, BS * eye_height, 0);
|
return v3f(0, BS * eye_height, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +138,7 @@ public:
|
|||||||
v3f getPosition() const { return m_position; }
|
v3f getPosition() const { return m_position; }
|
||||||
v3f getEyePosition() const { return m_position + getEyeOffset(); }
|
v3f getEyePosition() const { return m_position + getEyeOffset(); }
|
||||||
v3f getEyeOffset() const;
|
v3f getEyeOffset() const;
|
||||||
|
void setEyeHeight(float eye_height) { m_eye_height = eye_height; }
|
||||||
|
|
||||||
void setCollisionbox(const aabb3f &box) { m_collisionbox = box; }
|
void setCollisionbox(const aabb3f &box) { m_collisionbox = box; }
|
||||||
|
|
||||||
@ -181,6 +182,7 @@ private:
|
|||||||
aabb3f m_collisionbox = aabb3f(-BS * 0.30f, 0.0f, -BS * 0.30f, BS * 0.30f,
|
aabb3f m_collisionbox = aabb3f(-BS * 0.30f, 0.0f, -BS * 0.30f, BS * 0.30f,
|
||||||
BS * 1.75f, BS * 0.30f);
|
BS * 1.75f, BS * 0.30f);
|
||||||
bool m_can_zoom = true;
|
bool m_can_zoom = true;
|
||||||
|
float m_eye_height = 1.625f;
|
||||||
|
|
||||||
GenericCAO *m_cao = nullptr;
|
GenericCAO *m_cao = nullptr;
|
||||||
Client *m_client;
|
Client *m_client;
|
||||||
|
@ -67,6 +67,7 @@ std::string ObjectProperties::dump()
|
|||||||
os << ", pointable=" << pointable;
|
os << ", pointable=" << pointable;
|
||||||
os << ", can_zoom=" << can_zoom;
|
os << ", can_zoom=" << can_zoom;
|
||||||
os << ", static_save=" << static_save;
|
os << ", static_save=" << static_save;
|
||||||
|
os << ", eye_height=" << eye_height;
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,6 +112,7 @@ void ObjectProperties::serialize(std::ostream &os) const
|
|||||||
writeU8(os, can_zoom);
|
writeU8(os, can_zoom);
|
||||||
writeS8(os, glow);
|
writeS8(os, glow);
|
||||||
writeU16(os, breath_max);
|
writeU16(os, breath_max);
|
||||||
|
writeF1000(os, eye_height);
|
||||||
|
|
||||||
// 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
|
||||||
@ -162,5 +164,6 @@ void ObjectProperties::deSerialize(std::istream &is)
|
|||||||
try {
|
try {
|
||||||
glow = readS8(is);
|
glow = readS8(is);
|
||||||
breath_max = readU16(is);
|
breath_max = readU16(is);
|
||||||
|
eye_height = readF1000(is);
|
||||||
} catch (SerializationError &e) {}
|
} catch (SerializationError &e) {}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ struct ObjectProperties
|
|||||||
//! For dropped items, this contains item information.
|
//! For dropped items, this contains item information.
|
||||||
std::string wield_item;
|
std::string wield_item;
|
||||||
bool static_save = true;
|
bool static_save = true;
|
||||||
|
float eye_height = 1.625f;
|
||||||
|
|
||||||
ObjectProperties();
|
ObjectProperties();
|
||||||
std::string dump();
|
std::string dump();
|
||||||
|
@ -266,6 +266,7 @@ void read_object_properties(lua_State *L, int index,
|
|||||||
if (getfloatfield(L, -1, "stepheight", prop->stepheight))
|
if (getfloatfield(L, -1, "stepheight", prop->stepheight))
|
||||||
prop->stepheight *= BS;
|
prop->stepheight *= BS;
|
||||||
getboolfield(L, -1, "can_zoom", prop->can_zoom);
|
getboolfield(L, -1, "can_zoom", prop->can_zoom);
|
||||||
|
getfloatfield(L, -1, "eye_height", prop->eye_height);
|
||||||
|
|
||||||
getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate);
|
getfloatfield(L, -1, "automatic_rotate", prop->automatic_rotate);
|
||||||
lua_getfield(L, -1, "automatic_face_movement_dir");
|
lua_getfield(L, -1, "automatic_face_movement_dir");
|
||||||
@ -359,7 +360,8 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
|
|||||||
lua_setfield(L, -2, "stepheight");
|
lua_setfield(L, -2, "stepheight");
|
||||||
lua_pushboolean(L, prop->can_zoom);
|
lua_pushboolean(L, prop->can_zoom);
|
||||||
lua_setfield(L, -2, "can_zoom");
|
lua_setfield(L, -2, "can_zoom");
|
||||||
|
lua_pushnumber(L, prop->eye_height);
|
||||||
|
lua_setfield(L, -2, "eye_height");
|
||||||
lua_pushnumber(L, prop->automatic_rotate);
|
lua_pushnumber(L, prop->automatic_rotate);
|
||||||
lua_setfield(L, -2, "automatic_rotate");
|
lua_setfield(L, -2, "automatic_rotate");
|
||||||
if (prop->automatic_face_movement_dir)
|
if (prop->automatic_face_movement_dir)
|
||||||
|
Loading…
Reference in New Issue
Block a user