diff --git a/YJMPD-UWP/App.xaml.cs b/YJMPD-UWP/App.xaml.cs index b33321c..f20b1ca 100644 --- a/YJMPD-UWP/App.xaml.cs +++ b/YJMPD-UWP/App.xaml.cs @@ -10,6 +10,7 @@ using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using Windows.ApplicationModel.Core; +using YJMPD_UWP.Helpers; namespace YJMPD_UWP { @@ -259,6 +260,7 @@ namespace YJMPD_UWP var deferral = e.SuspendingOperation.GetDeferral(); App.Network.Disconnect(); + Settings.SaveStatistics(); deferral.Complete(); } diff --git a/YJMPD-UWP/Helpers/EventArgs/PositionUpdatedEventArgs.cs b/YJMPD-UWP/Helpers/EventArgs/PositionUpdatedEventArgs.cs index 5e4dbff..3753c3a 100644 --- a/YJMPD-UWP/Helpers/EventArgs/PositionUpdatedEventArgs.cs +++ b/YJMPD-UWP/Helpers/EventArgs/PositionUpdatedEventArgs.cs @@ -4,13 +4,11 @@ namespace YJMPD_UWP.Helpers.EventArgs { public class PositionUpdatedEventArgs : System.EventArgs { - public Geoposition Old { get; private set; } - public Geoposition New { get; private set; } + public Geoposition Position { get; private set; } - public PositionUpdatedEventArgs(Geoposition old, Geoposition notold) + public PositionUpdatedEventArgs(Geoposition pos) { - Old = old; - New = notold; + Position = pos; } } } diff --git a/YJMPD-UWP/Helpers/Settings.cs b/YJMPD-UWP/Helpers/Settings.cs index 9b9d08a..740f905 100644 --- a/YJMPD-UWP/Helpers/Settings.cs +++ b/YJMPD-UWP/Helpers/Settings.cs @@ -34,6 +34,11 @@ namespace YJMPD_UWP.Helpers } } + public static void SaveStatistics() + { + Values["statistics"] = Util.Serialize(st); + } + public static string Username { diff --git a/YJMPD-UWP/Model/ApiHandler.cs b/YJMPD-UWP/Model/ApiHandler.cs index 10c1868..1933938 100644 --- a/YJMPD-UWP/Model/ApiHandler.cs +++ b/YJMPD-UWP/Model/ApiHandler.cs @@ -49,7 +49,7 @@ namespace YJMPD_UWP.Model if (o["selected"].ToObject() == true) { Debug.WriteLine("Selected player taking picture"); - App.Game.Selected = true; + App.Game.SetSelected(true); App.Navigate(typeof(PhotoView)); } else diff --git a/YJMPD-UWP/Model/GameHandler.cs b/YJMPD-UWP/Model/GameHandler.cs index 5028aa4..84de13d 100644 --- a/YJMPD-UWP/Model/GameHandler.cs +++ b/YJMPD-UWP/Model/GameHandler.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Threading.Tasks; +using Windows.Devices.Geolocation.Geofencing; using Windows.Foundation; +using Windows.Services.Maps; using Windows.UI.Xaml.Media.Imaging; using YJMPD_UWP.Helpers; using YJMPD_UWP.Helpers.EventArgs; @@ -24,12 +27,17 @@ namespace YJMPD_UWP.Model public List Players { get; private set; } - public bool Selected { get; set; } + public bool Selected { get; private set; } private void UpdateGameStatus(GameStatus status) { Status = status; + if (Status == GameStatus.STARTED) + App.Geo.KeepHistory(); + else + App.Geo.ClearHistory(); + if (OnStatusUpdate == null) return; OnStatusUpdate(this, new GameStatusUpdatedEventArgs(status)); @@ -54,6 +62,17 @@ namespace YJMPD_UWP.Model UpdateGamePlayers(p); } + public void SetSelected(bool b) + { + if (b) + { + Selected = true; + Settings.Statistics.Selected += 1; + } + else + Selected = false; + } + public void MoveToWaiting() { UpdateGameStatus(GameStatus.WAITING); @@ -77,6 +96,7 @@ namespace YJMPD_UWP.Model App.Photo.Reset(); Selected = false; Players.Clear(); + GeofenceMonitor.Current.Geofences.Clear(); UpdateGamePlayers(null); App.Navigate(typeof(MatchView)); @@ -95,6 +115,24 @@ namespace YJMPD_UWP.Model } } + //Ending + + public async Task End() + { + CalculateDistanceWalked(); + Settings.Statistics.Matches += 1; + + UpdateGameStatus(GameStatus.ENDED); + + return true; + } + + public async void CalculateDistanceWalked() + { + MapRoute r = await Util.FindWalkingRoute(App.Geo.History.Select(p => p.Coordinate.Point).ToList()); + Settings.Statistics.Distance += r.LengthInMeters; + } + //Starting and Stopping public async Task Start() diff --git a/YJMPD-UWP/Model/GeoHandler.cs b/YJMPD-UWP/Model/GeoHandler.cs index 060e4ef..cfa622a 100644 --- a/YJMPD-UWP/Model/GeoHandler.cs +++ b/YJMPD-UWP/Model/GeoHandler.cs @@ -21,6 +21,7 @@ namespace YJMPD_UWP.Model public bool? Connected { get; private set; } + private bool trackhistory = false; private List _history; public List History { @@ -61,9 +62,15 @@ namespace YJMPD_UWP.Model public void ClearHistory() { + trackhistory = false; _history.Clear(); } + public void KeepHistory() + { + trackhistory = true; + } + public async Task StartTracking() { // Request permission to access location @@ -124,15 +131,11 @@ namespace YJMPD_UWP.Model private void Geo_PositionChanged(Geolocator sender, PositionChangedEventArgs args) { - if (_history.Count > 0) - UpdatePosition(_history.Last(), args.Position); - else - { - _position = args.Position; - UpdatePosition(args.Position, args.Position); - } - _history.Add(args.Position); + UpdatePosition(args.Position); + + if(trackhistory) + _history.Add(args.Position); } private void UpdateStatus(PositionStatus s) @@ -144,13 +147,13 @@ namespace YJMPD_UWP.Model OnStatusUpdate(this, new PositionStatusUpdatedEventArgs(s)); } - private void UpdatePosition(Geoposition old, Geoposition newp) + private void UpdatePosition(Geoposition pos) { - _position = newp; + _position = pos; if (OnPositionUpdate == null) return; - OnPositionUpdate(this, new PositionUpdatedEventArgs(old, newp)); + OnPositionUpdate(this, new PositionUpdatedEventArgs(pos)); } } } diff --git a/YJMPD-UWP/Model/Object/Statistics.cs b/YJMPD-UWP/Model/Object/Statistics.cs index 01c7def..57bdcc0 100644 --- a/YJMPD-UWP/Model/Object/Statistics.cs +++ b/YJMPD-UWP/Model/Object/Statistics.cs @@ -10,13 +10,13 @@ namespace YJMPD_UWP.Model.Object Points = new List(); Distance = 0; Matches = 0; - Leader = 0; + Selected = 0; } public List Points { get; set; } public double Distance { get; set; } public int Matches { get; set; } - public int Leader { get; set; } + public int Selected { get; set; } public void AddPoints(double points) { diff --git a/YJMPD-UWP/ViewModels/StatisticsVM.cs b/YJMPD-UWP/ViewModels/StatisticsVM.cs index 444c455..28a610f 100644 --- a/YJMPD-UWP/ViewModels/StatisticsVM.cs +++ b/YJMPD-UWP/ViewModels/StatisticsVM.cs @@ -33,7 +33,7 @@ namespace YJMPD_UWP.ViewModels { get { - return st.Leader + ""; + return st.Selected + ""; } }