From 40db3d08c0192509a4203b896d024cc71b84ecfb Mon Sep 17 00:00:00 2001 From: beo3000 Date: Thu, 8 Jan 2026 21:02:44 +0100 Subject: [PATCH] added new gif event --- .../Services/ClubTerminologyService.cs | 1 + src/Koogle.Domain/Enums/ThrowEventType.cs | 1 + .../Repositories/ClubGifRepository.cs | 2 +- .../Components/Game/GifPlayer.razor | 1 + .../Pages/Admin/GifEditDialog.razor | 5 +++- .../Pages/Admin/GifImportDialog.razor | 29 ++++++++++++++++--- .../Pages/Admin/GifManagement.razor | 2 ++ .../Pages/Admin/GifUploadDialog.razor | 6 ++-- src/Koogle.Web/Store/GameState/GameEffects.cs | 4 +++ 9 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/Koogle.Application/Services/ClubTerminologyService.cs b/src/Koogle.Application/Services/ClubTerminologyService.cs index 98f7acd..e59dea0 100644 --- a/src/Koogle.Application/Services/ClubTerminologyService.cs +++ b/src/Koogle.Application/Services/ClubTerminologyService.cs @@ -136,6 +136,7 @@ public class ClubTerminologyService( ThrowEventType.Bell => await GetTermAsync(TermKey.Bell), ThrowEventType.Gutter => await GetTermAsync(TermKey.Gutter), ThrowEventType.NoWood => await GetTermAsync(TermKey.NoWood), + ThrowEventType.Cleared => "Abgeräumt", _ => type.ToString() }; diff --git a/src/Koogle.Domain/Enums/ThrowEventType.cs b/src/Koogle.Domain/Enums/ThrowEventType.cs index eecf8d2..35f18bf 100644 --- a/src/Koogle.Domain/Enums/ThrowEventType.cs +++ b/src/Koogle.Domain/Enums/ThrowEventType.cs @@ -12,4 +12,5 @@ public enum ThrowEventType Bell = 4, // Glocke - bell hit Gutter = 8, // Rinne - gutter throw NoWood = 16, // Fehlwurf - no pins hit + Cleared = 32, // Abgeräumt - remaining pins hit } diff --git a/src/Koogle.Infrastructure/Repositories/ClubGifRepository.cs b/src/Koogle.Infrastructure/Repositories/ClubGifRepository.cs index b7bdac3..a19b5a6 100644 --- a/src/Koogle.Infrastructure/Repositories/ClubGifRepository.cs +++ b/src/Koogle.Infrastructure/Repositories/ClubGifRepository.cs @@ -56,7 +56,7 @@ public class ClubGifRepository(IDbContextFactory contextFactory) : await using var context = await contextFactory.CreateDbContextAsync(ct); // Get top-rated GIFs for each event type - var allEvents = new[] { ThrowEventType.Strike, ThrowEventType.Circle, ThrowEventType.Bell, ThrowEventType.Gutter, ThrowEventType.NoWood }; + var allEvents = new[] { ThrowEventType.Strike, ThrowEventType.Circle, ThrowEventType.Bell, ThrowEventType.Gutter, ThrowEventType.NoWood, ThrowEventType.Cleared }; var result = new List(); foreach (var eventType in allEvents) diff --git a/src/Koogle.Web/Components/Game/GifPlayer.razor b/src/Koogle.Web/Components/Game/GifPlayer.razor index b52555f..3fd384d 100644 --- a/src/Koogle.Web/Components/Game/GifPlayer.razor +++ b/src/Koogle.Web/Components/Game/GifPlayer.razor @@ -177,6 +177,7 @@ ThrowEventType.Bell => _termBell, ThrowEventType.Gutter => _termGutter, ThrowEventType.NoWood => _termNoWood, + ThrowEventType.Cleared => "ABGERÄUMT!", _ => "" }; } diff --git a/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor b/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor index 00da089..92a2a4a 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor @@ -35,6 +35,7 @@ + GIF von URL importieren @@ -21,9 +24,10 @@ - - - + + + + !string.IsNullOrWhiteSpace(_url) && !string.IsNullOrWhiteSpace(_name) @@ -59,6 +67,7 @@ if (_bell) events |= ThrowEventType.Bell; if (_gutter) events |= ThrowEventType.Gutter; if (_noWood) events |= ThrowEventType.NoWood; + if (_cleared) events |= ThrowEventType.Cleared; return events; } @@ -75,4 +84,16 @@ } private void Cancel() => MudDialog.Cancel(); + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + _termBell = await Term.GetTermAsync(TermKey.Bell); + _termGutter = await Term.GetTermAsync(TermKey.Gutter); + _termNoWood = await Term.GetTermAsync(TermKey.NoWood); + StateHasChanged(); + } + } + } diff --git a/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor b/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor index f3e0bb3..4a62ac6 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor @@ -512,6 +512,7 @@ if ((events & ThrowEventType.Bell) != 0) result.Add(ThrowEventType.Bell); if ((events & ThrowEventType.Gutter) != 0) result.Add(ThrowEventType.Gutter); if ((events & ThrowEventType.NoWood) != 0) result.Add(ThrowEventType.NoWood); + if ((events & ThrowEventType.Cleared) != 0) result.Add(ThrowEventType.Cleared); return result; } @@ -522,6 +523,7 @@ ThrowEventType.Bell => Color.Warning, ThrowEventType.Gutter => Color.Error, ThrowEventType.NoWood => Color.Tertiary, + ThrowEventType.Cleared => Color.Info, _ => Color.Default }; diff --git a/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor b/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor index 209cf0e..eaa5e63 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor @@ -25,6 +25,7 @@ + !string.IsNullOrWhiteSpace(_name) && (_strike || _circle || _bell || _gutter || _noWood); + private bool IsValid => !string.IsNullOrWhiteSpace(_name) && (_strike || _circle || _bell || _gutter || _noWood || _cleared); protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -72,6 +73,7 @@ if (_bell) events |= ThrowEventType.Bell; if (_gutter) events |= ThrowEventType.Gutter; if (_noWood) events |= ThrowEventType.NoWood; + if (_cleared) events |= ThrowEventType.Cleared; return events; } diff --git a/src/Koogle.Web/Store/GameState/GameEffects.cs b/src/Koogle.Web/Store/GameState/GameEffects.cs index 51b242c..88904fe 100644 --- a/src/Koogle.Web/Store/GameState/GameEffects.cs +++ b/src/Koogle.Web/Store/GameState/GameEffects.cs @@ -1059,6 +1059,10 @@ public class GameEffects { triggeredEvent = ThrowEventType.NoWood; } + else if (afterThrowState.IsCleared) + { + triggeredEvent = ThrowEventType.Cleared; + } if (!triggeredEvent.HasValue) {