diff --git a/YJMPD-UWP/Helpers/EventArgs/GamePlayersUpdatedEventArgs.cs b/YJMPD-UWP/Helpers/EventArgs/GamePlayersUpdatedEventArgs.cs index a031bad..8a38b82 100644 --- a/YJMPD-UWP/Helpers/EventArgs/GamePlayersUpdatedEventArgs.cs +++ b/YJMPD-UWP/Helpers/EventArgs/GamePlayersUpdatedEventArgs.cs @@ -3,18 +3,17 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using YJMPD_UWP.Model.Object; namespace YJMPD_UWP.Helpers.EventArgs { public class GamePlayersUpdatedEventArgs : System.EventArgs { - public string Username { get; private set; } - public double Points { get; private set; } + public Player Player { get; private set; } - public GamePlayersUpdatedEventArgs(string username, double points) + public GamePlayersUpdatedEventArgs(Player player) { - Username = username; - Points = points; + Player = player; } } } diff --git a/YJMPD-UWP/Model/GameHandler.cs b/YJMPD-UWP/Model/GameHandler.cs index 5e0b664..5ef01d0 100644 --- a/YJMPD-UWP/Model/GameHandler.cs +++ b/YJMPD-UWP/Model/GameHandler.cs @@ -1,6 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; using YJMPD_UWP.Helpers.EventArgs; +using YJMPD_UWP.Model.Object; namespace YJMPD_UWP.Model { @@ -15,7 +17,7 @@ namespace YJMPD_UWP.Model public enum GameStatus { STARTED, SEARCHING, WAITING, ENDED, STOPPED } public GameStatus Status { get; private set; } - public Dictionary Players { get; private set; } + public List Players { get; private set; } private void UpdateGameStatus(GameStatus status) { @@ -25,28 +27,43 @@ namespace YJMPD_UWP.Model OnStatusUpdate(this, new GameStatusUpdatedEventArgs(status)); } - private void UpdateGamePlayers(string username, double points) + private void UpdateGamePlayers(Player player) { if (OnPlayersUpdate == null) return; - OnPlayersUpdate(this, new GamePlayersUpdatedEventArgs(username, points)); + OnPlayersUpdate(this, new GamePlayersUpdatedEventArgs(player)); } public GameHandler() { - Players = new Dictionary(); + Players = new List(); Status = GameStatus.STOPPED; } - public void AddPlayer(string username, double points) + public void AddPlayer(string username) { - Players.Add(username, points); - UpdateGamePlayers(username, points); + Player p = new Player(username); + Players.Add(p); + UpdateGamePlayers(p); } - public void UpdatePlayer(string username, double points) + + public void Reset() { - Players.Remove(username); - AddPlayer(username, points); + Players.Clear(); + UpdateGamePlayers(null); + } + + public void UpdatePlayer(string username, double pointstotal, double points) + { + foreach(Player p in Players) + { + if(p.Username == username) + { + p.Update(pointstotal, points); + UpdateGamePlayers(p); + return; + } + } } @@ -83,13 +100,25 @@ namespace YJMPD_UWP.Model //Do stuff + UpdateGameStatus(GameStatus.SEARCHING); + + await Task.Delay(TimeSpan.FromSeconds(2)); + AddPlayer("Kenneth"); + await Task.Delay(TimeSpan.FromSeconds(1)); + AddPlayer("Yorick"); + + UpdateGameStatus(GameStatus.WAITING); + + await Task.Delay(TimeSpan.FromSeconds(3)); + UpdateGameStatus(GameStatus.STARTED); + return true; } private async Task StopGame() { - + Reset(); //Do stuff UpdateGameStatus(GameStatus.STOPPED); diff --git a/YJMPD-UWP/Model/Object/Player.cs b/YJMPD-UWP/Model/Object/Player.cs new file mode 100644 index 0000000..2e4bea4 --- /dev/null +++ b/YJMPD-UWP/Model/Object/Player.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YJMPD_UWP.Model.Object +{ + public class Player + { + public string Username { get; private set; } + public double PointsTotal { get; private set; } + public double Points { get; private set; } + + public Player(string username) + { + Username = username; + Points = 0; + PointsTotal = 0; + } + + public Player(string username, double pointstotal) + { + Username = username; + PointsTotal = pointstotal; + Points = 0; + } + + public void Reset() + { + Points = 0; + } + + public void Update(double pointstotal, double points) + { + PointsTotal = pointstotal; + Points = points; + } + } +} diff --git a/YJMPD-UWP/ViewModels/MatchVM.cs b/YJMPD-UWP/ViewModels/MatchVM.cs index 763a5b0..b532b1e 100644 --- a/YJMPD-UWP/ViewModels/MatchVM.cs +++ b/YJMPD-UWP/ViewModels/MatchVM.cs @@ -1,4 +1,7 @@ -namespace YJMPD_UWP.ViewModels +using System.Collections.Generic; +using YJMPD_UWP.Model.Object; + +namespace YJMPD_UWP.ViewModels { public class MatchVM : TemplateVM { @@ -7,6 +10,16 @@ App.Geo.OnStatusUpdate += Geo_OnStatusUpdate; App.Network.OnStatusUpdate += Network_OnStatusUpdate; App.Game.OnStatusUpdate += Game_OnStatusUpdate; + App.Game.OnPlayersUpdate += Game_OnPlayersUpdate; + } + + private void Game_OnPlayersUpdate(object sender, Helpers.EventArgs.GamePlayersUpdatedEventArgs e) + { + dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + { + NotifyPropertyChanged(nameof(Players)); + NotifyPropertyChanged(nameof(PlayersCount)); + }); } private void Game_OnStatusUpdate(object sender, Helpers.EventArgs.GameStatusUpdatedEventArgs e) @@ -35,6 +48,22 @@ } + public List Players + { + get + { + return new List(App.Game.Players); + } + } + + public string PlayersCount + { + get + { + return "There are currently " + App.Game.Players.Count + " players in the match."; + } + } + public bool MatchAvailable { get diff --git a/YJMPD-UWP/Views/MatchView.xaml b/YJMPD-UWP/Views/MatchView.xaml index f56f50f..450e493 100644 --- a/YJMPD-UWP/Views/MatchView.xaml +++ b/YJMPD-UWP/Views/MatchView.xaml @@ -16,8 +16,25 @@ -