diff --git a/src/Koogle.Domain/Enums/ThrowEventType.cs b/src/Koogle.Domain/Enums/ThrowEventType.cs index 82e3cf9..eecf8d2 100644 --- a/src/Koogle.Domain/Enums/ThrowEventType.cs +++ b/src/Koogle.Domain/Enums/ThrowEventType.cs @@ -10,5 +10,6 @@ public enum ThrowEventType Strike = 1, // alle 9 pins Circle = 2, // Kranz - 8 outer pins, center standing Bell = 4, // Glocke - bell hit - Gutter = 8 // Rinne - gutter throw + Gutter = 8, // Rinne - gutter throw + NoWood = 16, // Fehlwurf - no pins hit } diff --git a/src/Koogle.Infrastructure/Repositories/ClubGifRepository.cs b/src/Koogle.Infrastructure/Repositories/ClubGifRepository.cs index 2b914f6..b7bdac3 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 }; + var allEvents = new[] { ThrowEventType.Strike, ThrowEventType.Circle, ThrowEventType.Bell, ThrowEventType.Gutter, ThrowEventType.NoWood }; 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 83558da..9f17d54 100644 --- a/src/Koogle.Web/Components/Game/GifPlayer.razor +++ b/src/Koogle.Web/Components/Game/GifPlayer.razor @@ -150,6 +150,7 @@ ThrowEventType.Circle => "KRANZ!", ThrowEventType.Bell => "GLOCKE!", ThrowEventType.Gutter => "RINNE!", + ThrowEventType.NoWood => "KEIN HOLZ!", _ => "" }; } diff --git a/src/Koogle.Web/Components/Layout/NavMenu.razor b/src/Koogle.Web/Components/Layout/NavMenu.razor index a6b7cf8..db09ef1 100644 --- a/src/Koogle.Web/Components/Layout/NavMenu.razor +++ b/src/Koogle.Web/Components/Layout/NavMenu.razor @@ -46,6 +46,13 @@ Icon="@Icons.Material.Filled.FlashOn"> Auslöser + + + Gifs + + } } diff --git a/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor b/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor index 864cf08..ef5e1df 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifEditDialog.razor @@ -31,6 +31,7 @@ + !string.IsNullOrWhiteSpace(_name) && (_strike || _circle || _bell || _gutter); + private bool IsValid => !string.IsNullOrWhiteSpace(_name) && (_strike || _circle || _bell || _gutter || _noWood); protected override void OnParametersSet() { @@ -74,6 +75,7 @@ _circle = (Gif.AssignedEvents & ThrowEventType.Circle) != 0; _bell = (Gif.AssignedEvents & ThrowEventType.Bell) != 0; _gutter = (Gif.AssignedEvents & ThrowEventType.Gutter) != 0; + _noWood = (Gif.AssignedEvents & ThrowEventType.NoWood) != 0; _isEnabled = Gif.IsEnabled; } } @@ -85,6 +87,7 @@ if (_circle) events |= ThrowEventType.Circle; if (_bell) events |= ThrowEventType.Bell; if (_gutter) events |= ThrowEventType.Gutter; + if (_noWood) events |= ThrowEventType.NoWood; return events; } diff --git a/src/Koogle.Web/Components/Pages/Admin/GifImportDialog.razor b/src/Koogle.Web/Components/Pages/Admin/GifImportDialog.razor index 8ff8628..2383fdb 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifImportDialog.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifImportDialog.razor @@ -43,11 +43,11 @@ private string _url = ""; private string _name = ""; private string _description = ""; - private bool _strike, _circle, _bell, _gutter; + private bool _strike, _circle, _bell, _gutter, _noWood; private bool IsValid => !string.IsNullOrWhiteSpace(_url) && !string.IsNullOrWhiteSpace(_name) - && (_strike || _circle || _bell || _gutter) + && (_strike || _circle || _bell || _gutter || _noWood) && Uri.TryCreate(_url, UriKind.Absolute, out _); private ThrowEventType GetEvents() @@ -57,6 +57,7 @@ if (_circle) events |= ThrowEventType.Circle; if (_bell) events |= ThrowEventType.Bell; if (_gutter) events |= ThrowEventType.Gutter; + if (_noWood) events |= ThrowEventType.NoWood; return events; } diff --git a/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor b/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor index 76c59ca..5a6ec18 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifManagement.razor @@ -510,6 +510,7 @@ if ((events & ThrowEventType.Circle) != 0) result.Add(ThrowEventType.Circle); 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); return result; } @@ -519,6 +520,7 @@ ThrowEventType.Circle => "Kranz", ThrowEventType.Bell => "Glocke", ThrowEventType.Gutter => "Rinne", + ThrowEventType.NoWood => "kein Holz", _ => type.ToString() }; @@ -528,6 +530,7 @@ ThrowEventType.Circle => Color.Primary, ThrowEventType.Bell => Color.Warning, ThrowEventType.Gutter => Color.Error, + ThrowEventType.NoWood => Color.Tertiary, _ => Color.Default }; diff --git a/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor b/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor index a82330f..684b156 100644 --- a/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor +++ b/src/Koogle.Web/Components/Pages/Admin/GifUploadDialog.razor @@ -20,6 +20,7 @@ + @@ -42,9 +43,9 @@ private string _name = ""; private string _description = ""; - private bool _strike, _circle, _bell, _gutter; + private bool _strike, _circle, _bell, _gutter, _noWood; - private bool IsValid => !string.IsNullOrWhiteSpace(_name) && (_strike || _circle || _bell || _gutter); + private bool IsValid => !string.IsNullOrWhiteSpace(_name) && (_strike || _circle || _bell || _gutter || _noWood); private ThrowEventType GetEvents() { @@ -53,6 +54,7 @@ if (_circle) events |= ThrowEventType.Circle; if (_bell) events |= ThrowEventType.Bell; if (_gutter) events |= ThrowEventType.Gutter; + if (_noWood) events |= ThrowEventType.NoWood; return events; } diff --git a/src/Koogle.Web/Store/GameState/GameEffects.cs b/src/Koogle.Web/Store/GameState/GameEffects.cs index 4bb6dc7..db74d04 100644 --- a/src/Koogle.Web/Store/GameState/GameEffects.cs +++ b/src/Koogle.Web/Store/GameState/GameEffects.cs @@ -1054,6 +1054,10 @@ public class GameEffects { triggeredEvent = ThrowEventType.Gutter; } + else if (afterThrowState.PinsKnocked == 0) + { + triggeredEvent = ThrowEventType.NoWood; + } if (!triggeredEvent.HasValue) { diff --git a/src/Koogle.Web/wwwroot/club-media/demo/gifs/297970f3-1bf1-4090-aa5e-d0f5cea42a93.gif b/src/Koogle.Web/wwwroot/club-media/demo/gifs/297970f3-1bf1-4090-aa5e-d0f5cea42a93.gif new file mode 100644 index 0000000..169e2a7 Binary files /dev/null and b/src/Koogle.Web/wwwroot/club-media/demo/gifs/297970f3-1bf1-4090-aa5e-d0f5cea42a93.gif differ