From 4c8e1c320054ee0dc5d8ec821a6b4cd69002aa09 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 26 May 2020 16:05:06 +0200 Subject: [PATCH] Clean up CAO nametag handling and remove deprecated AO_CMD AO_CMD_UPDATE_NAMETAG_ATTRIBUTES was deprecated in 9eee3c3f465c071bb9908749cf48be3c131a1bdf (0.4.14) --- src/activeobject.h | 3 +- src/client/content_cao.cpp | 57 +++++++++++++++++++------------ src/client/content_cao.h | 2 ++ src/server/player_sao.cpp | 4 +-- src/server/serveractiveobject.cpp | 13 +------ 5 files changed, 42 insertions(+), 37 deletions(-) diff --git a/src/activeobject.h b/src/activeobject.h index c83243f86..85e160d10 100644 --- a/src/activeobject.h +++ b/src/activeobject.h @@ -66,7 +66,8 @@ enum ActiveObjectCommand { AO_CMD_SET_BONE_POSITION, AO_CMD_ATTACH_TO, AO_CMD_SET_PHYSICS_OVERRIDE, - AO_CMD_UPDATE_NAMETAG_ATTRIBUTES, + AO_CMD_OBSOLETE1, + // ^ UPDATE_NAMETAG_ATTRIBUTES deprecated since 0.4.14, removed in 5.3.0 AO_CMD_SPAWN_INFANT, AO_CMD_SET_ANIMATION_SPEED }; diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 947c1a279..dde31899b 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -776,15 +776,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc) if (node && m_matrixnode) node->setParent(m_matrixnode); - if (node && !m_prop.nametag.empty() && !m_is_local_player) { - // Add nametag - v3f pos; - pos.Y = m_prop.selectionbox.MaxEdge.Y + 0.3f; - m_nametag = m_client->getCamera()->addNametag(node, - m_prop.nametag, m_prop.nametag_color, - pos); - } - + updateNametag(); updateNodePos(); updateAnimation(); updateBonePosition(); @@ -872,6 +864,38 @@ v3s16 GenericCAO::getLightPosition() return floatToInt(m_position, BS); } +void GenericCAO::updateNametag() +{ + if (m_is_local_player) // No nametag for local player + return; + + if (m_prop.nametag.empty()) { + // Delete nametag + if (m_nametag) { + m_client->getCamera()->removeNametag(m_nametag); + m_nametag = nullptr; + } + return; + } + + scene::ISceneNode *node = getSceneNode(); + if (!node) + return; + + v3f pos; + pos.Y = m_prop.selectionbox.MaxEdge.Y + 0.3f; + if (!m_nametag) { + // Add nametag + m_nametag = m_client->getCamera()->addNametag(node, + m_prop.nametag, m_prop.nametag_color, pos); + } else { + // Update nametag + m_nametag->nametag_text = m_prop.nametag; + m_nametag->nametag_color = m_prop.nametag_color; + m_nametag->nametag_pos = pos; + } +} + void GenericCAO::updateNodePos() { if (getParent() != NULL) @@ -1465,8 +1489,6 @@ bool GenericCAO::visualExpiryRequired(const ObjectProperties &new_) const old.initial_sprite_basepos != new_.initial_sprite_basepos || old.is_visible != new_.is_visible || old.mesh != new_.mesh || - old.nametag != new_.nametag || - old.nametag_color != new_.nametag_color || old.spritediv != new_.spritediv || old.use_texture_alpha != new_.use_texture_alpha || old.visual != new_.visual || @@ -1516,6 +1538,7 @@ void GenericCAO::processMessage(const std::string &data) if ((m_is_player && !m_is_local_player) && m_prop.nametag.empty()) m_prop.nametag = m_name; + updateNametag(); if (expire_visuals) { expireVisuals(); @@ -1694,22 +1717,14 @@ void GenericCAO::processMessage(const std::string &data) int rating = readS16(is); m_armor_groups[name] = rating; } - } else if (cmd == AO_CMD_UPDATE_NAMETAG_ATTRIBUTES) { - // Deprecated, for backwards compatibility only. - readU8(is); // version - m_prop.nametag_color = readARGB8(is); - if (m_nametag != NULL) { - m_nametag->nametag_color = m_prop.nametag_color; - v3f pos; - pos.Y = m_prop.collisionbox.MaxEdge.Y + 0.3f; - m_nametag->nametag_pos = pos; - } } else if (cmd == AO_CMD_SPAWN_INFANT) { u16 child_id = readU16(is); u8 type = readU8(is); // maybe this will be useful later (void)type; addAttachmentChild(child_id); + } else if (cmd == AO_CMD_OBSOLETE1) { + // Don't do anything and also don't log a warning } else { warningstream << FUNCTION_NAME << ": unknown command or outdated client \"" diff --git a/src/client/content_cao.h b/src/client/content_cao.h index 03a355204..8e2a13ea8 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -244,6 +244,8 @@ public: v3s16 getLightPosition(); + void updateNametag(); + void updateNodePos(); void step(float dtime, ClientEnvironment *env); diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index 3ea3536e2..9ea0743f7 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -127,9 +127,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version) } msg_os << serializeLongString(generateUpdateAttachmentCommand()); // 4 msg_os << serializeLongString(generateUpdatePhysicsOverrideCommand()); // 5 - // (AO_CMD_UPDATE_NAMETAG_ATTRIBUTES) : Deprecated, for backwards compatibility only. - msg_os << serializeLongString(generateUpdateNametagAttributesCommand(m_prop.nametag_color)); // 6 - int message_count = 6 + m_bone_position.size(); + int message_count = 5 + m_bone_position.size(); for (std::unordered_set::const_iterator ii = m_attachment_child_ids.begin(); ii != m_attachment_child_ids.end(); ++ii) { if (ServerActiveObject *obj = m_env->getActiveObject(*ii)) { diff --git a/src/server/serveractiveobject.cpp b/src/server/serveractiveobject.cpp index fdcb13bd8..dbf25e3bc 100644 --- a/src/server/serveractiveobject.cpp +++ b/src/server/serveractiveobject.cpp @@ -61,21 +61,10 @@ std::string ServerActiveObject::generateUpdateInfantCommand(u16 infant_id, u16 p return os.str(); } -std::string ServerActiveObject::generateUpdateNametagAttributesCommand(const video::SColor &color) const -{ - std::ostringstream os(std::ios::binary); - // command - writeU8(os, AO_CMD_UPDATE_NAMETAG_ATTRIBUTES); - // parameters - writeU8(os, 1); // version for forward compatibility - writeARGB8(os, color); - return os.str(); -} - void ServerActiveObject::dumpAOMessagesToQueue(std::queue &queue) { while (!m_messages_out.empty()) { queue.push(std::move(m_messages_out.front())); m_messages_out.pop(); } -} \ No newline at end of file +}