summaryrefslogtreecommitdiff
path: root/src/server/luaentity_sao.cpp
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2020-06-04 19:31:46 +0200
committerGitHub <noreply@github.com>2020-06-04 19:31:46 +0200
commitc1e01bc638637efa788b5698238a465406bc3f5e (patch)
treeb4e3abad6b2a51f41e28bc76cacc75002b37c324 /src/server/luaentity_sao.cpp
parent0e698e63b3bc27551fda9bd4e66f72501413b4e6 (diff)
downloadminetest-c1e01bc638637efa788b5698238a465406bc3f5e.tar.gz
minetest-c1e01bc638637efa788b5698238a465406bc3f5e.tar.bz2
minetest-c1e01bc638637efa788b5698238a465406bc3f5e.zip
Move shared parameters sending to UnitSAO (#9968)
Better header sorting by topic Make UnitSAO-specific parameters private Skip redundant recursive entity sending code (since ~5.2.0)
Diffstat (limited to 'src/server/luaentity_sao.cpp')
-rw-r--r--src/server/luaentity_sao.cpp71
1 files changed, 17 insertions, 54 deletions
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp
index 8174da265..d504c42ca 100644
--- a/src/server/luaentity_sao.cpp
+++ b/src/server/luaentity_sao.cpp
@@ -123,12 +123,11 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
}
// If attached, check that our parent is still there. If it isn't, detach.
- if(m_attachment_parent_id && !isAttached())
- {
- m_attachment_parent_id = 0;
- m_attachment_bone = "";
- m_attachment_position = v3f(0,0,0);
- m_attachment_rotation = v3f(0,0,0);
+ if (m_attachment_parent_id && !isAttached()) {
+ // This is handled when objects are removed from the map
+ warningstream << "LuaEntitySAO::step() id=" << m_id <<
+ " is attached to nonexistent parent. This is a bug." << std::endl;
+ clearParentAttachment();
sendPosition(false, true);
}
@@ -217,43 +216,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
}
}
- if (!m_armor_groups_sent) {
- m_armor_groups_sent = true;
- // create message and add to list
- m_messages_out.emplace(getId(), true, generateUpdateArmorGroupsCommand());
- }
-
- if (!m_animation_sent) {
- m_animation_sent = true;
- std::string str = generateUpdateAnimationCommand();
- // create message and add to list
- m_messages_out.emplace(getId(), true, str);
- }
-
- if (!m_animation_speed_sent) {
- m_animation_speed_sent = true;
- std::string str = generateUpdateAnimationSpeedCommand();
- // create message and add to list
- m_messages_out.emplace(getId(), true, str);
- }
-
- if (!m_bone_position_sent) {
- m_bone_position_sent = true;
- for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){
- std::string str = generateUpdateBonePositionCommand((*ii).first,
- (*ii).second.X, (*ii).second.Y);
- // create message and add to list
- m_messages_out.emplace(getId(), true, str);
- }
- }
-
- if (!m_attachment_sent) {
- m_attachment_sent = true;
- std::string str = generateUpdateAttachmentCommand();
- // create message and add to list
- m_messages_out.emplace(getId(), true, str);
- }
+ sendOutdatedData();
}
std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
@@ -273,20 +236,19 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
msg_os << serializeLongString(getPropertyPacket()); // message 1
msg_os << serializeLongString(generateUpdateArmorGroupsCommand()); // 2
msg_os << serializeLongString(generateUpdateAnimationCommand()); // 3
- for (std::unordered_map<std::string, core::vector2d<v3f>>::const_iterator
- ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii) {
- msg_os << serializeLongString(generateUpdateBonePositionCommand((*ii).first,
- (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
+ for (const auto &bone_pos : m_bone_position) {
+ msg_os << serializeLongString(generateUpdateBonePositionCommand(
+ bone_pos.first, bone_pos.second.X, bone_pos.second.Y)); // m_bone_position.size
}
msg_os << serializeLongString(generateUpdateAttachmentCommand()); // 4
+
int message_count = 4 + m_bone_position.size();
- for (std::unordered_set<int>::const_iterator ii = m_attachment_child_ids.begin();
- (ii != m_attachment_child_ids.end()); ++ii) {
- if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) {
+
+ for (const auto &id : getAttachmentChildIds()) {
+ if (ServerActiveObject *obj = m_env->getActiveObject(id)) {
message_count++;
- // TODO after a protocol bump: only send the object initialization data
- // to older clients (superfluous since this message exists)
- msg_os << serializeLongString(obj->generateUpdateInfantCommand(*ii, protocol_version));
+ msg_os << serializeLongString(obj->generateUpdateInfantCommand(
+ id, protocol_version));
}
}
@@ -294,7 +256,8 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version)
message_count++;
writeU8(os, message_count);
- os.write(msg_os.str().c_str(), msg_os.str().size());
+ std::string serialized = msg_os.str();
+ os.write(serialized.c_str(), serialized.size());
// return result
return os.str();