From 41ea4b1997408553f33fe6c9b4b4a51bb3df7f03 Mon Sep 17 00:00:00 2001
From: Deve <deveee@gmail.com>
Date: Sat, 6 Oct 2018 22:31:37 +0200
Subject: [PATCH] Draw local players icons above AI/remote players on the
 minimap.

---
 src/states_screens/race_gui.cpp | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp
index 49727f868..2216d7572 100644
--- a/src/states_screens/race_gui.cpp
+++ b/src/states_screens/race_gui.cpp
@@ -596,14 +596,27 @@ void RaceGUI::drawGlobalMiniMap()
                                  lower_y   -(int)(draw_at.getY()-(m_minimap_player_size/2.2f)));
         draw2DImage(m_blue_flag, bp, bs, NULL, NULL, true);
     }
-
-    for(unsigned int i=0; i<world->getNumKarts(); i++)
+    
+    // Move AI/remote players to the beginning, so that local players icons
+    // are drawn above them
+    World::KartList karts = world->getKarts();
+    std::sort(karts.begin(), karts.end(), []
+        (const std::shared_ptr<AbstractKart> a,
+         const std::shared_ptr<AbstractKart> b)->bool
     {
-        const AbstractKart *kart = world->getKart(i);
+        return !a->getController()->isLocalPlayerController();
+    });
+
+    for (unsigned int i = 0; i < karts.size(); i++)
+    {
+        const AbstractKart *kart = karts[i].get();
         const SpareTireAI* sta =
             dynamic_cast<const SpareTireAI*>(kart->getController());
+            
         // don't draw eliminated kart
-        if(kart->isEliminated() && !(sta && sta->isMoving())) continue;
+        if (kart->isEliminated() && !(sta && sta->isMoving())) 
+            continue;
+            
         const Vec3& xyz = kart->getSmoothedTrans().getOrigin();
         Vec3 draw_at;
         track->mapPoint2MiniMap(xyz, &draw_at);