Fix map crashing error & new Trainer icons

Brian [2016-08-17 13:04:05]
Fix map crashing error & new Trainer icons
Filename
PokemonGo.RocketBot.Window/Forms/MainForm.cs
PokemonGo.RocketBot.Window/Images/Markers/Trainer_Front.png
PokemonGo.RocketBot.Window/Images/Markers/Trainer.png
PokemonGo.RocketBot.Window/Images/Markers/Trainer_Right.png
PokemonGo.RocketBot.Window/PokemonGo.RocketBot.Window.csproj
PokemonGo.RocketBot.Window/Properties/Resources.Designer.cs
PokemonGo.RocketBot.Window/Properties/Resources.resx
diff --git a/PokemonGo.RocketBot.Window/Forms/MainForm.cs b/PokemonGo.RocketBot.Window/Forms/MainForm.cs
index 261a30a..8fdd318 100644
--- a/PokemonGo.RocketBot.Window/Forms/MainForm.cs
+++ b/PokemonGo.RocketBot.Window/Forms/MainForm.cs
@@ -54,6 +54,8 @@ namespace PokemonGo.RocketBot.Window.Forms
         private readonly GMapOverlay _pokemonsOverlay = new GMapOverlay("pokemons");
         private readonly GMapOverlay _pokestopsOverlay = new GMapOverlay("pokestops");
         private readonly GMapOverlay _searchAreaOverlay = new GMapOverlay("areas");
+
+        private PointLatLng _currentLatLng;
         private ConsoleLogger _logger;
         private StateMachine _machine;
         private GlobalSettings _settings;
@@ -67,7 +69,7 @@ namespace PokemonGo.RocketBot.Window.Forms

         private void MainForm_Load(object sender, EventArgs e)
         {
-            Text = @"[RocketBot] " + Assembly.GetExecutingAssembly().GetName().Version;
+            Text = @"RocketBot v" + Assembly.GetExecutingAssembly().GetName().Version;
             InitializeBot();
             InitializePokemonForm();
             InitializeMap();
@@ -76,6 +78,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             {
                 startStopBotToolStripMenuItem.Enabled = false;
                 Logger.Write("First time here? Go to settings to set your basic info.");
+                GlobalSettings.Load("");
             }
         }

@@ -99,7 +102,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             gMapControl1.Overlays.Add(_playerOverlay);

             _playerMarker = new GMapMarkerTrainer(new PointLatLng(lat, lng),
-                (Image) Properties.Resources.ResourceManager.GetObject("Trainer"));
+                (Image) Properties.Resources.ResourceManager.GetObject("Trainer_Front"));
             _playerOverlay.Markers.Add(_playerMarker);
             _playerMarker.Position = new PointLatLng(lat, lng);
             _searchAreaOverlay.Polygons.Clear();
@@ -205,7 +208,6 @@ namespace PokemonGo.RocketBot.Window.Forms

         private async Task StartBot()
         {
-            startStopBotToolStripMenuItem.Enabled = false;
             _machine.AsyncStart(new VersionCheckState(), _session);

             if (_settings.UseTelegramAPI)
@@ -218,25 +220,30 @@ namespace PokemonGo.RocketBot.Window.Forms
             QuitEvent.WaitOne();
         }

-        private async void InitializePokestopsAndRoute(List<FortData> pokeStops)
+        private void InitializePokestopsAndRoute(List<FortData> pokeStops)
         {
-            _pokestopsOverlay.Markers.Clear();
-            var routePoint =
-                (from pokeStop in pokeStops
-                    where pokeStop != null
-                    select new PointLatLng(pokeStop.Latitude, pokeStop.Longitude)).ToList();
-            _pokestopsOverlay.Routes.Clear();
-            var route = new GMapRoute(routePoint, "Walking Path");
-            route.Stroke = new Pen(Color.FromArgb(128, 0, 179, 253), 4);
-            _pokestopsOverlay.Routes.Add(route);
-
-            foreach (var pokeStop in pokeStops)
+            SynchronizationContext.Post(o =>
             {
-                var pokeStopLoc = new PointLatLng(pokeStop.Latitude, pokeStop.Longitude);
-                var pokestopMarker = new GMapMarkerPokestops(pokeStopLoc,
-                    (Image) Properties.Resources.ResourceManager.GetObject("Pokestop"));
-                _pokestopsOverlay.Markers.Add(pokestopMarker);
-            }
+                _pokestopsOverlay.Markers.Clear();
+                _pokestopsOverlay.Routes.Clear();
+                _playerOverlay.Markers.Clear();
+                _playerOverlay.Routes.Clear();
+                var routePoint =
+                    (from pokeStop in pokeStops
+                        where pokeStop != null
+                        select new PointLatLng(pokeStop.Latitude, pokeStop.Longitude)).ToList();
+                var route = new GMapRoute(routePoint, "Walking Path");
+                route.Stroke = new Pen(Color.FromArgb(128, 0, 179, 253), 4);
+                _pokestopsOverlay.Routes.Add(route);
+
+                foreach (var pokeStop in pokeStops)
+                {
+                    var pokeStopLoc = new PointLatLng(pokeStop.Latitude, pokeStop.Longitude);
+                    var pokestopMarker = new GMapMarkerPokestops(pokeStopLoc,
+                        (Image) Properties.Resources.ResourceManager.GetObject("Pokestop"));
+                    _pokestopsOverlay.Markers.Add(pokestopMarker);
+                }
+            }, null);
         }

         private void UpdateMap(FortData pokestop = null)
