From aa8cf4d83a4542a49e7e647904ba1fdf7a080b62 Mon Sep 17 00:00:00 2001 From: beo3000 Date: Sat, 27 Dec 2025 13:42:32 +0100 Subject: [PATCH] refactoring gameinput --- .../Components/Game/ConfirmPanel.razor | 161 ++++++++++++++++++ .../Components/Game/GameInputPanel.razor | 31 ++-- .../Components/Game/NumberPanel.razor | 98 ++++------- 3 files changed, 217 insertions(+), 73 deletions(-) create mode 100644 src/Koogle.Web/Components/Game/ConfirmPanel.razor diff --git a/src/Koogle.Web/Components/Game/ConfirmPanel.razor b/src/Koogle.Web/Components/Game/ConfirmPanel.razor new file mode 100644 index 0000000..7d13563 --- /dev/null +++ b/src/Koogle.Web/Components/Game/ConfirmPanel.razor @@ -0,0 +1,161 @@ +@using Koogle.Domain.Enums + +
+ + + Glocke + + + + + Wurf + +
+ + + +@code { + /// + /// Whether the panel is interactive. + /// + [Parameter] + public bool IsInteractive { get; set; } = true; + + /// + /// Whether the throw can be confirmed (pins have been selected). + /// + [Parameter] + public bool CanConfirmThrow { get; set; } = true; + + /// + /// Currently selected number (for highlighting). + /// + [Parameter] + public int? SelectedNumber { get; set; } + + /// + /// Current bell value state. + /// + [Parameter] + public bool BellValue { get; set; } + + /// + /// Callback when a number is clicked (sets all pins 1-N as fallen). + /// + // [Parameter] + // public EventCallback OnNumberClicked { get; set; } + + /// + /// Callback when bell button is clicked. + /// + [Parameter] + public EventCallback OnBellClicked { get; set; } + + /// + /// Callback when throw is confirmed. + /// + [Parameter] + public EventCallback OnThrowConfirmed { get; set; } + + private Color GetButtonColor(int number) + { + if (SelectedNumber == number) + return Color.Secondary; + + // Special colors for key numbers + return number switch + { + 0 => Color.Error, // Rinne (gutter) + 9 => Color.Success, // Alle (strike) + _ => Color.Primary + }; + } + + // private async Task HandleNumberClick(int number) + // { + // if (!IsInteractive) + // return; + + // await OnNumberClicked.InvokeAsync(number); + // } + + private async Task HandleBellClick() + { + if (!IsInteractive) + return; + + await OnBellClicked.InvokeAsync(); + } + + private async Task HandleConfirmThrow() + { + if (!IsInteractive || !CanConfirmThrow) + return; + + await OnThrowConfirmed.InvokeAsync(); + } +} diff --git a/src/Koogle.Web/Components/Game/GameInputPanel.razor b/src/Koogle.Web/Components/Game/GameInputPanel.razor index ffb622d..2a2271e 100644 --- a/src/Koogle.Web/Components/Game/GameInputPanel.razor +++ b/src/Koogle.Web/Components/Game/GameInputPanel.razor @@ -32,16 +32,24 @@ OnPinClicked="HandlePinClick" /> - @* Number quick-entry *@ -
- -
+ + @if (@GameState.Value.ThrowPanel.ThrowMode == ThrowMode.Reposition) + { + @* Number quick-entry *@ +
+ +
+ } + + @* Throw info and controls *@
@@ -172,7 +180,7 @@ private void HandleNumberClick(int number) { - // Quick entry: set pins 1-N as fallen, rest as standing + // Quick entry: set pins 1-N as fallen, reset as standing var newState = GameState.Value.ThrowPanel.ResetPins(); for (int i = 1; i <= 9; i++) @@ -280,4 +288,5 @@ 9 => GameState.Value.ThrowPanel.Pin9, _ => PinStatus.Standing }; + } diff --git a/src/Koogle.Web/Components/Game/NumberPanel.razor b/src/Koogle.Web/Components/Game/NumberPanel.razor index e543375..fe6751f 100644 --- a/src/Koogle.Web/Components/Game/NumberPanel.razor +++ b/src/Koogle.Web/Components/Game/NumberPanel.razor @@ -6,7 +6,7 @@ { var number = i; -
- - - Glocke - - - - - Wurf - -
+