aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/player.h1
-rw-r--r--src/server/luaentity_sao.cpp2
-rw-r--r--src/server/player_sao.cpp6
-rw-r--r--src/staticobject.cpp4
-rw-r--r--src/staticobject.h2
-rw-r--r--src/util/serialize.h10
6 files changed, 8 insertions, 17 deletions
diff --git a/src/player.h b/src/player.h
index cc1357010..beca82f66 100644
--- a/src/player.h
+++ b/src/player.h
@@ -141,7 +141,6 @@ public:
void setSpeed(v3f speed)
{
- clampToF1000(speed);
m_speed = speed;
}
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp
index a0a8aede0..ab4a9e3f2 100644
--- a/src/server/luaentity_sao.cpp
+++ b/src/server/luaentity_sao.cpp
@@ -290,7 +290,7 @@ void LuaEntitySAO::getStaticData(std::string *result) const
os<<serializeString32(m_init_state);
}
writeU16(os, m_hp);
- writeV3F1000(os, m_velocity);
+ writeV3F1000(os, clampToF1000(m_velocity));
// yaw
writeF1000(os, m_rotation.Y);
diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp
index c5f6d0a24..a58a0397f 100644
--- a/src/server/player_sao.cpp
+++ b/src/server/player_sao.cpp
@@ -321,12 +321,6 @@ std::string PlayerSAO::generateUpdatePhysicsOverrideCommand() const
void PlayerSAO::setBasePosition(v3f position)
{
- // It's not entirely clear which parts of the network protocol still use
- // v3f1000, but the script API enforces its bound on all float vectors
- // (maybe it shouldn't?). For that reason we need to make sure the position
- // isn't ever set to values that fail this restriction.
- clampToF1000(position);
-
if (m_player && position != m_base_position)
m_player->setDirty(true);
diff --git a/src/staticobject.cpp b/src/staticobject.cpp
index 1160ec68f..f92995d0b 100644
--- a/src/staticobject.cpp
+++ b/src/staticobject.cpp
@@ -28,12 +28,12 @@ StaticObject::StaticObject(const ServerActiveObject *s_obj, const v3f &pos_):
s_obj->getStaticData(&data);
}
-void StaticObject::serialize(std::ostream &os)
+void StaticObject::serialize(std::ostream &os) const
{
// type
writeU8(os, type);
// pos
- writeV3F1000(os, pos);
+ writeV3F1000(os, clampToF1000(pos));
// data
os<<serializeString16(data);
}
diff --git a/src/staticobject.h b/src/staticobject.h
index 6fb486193..03cd23cc8 100644
--- a/src/staticobject.h
+++ b/src/staticobject.h
@@ -37,7 +37,7 @@ struct StaticObject
StaticObject() = default;
StaticObject(const ServerActiveObject *s_obj, const v3f &pos_);
- void serialize(std::ostream &os);
+ void serialize(std::ostream &os) const;
void deSerialize(std::istream &is, u8 version);
};
diff --git a/src/util/serialize.h b/src/util/serialize.h
index 2203fff0c..4dc1a54c6 100644
--- a/src/util/serialize.h
+++ b/src/util/serialize.h
@@ -439,16 +439,14 @@ MAKE_STREAM_WRITE_FXN(video::SColor, ARGB8, 4);
//// More serialization stuff
////
-inline void clampToF1000(float &v)
+inline float clampToF1000(float v)
{
- v = core::clamp(v, F1000_MIN, F1000_MAX);
+ return core::clamp(v, F1000_MIN, F1000_MAX);
}
-inline void clampToF1000(v3f &v)
+inline v3f clampToF1000(v3f v)
{
- clampToF1000(v.X);
- clampToF1000(v.Y);
- clampToF1000(v.Z);
+ return {clampToF1000(v.X), clampToF1000(v.Y), clampToF1000(v.Z)};
}
// Creates a string with the length as the first two bytes