From 896d41e4b073046c59933ea8829474bd82b9c506 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sat, 31 Dec 2016 22:53:42 +0300
Subject: Improve special layers draw speed in same way like fringe layer.

---
 src/being/localplayer.cpp | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'src/being')

diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index 9af1371bf..8bb049489 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -1811,6 +1811,7 @@ void LocalPlayer::setHome()
             {
                 specialLayer->setTile(CAST_S32(pos.x),
                     CAST_S32(pos.y), MapItemType::EMPTY);
+                specialLayer->updateCache();
             }
 
             pos.x = static_cast<float>(mX);
@@ -1872,6 +1873,7 @@ void LocalPlayer::setHome()
         else
         {
             specialLayer->setTile(mX, mY, MapItemType::EMPTY);
+            specialLayer->updateCache();
             socialWindow->removePortal(mX, mY);
         }
     }
@@ -2083,7 +2085,7 @@ void LocalPlayer::navigateClean()
 
     mNavigatePath.clear();
 
-    const SpecialLayer *const tmpLayer = mMap->getTempLayer();
+    SpecialLayer *const tmpLayer = mMap->getTempLayer();
     if (!tmpLayer)
         return;
 
@@ -2553,6 +2555,7 @@ void LocalPlayer::setRealPos(const int x, const int y)
         return;
 
     SpecialLayer *const layer = mMap->getTempLayer();
+    bool cacheUpdated(false);
     if (layer)
     {
         if ((mCrossX || mCrossY) &&
@@ -2560,6 +2563,8 @@ void LocalPlayer::setRealPos(const int x, const int y)
             layer->getTile(mCrossX, mCrossY)->getType() == MapItemType::CROSS)
         {
             layer->setTile(mCrossX, mCrossY, MapItemType::EMPTY);
+            layer->updateCache();
+            cacheUpdated = true;
         }
 
         if (mShowServerPos)
@@ -2569,7 +2574,11 @@ void LocalPlayer::setRealPos(const int x, const int y)
             if (!mapItem || mapItem->getType() == MapItemType::EMPTY)
             {
                 if (mX != x && mY != y)
+                {
                     layer->setTile(x, y, MapItemType::CROSS);
+                    if (cacheUpdated == false)
+                        layer->updateCache();
+                }
             }
         }
 
-- 
cgit v1.2.3-70-g09d2