Modernize client code (#6250)
[oweals/minetest.git] / src / content_cao.cpp
index 49c2049eb0df96d857c4cf6b69688d7883a0eb92..771820cb09c1003cc5c1a61dab10d15b4f4b47bf 100644 (file)
@@ -895,8 +895,11 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
        scene::ISceneNode *node = getSceneNode();
        if (node && m_prop.nametag != "" && !m_is_local_player) {
                // Add nametag
+               v3f pos;
+               pos.Y = m_prop.collisionbox.MaxEdge.Y + 0.3f;
                m_nametag = m_client->getCamera()->addNametag(node,
-                       m_prop.nametag, m_prop.nametag_color);
+                       m_prop.nametag, m_prop.nametag_color,
+                       pos);
        }
 
        updateNodePos();
@@ -943,7 +946,7 @@ void GenericCAO::updateLightNoCheck(u8 light_at_pos)
 
 v3s16 GenericCAO::getLightPosition()
 {
-       return floatToInt(m_position, BS);
+       return floatToInt(m_position + v3f(0, 0.5 * BS, 0), BS);
 }
 
 void GenericCAO::updateNodePos()
@@ -972,7 +975,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
                if (m_is_visible) {
                        int old_anim = player->last_animation;
                        float old_anim_speed = player->last_animation_speed;
-                       m_position = player->getPosition() + v3f(0,BS,0);
+                       m_position = player->getPosition();
                        m_velocity = v3f(0,0,0);
                        m_acceleration = v3f(0,0,0);
                        pos_translator.vect_show = m_position;
@@ -1512,6 +1515,7 @@ void GenericCAO::processMessage(const std::string &data)
                if (m_is_local_player) {
                        LocalPlayer *player = m_env->getLocalPlayer();
                        player->makes_footstep_sound = m_prop.makes_footstep_sound;
+                       player->setCollisionbox(m_selection_box);
                }
 
                if ((m_is_player && !m_is_local_player) && m_prop.nametag == "")
@@ -1699,6 +1703,9 @@ void GenericCAO::processMessage(const std::string &data)
                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 == GENERIC_CMD_SPAWN_INFANT) {
                u16 child_id = readU16(is);