         }
     }
     
+    void UpdatePlayersLabels ()
+    {
+        Array <Node @> sceneNodes = scene.GetChildren (true);
+        Array <Node @> otherPlayersNodes;
+        Camera @camera = cameraNode_.GetComponent ("Camera");
+        
+        for (int index = 0; index < sceneNodes.length; index++)
+        {
+            Node @processingNode = sceneNodes [index];
+            if (processingNode.id < FIRST_LOCAL_ID and
+                processingNode.id != node.id and
+                processingNode.vars ["ObjectType"].GetInt () ==
+                SerializationConstants__OBJECT_TYPE_PLAYER)
+                {
+                    Vector2 screenPoint = camera.WorldToScreenPoint (processingNode.worldPosition);
+                    if (screenPoint.x > 0.0f and screenPoint.x < 1.0f and
+                        screenPoint.y > 0.0f and screenPoint.y < 1.0f)
+                        otherPlayersNodes.Push (processingNode);
+                }
+        }
+                    
+        for (int index = 0; index < otherPlayersLabels_.length; index++)
+        {
+            Text @label = otherPlayersLabels_ [index];
+            if (index < otherPlayersNodes.length)
+            {
+                Node @otherPlayerNode = otherPlayersNodes [index];
+                String labelText = 
+                    otherPlayerNode.vars [SerializationConstants__NAME_VAR_HASH].
+                        GetString () + "\n";
+                    
+                if (not otherPlayerNode.HasTag ("Died"))
+                {    
+                    int otherPlayerLives = Floor (otherPlayerNode.vars 
+                                                  [SerializationConstants__HEALTH_VAR_HASH].
+                                                  GetFloat ());
+                    int otherPlayerExp = otherPlayerNode.vars 
+                                         [SerializationConstants__EXP_VAR_HASH].GetInt ();
+                    int OtherPlayerMaxLives = Floor (GameplayConstants__BASIC_MAX_HEALTH *
+                                              (1.0f + otherPlayerExp * 
+                                              GameplayConstants__MAX_HEALTH_INCREASE_PER_EXP));
+                        
+                    labelText += otherPlayerLives + "/" + OtherPlayerMaxLives + " HP.\n" +
+                                 otherPlayerExp + " EXP.";
+                }
+                else
+                    labelText += "[Died]";
+                        
+                label.text = labelText;
+                label.visible = true;
+                
+                float distance = (cameraNode_.position - otherPlayerNode.position).length;
+                Vector2 labelPosition = 
+                    camera.WorldToScreenPoint (otherPlayerNode.position + Vector3 (0, 1.5f, 0));
+                        
+                if (distance > 7.0f)
+                {
+                    label.fontSize = Floor (graphics.height * 0.1f * 7.0f / distance);
+                    labelPosition.x -= Floor (0.08f * 7.0f / distance);
+                }
+                else
+                {
+                    label.fontSize = Floor (graphics.height * 0.1f);
+                    labelPosition.x -= Floor (0.08f * 7.0f);
+                }
+                label.SetPosition (graphics.width * labelPosition.x,
+                                   graphics.height * labelPosition.y);
+            }
+            else
+                label.visible = false;
+        }
+        }
+    
     void HandleUiMouseClickEnd (StringHash eventType, VariantMap &eventData)
     {
         if (eventData ["Element"].GetPtr () is sendMessageButton_)

            ResizeUi (lastScreenSize.x, lastScreenSize.y);
        }
        UpdateChat ();
        HandleKeyboard (timeStep);
    }
    

        sendMessageButtonText_.SetStyleAuto (styles_);
        sendMessageButtonText_.SetAlignment (HA_CENTER, VA_CENTER);
        
        for (int index = 0; index < PROPERTY_OTHER_PLAYERS_LABELS_POOL_SIZE; index++)
        {
            Text @label = rootElement_.CreateChild ("Text", "other_player_label_" + index);
            label.text = "...";
            label.SetStyleAuto (styles_);
            label.color = Color (0.3f, 0.8f, 0.3f);
            otherPlayersLabels_.Push (label);
        }
        
        SubscribeToEvent ("UIMouseClickEnd", "HandleUiMouseClickEnd");
        SubscribeToEvent ("NewChatMessage", "HandleNewChatMessage");
        SubscribeToEvent ("NewServerMessage", "HandleNewServerMessage");