@@ -277,7 +284,17 @@ namespace PokemonGo.RocketBot.Window.Forms
         {
             var latlng = new PointLatLng(lat, lng);
             _playerLocations.Add(latlng);
-            _playerMarker.Position = latlng;
+
+            _playerOverlay.Markers.Remove(_playerMarker);
+            if (!_currentLatLng.IsEmpty)
+                _playerMarker = _currentLatLng.Lng < latlng.Lng
+                    ? new GMapMarkerTrainer(latlng,
+                        (Image) Properties.Resources.ResourceManager.GetObject("Trainer_Right"))
+                    : new GMapMarkerTrainer(latlng,
+                        (Image) Properties.Resources.ResourceManager.GetObject("Trainer_Left"));
+            _playerOverlay.Markers.Add(_playerMarker);
+
+            _currentLatLng = latlng;
             UpdateMap();
             SaveLocationToDisk(lat, lng);
         }
@@ -371,7 +388,8 @@ namespace PokemonGo.RocketBot.Window.Forms

         private void startStopBotToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            Task.Run(() => StartBot());
+            startStopBotToolStripMenuItem.Enabled = false;
+            Task.Run(StartBot);
         }

         private void todoToolStripMenuItem_Click(object sender, EventArgs e)
diff --git a/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Front.png b/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Front.png
new file mode 100644
index 0000000..20d619e
Binary files /dev/null and b/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Front.png differ
diff --git a/PokemonGo.RocketBot.Window/Images/Markers/Trainer.png b/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Left.png
similarity index 100%
rename from PokemonGo.RocketBot.Window/Images/Markers/Trainer.png
rename to PokemonGo.RocketBot.Window/Images/Markers/Trainer_Left.png
diff --git a/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Right.png b/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Right.png
new file mode 100644
index 0000000..5113c95
Binary files /dev/null and b/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Right.png differ
diff --git a/PokemonGo.RocketBot.Window/PokemonGo.RocketBot.Window.csproj b/PokemonGo.RocketBot.Window/PokemonGo.RocketBot.Window.csproj
index 21fe0e8..c80a31c 100644
--- a/PokemonGo.RocketBot.Window/PokemonGo.RocketBot.Window.csproj
+++ b/PokemonGo.RocketBot.Window/PokemonGo.RocketBot.Window.csproj
@@ -328,6 +328,9 @@
     <None Include="Images\Markers\Pokestop.png" />
     <None Include="Images\Markers\Pokestop_looted.png" />
     <None Include="Images\Markers\Trainer.png" />
+    <None Include="Images\Markers\Trainer_Front.png" />
+    <None Include="Images\Markers\Trainer_Left.png" />
+    <None Include="Images\Markers\Trainer_Right.png" />
     <Content Include="Images\Pokemon\Pokemon_1.png" />
     <Content Include="Images\Pokemon\Pokemon_10.png" />
     <Content Include="Images\Pokemon\Pokemon_100.png" />
diff --git a/PokemonGo.RocketBot.Window/Properties/Resources.Designer.cs b/PokemonGo.RocketBot.Window/Properties/Resources.Designer.cs
index c2d8172..2a9c7d7 100644
--- a/PokemonGo.RocketBot.Window/Properties/Resources.Designer.cs
+++ b/PokemonGo.RocketBot.Window/Properties/Resources.Designer.cs
@@ -1833,9 +1833,29 @@ namespace PokemonGo.RocketBot.Window.Properties {
         /// <summary>
         ///   查找 System.Drawing.Bitmap 类型的本地化资源。
         /// </summary>
-        internal static System.Drawing.Bitmap Trainer {
+        internal static System.Drawing.Bitmap Trainer_Front {
             get {
-                object obj = ResourceManager.GetObject("Trainer", resourceCulture);
+                object obj = ResourceManager.GetObject("Trainer_Front", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap Trainer_Left {
+            get {
+                object obj = ResourceManager.GetObject("Trainer_Left", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap Trainer_Right {
+            get {
+                object obj = ResourceManager.GetObject("Trainer_Right", resourceCulture);
                 return ((System.Drawing.Bitmap)(obj));
             }
         }
diff --git a/PokemonGo.RocketBot.Window/Properties/Resources.resx b/PokemonGo.RocketBot.Window/Properties/Resources.resx
index 3795cd2..7ebfacf 100644
--- a/PokemonGo.RocketBot.Window/Properties/Resources.resx
+++ b/PokemonGo.RocketBot.Window/Properties/Resources.resx
@@ -1990,7 +1990,13 @@
   <data name="Pokestop_looted" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Images\Markers\Pokestop_looted.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="Trainer" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Images\Markers\Trainer.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="Trainer_Front" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Images\Markers\Trainer_Front.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Trainer_Left" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Images\Markers\Trainer_Left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Trainer_Right" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Images\Markers\Trainer_Right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
 </root>
\ No newline at end of file
You may download the files in Public Git.