From 5ff42f5bca7ef2a67fa12281a721443a550b26bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20=C3=96man?= Date: Sat, 25 Oct 2025 08:46:52 +0200 Subject: [PATCH] =?UTF-8?q?Checkar=20in=20innan=20funktionen=20=C3=A4r=20k?= =?UTF-8?q?lar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModelClasses/RoundRunningViewModel.cs | 97 ++++++++++++------- GreadyPoang/MauiProgram.cs | 8 +- GreadyPoang/Views/RoundRunningView.xaml | 5 +- GreadyPoang/Views/RoundStartingView.xaml | 37 +++---- 4 files changed, 86 insertions(+), 61 deletions(-) diff --git a/GreadyPoang.ViewModelLayer/ViewModelClasses/RoundRunningViewModel.cs b/GreadyPoang.ViewModelLayer/ViewModelClasses/RoundRunningViewModel.cs index 74b0773..9661424 100644 --- a/GreadyPoang.ViewModelLayer/ViewModelClasses/RoundRunningViewModel.cs +++ b/GreadyPoang.ViewModelLayer/ViewModelClasses/RoundRunningViewModel.cs @@ -42,7 +42,7 @@ public partial class RoundRunningViewModel : ObservableObject RoundElements = new ObservableCollection(); BuilderObject = new(); _popupEvent.InfoPopupCloseRequested += infoPopupViewModel_ClosePopupRequested; - PopupVisad = false; + //PopupVisad = false; OnLoadedCommand = new AsyncRelayCommand(OnLoadedAsync, () => true); } @@ -67,7 +67,7 @@ public partial class RoundRunningViewModel : ObservableObject private string _activePopupId; - public bool PopupVisad { get; set; } + //public bool PopupVisad { get; set; } private async Task OnLoadedAsync() { @@ -182,24 +182,24 @@ public partial class RoundRunningViewModel : ObservableObject private void Show_a_Popup(string ppName, string ppTitle, string ppMessage) { - if (!PopupVisad) + //if (!PopupVisad) + //{ + var queryAttributes = new Dictionary { - var queryAttributes = new Dictionary - { - [nameof(InfoPopupViewModel.Title)] = ppTitle, - [nameof(InfoPopupViewModel.Message)] = ppMessage, - [nameof(InfoPopupViewModel.Name)] = ppName, + [nameof(InfoPopupViewModel.Title)] = ppTitle, + [nameof(InfoPopupViewModel.Message)] = ppMessage, + [nameof(InfoPopupViewModel.Name)] = ppName, - }; + }; - _popupService.ShowPopup( - Shell.Current, - options: PopupOptions.Empty, - shellParameters: queryAttributes); + _popupService.ShowPopup( + Shell.Current, + options: PopupOptions.Empty, + shellParameters: queryAttributes); - _activePopupId = LatestPopup.valueGuid; + _activePopupId = LatestPopup.valueGuid; - } + //} } private async void infoPopupViewModel_ClosePopupRequested(object? sender, PopupCloseEventArgs e) @@ -208,7 +208,7 @@ public partial class RoundRunningViewModel : ObservableObject { return; } - PopupVisad = true; + //PopupVisad = true; await _popupService.ClosePopupAsync(Shell.Current); } @@ -229,10 +229,12 @@ public partial class RoundRunningViewModel : ObservableObject { PlayerColumn player = new PlayerColumn(); + var regMax = elements.Max(e => e.GameRoundRegNr); + var existingWinning = elements.FirstOrDefault(e => e.Status == GamePointStatus.Winning); + foreach (var element in elements) { - player = PlayerColumns.FirstOrDefault(p => p.PlayerId == element.ParticipantId); - + player = PlayerColumns.FirstOrDefault(p => p.PlayerId == element.ParticipantId)!; if (player == null) { player = new PlayerColumn @@ -250,23 +252,7 @@ public partial class RoundRunningViewModel : ObservableObject player.PlayerPoints += element.GameRegPoints; if (player.PlayerPoints > 10000) { - var winner = RoundElements.FirstOrDefault(e => e.ParticipantId == player.PlayerId); - var oldStatus = winner.Status; - winner.Status = GamePointStatus.Winning; - if (playerPointsOld < 10000 && oldStatus != winner.Status) - { - Show_a_Popup( - player.PlayerName, - "Se upp för denne spelare !", - $"Du har nått en poängnivå över 10000 ({player.PlayerPoints})\r" + - $"Alla övriga får nu en chans att överträffa\r" + - $"om någon kommer till samma poäng som\r" + - $"{player.PlayerName}\r" + - $"får hen försvara sig med nytt kast\r" + - $"Om kastet inte blir godkänt (ger poäng)\r" + - $"Vinner den upphinnande spelaren" - ); - } + HandlePlayerReachedWinningThreshold(player, regMax, element, playerPointsOld, existingWinning); } } @@ -299,6 +285,47 @@ public partial class RoundRunningViewModel : ObservableObject } } + private void HandlePlayerReachedWinningThreshold( + PlayerColumn player, + int regMax, + RoundBuilderElement element, + int playerPointsOld, + RoundBuilderElement existingWinning + ) + { + + var nextPlayer = RoundElements[AfterNext()].ParticipantName; + Debug.WriteLine($"Spelare {nextPlayer} samma som {player.PlayerName} ???."); + // Om det redan finns en vinnare, sätt dennes status tillbaka till InProgress, kanske + var winner = RoundElements.FirstOrDefault(e => e.ParticipantId == player.PlayerId); + var oldStatus = winner.Status; + winner.Status = GamePointStatus.Winning; + if (playerPointsOld < 10000 && oldStatus != winner.Status && regMax == element.GameRoundRegNr) + { + //PopupVisad = false; + Show_a_Popup( + player.PlayerName, + "Se upp för denne spelare !", + $"Du har nått en poängnivå över 10000 ({player.PlayerPoints})\r" + + $"Alla övriga får nu en chans att överträffa\r" + + $"om någon kommer till samma poäng som\r" + + $"{player.PlayerName}\r" + + $"får hen försvara sig med nytt kast\r" + + $"Om kastet inte blir godkänt (ger poäng)\r" + + $"Vinner den upphinnande spelaren" + ); + } + } + + private int AfterNext() + { + var comingUp = nextPlayerElement(); + if (RoundElements.Count - 1 == comingUp) + { + return 0; + } + return comingUp; + } public void BuildScore(IEnumerable columns) { diff --git a/GreadyPoang/MauiProgram.cs b/GreadyPoang/MauiProgram.cs index d30b2be..e09fccc 100644 --- a/GreadyPoang/MauiProgram.cs +++ b/GreadyPoang/MauiProgram.cs @@ -33,10 +33,10 @@ public static class MauiProgram builder.Services.AddDbContext(options => { var MauiDataPath = FileSystem.Current.AppDataDirectory; - if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"))) ; - { - File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"), MauiDataPath); - } + //if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"))) ; + //{ + // File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MauiDataPath_GreadyPoang.txt"), MauiDataPath); + //} var dbPath = Path.Combine(MauiDataPath, "PoangDB.db"); options.UseSqlite($"Data Source={dbPath}"); }); diff --git a/GreadyPoang/Views/RoundRunningView.xaml b/GreadyPoang/Views/RoundRunningView.xaml index 21fda70..590b814 100644 --- a/GreadyPoang/Views/RoundRunningView.xaml +++ b/GreadyPoang/Views/RoundRunningView.xaml @@ -8,10 +8,6 @@ xmlns:model="clr-namespace:GreadyPoang.EntityLayer;assembly=GreadyPoang.EntityLayer" x:DataType="vm:RoundRunningViewModel" Title="RoundRunningView"> - - @@ -31,6 +27,7 @@ diff --git a/GreadyPoang/Views/RoundStartingView.xaml b/GreadyPoang/Views/RoundStartingView.xaml index 10bf787..48f2a23 100644 --- a/GreadyPoang/Views/RoundStartingView.xaml +++ b/GreadyPoang/Views/RoundStartingView.xaml @@ -25,15 +25,15 @@ ViewDescription="Välj deltagare och initiera spel" /> - + + StrokeThickness="2" + BackgroundColor="LightGray" + Padding="10" + Margin="2" + HorizontalOptions="Start" + VerticalOptions="Center" + WidthRequest="250"> + HorizontalOptions="Start" + Padding="2" + Margin="5" + WidthRequest="150" + HeightRequest="100" + Stroke="LightGray" + StrokeThickness="1" + x:Name="RoundElementBorder" + BackgroundColor="BlanchedAlmond" + StrokeShape="RoundRectangle 10">