From 9e3b8c2945c61ca24694e6b25ef78877ec8282d7 Mon Sep 17 00:00:00 2001 From: beo3000 Date: Thu, 20 Nov 2025 17:48:39 +0100 Subject: [PATCH] added participantsstate --- .../Components/Controls/NumberPanel.razor | 13 +++-- .../Controls/ParticipantsModeSelect.razor | 21 +++++++++ .../Components/Controls/ThrowModeSelect.razor | 2 +- .../Components/Controls/ThrowPanel.razor | 4 +- .../Components/Controls/ThrowPanelMenu.razor | 1 + .../Components/Dialogs/StartGameDialog.razor | 16 +++++++ KoogleApp/Components/Pages/Game.razor | 28 ++++++++--- KoogleApp/Games/Training/Setup.razor | 4 ++ KoogleApp/Model/GameStatus.cs | 7 ++- KoogleApp/Store/Game/Participants/Actions.cs | 4 ++ KoogleApp/Store/Game/Participants/Reducers.cs | 18 +++++++ KoogleApp/Store/Game/Participants/State.cs | 12 +++++ KoogleApp/Store/Game/Setup/Actions.cs | 4 ++ .../Game/Setup/{Reducer.cs => Reducers.cs} | 18 +++++++ KoogleApp/Store/Game/Setup/State.cs | 4 +- KoogleApp/Store/Game/ThrowPanel/Actions.cs | 13 +++-- KoogleApp/Store/Game/ThrowPanel/Effects.cs | 47 ++++++++++++------- KoogleApp/Store/Game/ThrowPanel/State.cs | 7 +++ KoogleApp/ThrowPanelState.json | 6 +-- 19 files changed, 190 insertions(+), 39 deletions(-) create mode 100644 KoogleApp/Components/Controls/ParticipantsModeSelect.razor create mode 100644 KoogleApp/Store/Game/Participants/Actions.cs create mode 100644 KoogleApp/Store/Game/Participants/Reducers.cs create mode 100644 KoogleApp/Store/Game/Participants/State.cs rename KoogleApp/Store/Game/Setup/{Reducer.cs => Reducers.cs} (53%) diff --git a/KoogleApp/Components/Controls/NumberPanel.razor b/KoogleApp/Components/Controls/NumberPanel.razor index 0cedfcd..9a1785e 100644 --- a/KoogleApp/Components/Controls/NumberPanel.razor +++ b/KoogleApp/Components/Controls/NumberPanel.razor @@ -2,12 +2,14 @@ @using KoogleApp.Model.EventMessages @using KoogleApp.Services @using KoogleApp.Store.Game +@using KoogleApp.Store.Game.Participants @using KoogleApp.Store.Game.ThrowPanel @inherits FluxorComponent @inject IState ThrowPanelState @inject IDispatcher Dispatcher +@inject IState ParticipantsState @if (ThrowPanelState.Value.IsStated) { @@ -121,16 +123,21 @@ } - @if (CanSelectPlayer) - { + + @if (CanSelectPlayer) + {

Spieler auswählen

+ } + else + { +

@($"P: {@ParticipantsState.Value.PlayerIds.FirstOrDefault()}")

+ }
- } } diff --git a/KoogleApp/Components/Controls/ParticipantsModeSelect.razor b/KoogleApp/Components/Controls/ParticipantsModeSelect.razor new file mode 100644 index 0000000..d11ea88 --- /dev/null +++ b/KoogleApp/Components/Controls/ParticipantsModeSelect.razor @@ -0,0 +1,21 @@ +@using KoogleApp.Store.Game.Setup +@using KoogleApp.Store.Game.ThrowPanel + +@inject IDispatcher Dispatcher + + + +@code { + Dictionary _values = new() + { + { ParticipantsMode.FreeToChoose, "frei wählbar" }, + { ParticipantsMode.GameLogic, "automatisch / rotierend" }, + { ParticipantsMode.Random, "zufällig" } + }; + + +} diff --git a/KoogleApp/Components/Controls/ThrowModeSelect.razor b/KoogleApp/Components/Controls/ThrowModeSelect.razor index 26a3dec..63168e2 100644 --- a/KoogleApp/Components/Controls/ThrowModeSelect.razor +++ b/KoogleApp/Components/Controls/ThrowModeSelect.razor @@ -4,7 +4,7 @@ @inject IState State - diff --git a/KoogleApp/Components/Controls/ThrowPanel.razor b/KoogleApp/Components/Controls/ThrowPanel.razor index b281801..be7b7ac 100644 --- a/KoogleApp/Components/Controls/ThrowPanel.razor +++ b/KoogleApp/Components/Controls/ThrowPanel.razor @@ -1,5 +1,6 @@ @using KoogleApp.Model @using KoogleApp.Store.Game +@using KoogleApp.Store.Game.Participants @using KoogleApp.Store.Game.ThrowPanel @using KoogleApp.Store.Game.ThrowTimer @using KoogleApp.Store.Game.UndoRedo @@ -9,6 +10,7 @@ @inject IState ThrowPanelState @inject IState UndoRedoState +@inject IState ParticipantsState @inject IDispatcher Dispatcher @if (ThrowPanelState.Value.IsStated) @@ -129,7 +131,7 @@ private void DoThrow(bool leftSink, bool rightSink) { _correcting = false; - Dispatcher.Dispatch(new ThrowAction(LeftSink: leftSink, RightSink: rightSink)); + Dispatcher.Dispatch(new ThrowAction(LeftSink: leftSink, RightSink: rightSink, ParticipantsState: ParticipantsState.Value)); } diff --git a/KoogleApp/Components/Controls/ThrowPanelMenu.razor b/KoogleApp/Components/Controls/ThrowPanelMenu.razor index d407746..6396924 100644 --- a/KoogleApp/Components/Controls/ThrowPanelMenu.razor +++ b/KoogleApp/Components/Controls/ThrowPanelMenu.razor @@ -1,6 +1,7 @@ @using KoogleApp.Components.Dialogs @using KoogleApp.Model @using KoogleApp.Store.DayFeature +@using KoogleApp.Store.Game.Participants @using KoogleApp.Store.Game.ThrowPanel @using KoogleApp.Store.Game.UndoRedo diff --git a/KoogleApp/Components/Dialogs/StartGameDialog.razor b/KoogleApp/Components/Dialogs/StartGameDialog.razor index 0dba39e..79027eb 100644 --- a/KoogleApp/Components/Dialogs/StartGameDialog.razor +++ b/KoogleApp/Components/Dialogs/StartGameDialog.razor @@ -4,10 +4,15 @@ @using KoogleApp.Store.DayFeature @using KoogleApp.Store.Game.Setup @using KoogleApp.Store.Game.ThrowPanel +@using KoogleApp.Components.Controls +@using KoogleApp.Store.Player +@using Dispatcher = Fluxor.Dispatcher @inject GameTypeService GameTypeService @inject IState SetupState +@inject IState PlayersState @inject IState DayState +@inject IDispatcher Dispatcher @@ -31,6 +36,10 @@

Spieleinstellungen auswählen:

+ + + + } @@ -43,6 +52,9 @@
@code { + public IEnumerable Players { get; set; } + + [CascadingParameter] private IMudDialogInstance MudDialog { get; set; } @@ -52,6 +64,8 @@ { _gameTypes.AddRange(GameTypeService.GetGameTypes()); + Players = PlayersState.Value.Players.Where(p => DayState.Value.PlayerIds.Contains(p.Id)).ToList(); + StateHasChanged(); } } @@ -73,6 +87,8 @@ private void Start() { + Dispatcher.Dispatch(new SetParticipatingPlayersAction(Players.Select(p => p.Id).ToArray())); + // if (!string.IsNullOrEmpty(Description)) { // Snackbar.Add("Favorite added", Severity.Success); diff --git a/KoogleApp/Components/Pages/Game.razor b/KoogleApp/Components/Pages/Game.razor index 3fdfcfc..709fc95 100644 --- a/KoogleApp/Components/Pages/Game.razor +++ b/KoogleApp/Components/Pages/Game.razor @@ -1,5 +1,6 @@ @page "/game" +@using System.Text.Json @using KoogleApp.Model @using KoogleApp.Services @using Microsoft.AspNetCore.Authorization @@ -10,6 +11,7 @@ @using KoogleApp.Model.Framework @using KoogleApp.Store.DayFeature @using KoogleApp.Store.Game +@using KoogleApp.Store.Game.Participants @using KoogleApp.Store.Game.ThrowPanel @using KoogleApp.Store.Game.ThrowTimer @using KoogleApp.Store.Game.UndoRedo @@ -26,6 +28,7 @@ @inject IMyEventAggregator EventAggregator @inject IState ThrowPanelState @inject IState DayState +@inject IState ParticipantsState @inject IDispatcher Dispatcher @inject IDialogService DialogService @@ -38,7 +41,10 @@ { case GameView.Throw: - @* @GetDayStr() *@ + + @GetParticipantsState() + + @if (DayState.Value.Status != DayStatus.Started) { @@ -97,7 +103,7 @@ private bool isAuthenticated; - + protected override void OnInitialized() { base.OnInitialized(); @@ -142,7 +148,7 @@ { await base.OnInitializedAsync(); - + // Beim Laden (auch nach F5) werden die gespeicherten Daten geladen @@ -213,10 +219,10 @@ { EventAggregator.Unsubscribe(this); - // if (hubConnection is not null) - // { - // await hubConnection.DisposeAsync(); - // } + // if (hubConnection is not null) + // { + // await hubConnection.DisposeAsync(); + // } await base.DisposeAsync(); } @@ -251,4 +257,12 @@ // } // } + private string GetParticipantsState() + { + return JsonSerializer.Serialize(ParticipantsState.Value,new JsonSerializerOptions + { + WriteIndented = true + }); + } + } diff --git a/KoogleApp/Games/Training/Setup.razor b/KoogleApp/Games/Training/Setup.razor index 654c12f..9599c84 100644 --- a/KoogleApp/Games/Training/Setup.razor +++ b/KoogleApp/Games/Training/Setup.razor @@ -1,6 +1,7 @@ @using Fluxor @using KoogleApp.Store.Game.Setup @using KoogleApp.Components.Controls +@using KoogleApp.Store.Game.ThrowPanel @using MudBlazor @inject IDispatcher Dispatcher @@ -17,6 +18,9 @@ ValueSelector="@(state => state.ThrowsPerRound)" OnValueChanged="@(value => Dispatcher.Dispatch(new SetThrowsPerRoundAction(value)))"/> + + + @code { } diff --git a/KoogleApp/Model/GameStatus.cs b/KoogleApp/Model/GameStatus.cs index 061b542..b101b42 100644 --- a/KoogleApp/Model/GameStatus.cs +++ b/KoogleApp/Model/GameStatus.cs @@ -1,4 +1,5 @@ -using KoogleApp.Store.Game.ThrowPanel; +using KoogleApp.Store.Game.Participants; +using KoogleApp.Store.Game.ThrowPanel; namespace KoogleApp.Model { @@ -12,8 +13,10 @@ namespace KoogleApp.Model } public class GameStatus - { + { public ThrowPanelState? ThrowPanelState { get; set; } + + public ParticipantsState? ParticipantsState { get; set; } } //public class DataSnapshot diff --git a/KoogleApp/Store/Game/Participants/Actions.cs b/KoogleApp/Store/Game/Participants/Actions.cs new file mode 100644 index 0000000..758a45e --- /dev/null +++ b/KoogleApp/Store/Game/Participants/Actions.cs @@ -0,0 +1,4 @@ +namespace KoogleApp.Store.Game.Participants +{ + +} diff --git a/KoogleApp/Store/Game/Participants/Reducers.cs b/KoogleApp/Store/Game/Participants/Reducers.cs new file mode 100644 index 0000000..5859f1f --- /dev/null +++ b/KoogleApp/Store/Game/Participants/Reducers.cs @@ -0,0 +1,18 @@ +using Fluxor; +using KoogleApp.Store.Game.Setup; + +namespace KoogleApp.Store.Game.Participants +{ + public static class ParticipantsStateReducer + { + [ReducerMethod] + public static ParticipantsState OnSetThrowsPerRoundAction(ParticipantsState state, + SetParticipatingPlayersAction action) + { + return state with + { + PlayerIds = action.PlayerIds + }; + } + } +} \ No newline at end of file diff --git a/KoogleApp/Store/Game/Participants/State.cs b/KoogleApp/Store/Game/Participants/State.cs new file mode 100644 index 0000000..d13885a --- /dev/null +++ b/KoogleApp/Store/Game/Participants/State.cs @@ -0,0 +1,12 @@ +using Fluxor; + +namespace KoogleApp.Store.Game.Participants +{ + [FeatureState] + public record ParticipantsState(int[] PlayerIds, int[] Eliminated) + { + + public ParticipantsState() : this(PlayerIds: [], []) + { } + } +} diff --git a/KoogleApp/Store/Game/Setup/Actions.cs b/KoogleApp/Store/Game/Setup/Actions.cs index 7e2fa5c..04d2cfe 100644 --- a/KoogleApp/Store/Game/Setup/Actions.cs +++ b/KoogleApp/Store/Game/Setup/Actions.cs @@ -5,4 +5,8 @@ namespace KoogleApp.Store.Game.Setup public record SetThrowModeAction(ThrowMode ThrowMode); public record SetThrowsPerRoundAction(int ThrowsPerRound); + + public record SetParticipatingPlayersAction(int[] PlayerIds); + + public record SetParticipantsModeAction(ParticipantsMode ParticipantsMode); } diff --git a/KoogleApp/Store/Game/Setup/Reducer.cs b/KoogleApp/Store/Game/Setup/Reducers.cs similarity index 53% rename from KoogleApp/Store/Game/Setup/Reducer.cs rename to KoogleApp/Store/Game/Setup/Reducers.cs index acf3b2e..8a5fcf9 100644 --- a/KoogleApp/Store/Game/Setup/Reducer.cs +++ b/KoogleApp/Store/Game/Setup/Reducers.cs @@ -21,5 +21,23 @@ namespace KoogleApp.Store.Game.Setup ThrowsPerRound = action.ThrowsPerRound }; } + + [ReducerMethod] + public static SetupState OnSetThrowsPerRoundAction(SetupState state, SetParticipatingPlayersAction action) + { + return state with + { + Players = action.PlayerIds + }; + } + + [ReducerMethod] + public static SetupState OnSetThrowsPerRoundAction(SetupState state, SetParticipantsModeAction action) + { + return state with + { + ParticipantsMode = action.ParticipantsMode + }; + } } } diff --git a/KoogleApp/Store/Game/Setup/State.cs b/KoogleApp/Store/Game/Setup/State.cs index dc7e949..4c74534 100644 --- a/KoogleApp/Store/Game/Setup/State.cs +++ b/KoogleApp/Store/Game/Setup/State.cs @@ -4,9 +4,9 @@ using KoogleApp.Store.Game.ThrowPanel; namespace KoogleApp.Store.Game.Setup { [FeatureState] - public record SetupState(ThrowMode ThrowMode, int ThrowsPerRound, int[] Players) + public record SetupState(ThrowMode ThrowMode, int ThrowsPerRound, int[] Players, ParticipantsMode ParticipantsMode) { - public SetupState() : this(ThrowMode: ThrowMode.Reposition, ThrowsPerRound:3, Players:[]) + public SetupState() : this(ThrowMode: ThrowMode.Reposition, ThrowsPerRound:3, Players:[], ParticipantsMode: ParticipantsMode.FreeToChoose) { } } } diff --git a/KoogleApp/Store/Game/ThrowPanel/Actions.cs b/KoogleApp/Store/Game/ThrowPanel/Actions.cs index 79c1a30..96756a6 100644 --- a/KoogleApp/Store/Game/ThrowPanel/Actions.cs +++ b/KoogleApp/Store/Game/ThrowPanel/Actions.cs @@ -1,4 +1,5 @@ using KoogleApp.Model; +using KoogleApp.Store.Game.Participants; namespace KoogleApp.Store.Game.ThrowPanel { @@ -22,17 +23,21 @@ namespace KoogleApp.Store.Game.ThrowPanel public record SaveThrowPanelStateAction(ThrowPanelState State); - public record ThrowPanelStateChangedAction(ThrowPanelState State, bool SaveToDb); + public record ThrowPanelStateChangedAction(ThrowPanelState State, bool SaveToDb, ParticipantsState? ParticipantsState); - public record TriggerNewThrowPanelStateChangedAction(bool SaveToDb); + public record TriggerNewThrowPanelStateChangedAction(bool SaveToDb, ParticipantsState? ParticipantsState); public record BroadcastThrowPanelStateAction(ThrowPanelState State); - public record ThrowAction(bool LeftSink, bool RightSink); + public record ThrowAction(bool LeftSink, bool RightSink, ParticipantsState ParticipantsState); public record ThrowUpdateAction(bool LeftSink, bool RightSink); public record AfterUndoRedoAction(ThrowPanelState State); - public record EnsureBeforeThrowStatusAction(); + public record EnsureBeforeThrowStatusAction(ParticipantsState ParticipantsState); + + + public record GameLogicAction(ThrowPanelState BeforeThrowState, ParticipantsState? BeforeParticipantsState, ThrowPanelState AfterThrowState, ParticipantsState AfterParticipantsState); + } diff --git a/KoogleApp/Store/Game/ThrowPanel/Effects.cs b/KoogleApp/Store/Game/ThrowPanel/Effects.cs index d7d71b6..1d4a250 100644 --- a/KoogleApp/Store/Game/ThrowPanel/Effects.cs +++ b/KoogleApp/Store/Game/ThrowPanel/Effects.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Components.Authorization; using Microsoft.Win32.SafeHandles; using System; using System.Text.Json; +using KoogleApp.Store.Game.Participants; namespace KoogleApp.Store.Game.ThrowPanel { @@ -17,7 +18,7 @@ namespace KoogleApp.Store.Game.ThrowPanel { private readonly ILogger _logger; private readonly HubConnectionService _sharedHubService; - private readonly IState _state; + private readonly IState _throwPanelState; private readonly SessionStorage _sessionStorage; private readonly string _dataFilePath = "ThrowPanelState.json"; private readonly AuthenticationStateProvider _authenticationStateProvider; @@ -29,14 +30,14 @@ namespace KoogleApp.Store.Game.ThrowPanel IMyEventAggregator eventAggregator, ILogger logger, HubConnectionService sharedHubService, - IState state, + IState throwPanelState, AuthenticationStateProvider authenticationStateProvider, IGameStatusDataService dataService, SessionStorage sessionStorage) { _logger = logger; _sharedHubService = sharedHubService; - _state = state; + _throwPanelState = throwPanelState; _sessionStorage = sessionStorage; _dataService = dataService; _authenticationStateProvider = authenticationStateProvider; @@ -55,43 +56,49 @@ namespace KoogleApp.Store.Game.ThrowPanel if (startStopAction.StartParams != null) // start action { var username = await GetUsername(); - _dataService.Initialize(new GameStatus() { ThrowPanelState = _state.Value }, username); + _dataService.Initialize(new GameStatus() + { + ThrowPanelState = _throwPanelState.Value, + }, username); } else // stop action { var username = await GetUsername(); - await _dataService.SaveToDatabaseAndReset(new GameStatus { ThrowPanelState = _state.Value with { ThrowPanelStateStatus = ThrowPanelStateStatus.GameEnd } }, username); + await _dataService.SaveToDatabaseAndReset(new GameStatus + { + ThrowPanelState = _throwPanelState.Value with { ThrowPanelStateStatus = ThrowPanelStateStatus.GameEnd }, + }, username); dispatcher.Dispatch(new UpdateUndoRedoStateAction()); } - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, false, null)); } [EffectMethod] public Task HandleToggleAllPinsAction(ToggleAllPinsAction stopAction, IDispatcher dispatcher) { - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, false, null)); return Task.CompletedTask; } [EffectMethod] public Task HandleTogglePinValueAction(TogglePinValueAction stopAction, IDispatcher dispatcher) { - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, false, null)); return Task.CompletedTask; } [EffectMethod] public Task HandleUpdatePinStateByNumberAction(UpdatePinStateByNumberAction stopAction, IDispatcher dispatcher) { - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, false, null)); return Task.CompletedTask; } [EffectMethod] public Task HandleToggleBellAction(ToggleBellAction stopAction, IDispatcher dispatcher) { - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, false, null)); return Task.CompletedTask; } @@ -101,7 +108,7 @@ namespace KoogleApp.Store.Game.ThrowPanel [EffectMethod] public async Task HandleEnsureBeforeThrowStatusAction(EnsureBeforeThrowStatusAction throwAction, IDispatcher dispatcher) { - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, true)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, true, throwAction.ParticipantsState)); } [EffectMethod] @@ -109,15 +116,19 @@ namespace KoogleApp.Store.Game.ThrowPanel { await ShowBoardForSeconds(dispatcher); - + var beforeStates = _dataService.GetCurrentData(); // change ThrowStatus and save - here we need to save the old state, before it is changed by ThrowUpdateAction, so that undo/redo works correctly - dispatcher.Dispatch(new EnsureBeforeThrowStatusAction()); + dispatcher.Dispatch(new EnsureBeforeThrowStatusAction(throwAction.ParticipantsState)); // perform throw dispatcher.Dispatch(new ThrowUpdateAction(throwAction.LeftSink, throwAction.RightSink)); + var afterState = _throwPanelState.Value; + + dispatcher.Dispatch(new GameLogicAction(beforeStates.Status.ThrowPanelState, beforeStates.Status.ParticipantsState, afterState, throwAction.ParticipantsState)); + // save again - save the new state after the throw - dispatcher.Dispatch(new TriggerNewThrowPanelStateChangedAction(true)); // this will trigger ThrowPanelStateChangedAction with the new state (not current _state.Value) + dispatcher.Dispatch(new TriggerNewThrowPanelStateChangedAction(true, throwAction.ParticipantsState)); // this will trigger ThrowPanelStateChangedAction with the new state (not current _throwPanelState.Value) } private async Task ShowBoardForSeconds(IDispatcher dispatcher) @@ -130,7 +141,7 @@ namespace KoogleApp.Store.Game.ThrowPanel public Task HandleTriggerNewThrowPanelStateChangedAction(TriggerNewThrowPanelStateChangedAction action, IDispatcher dispatcher) { - dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, action.SaveToDb)); + dispatcher.Dispatch(new ThrowPanelStateChangedAction(_throwPanelState.Value, action.SaveToDb, action.ParticipantsState)); return Task.CompletedTask; } @@ -161,7 +172,11 @@ namespace KoogleApp.Store.Game.ThrowPanel if (action.SaveToDb) { var username = await GetUsername(); - _dataService.UpdateData(new GameStatus{ ThrowPanelState = action.State}, username); + _dataService.UpdateData(new GameStatus + { + ThrowPanelState = action.State, + ParticipantsState = action.ParticipantsState + }, username); // here we need to invalidate _dataFilePath and _sessionStorage, because with a new throw, state data should come from dataservice await _sessionStorage.SetThrowPanelStateAsync(null); diff --git a/KoogleApp/Store/Game/ThrowPanel/State.cs b/KoogleApp/Store/Game/ThrowPanel/State.cs index 3672622..b144f1e 100644 --- a/KoogleApp/Store/Game/ThrowPanel/State.cs +++ b/KoogleApp/Store/Game/ThrowPanel/State.cs @@ -13,6 +13,13 @@ namespace KoogleApp.Store.Game.ThrowPanel Decrease // Abräumen } + public enum ParticipantsMode + { + GameLogic, + FreeToChoose, + Random + } + public enum ThrowPanelStateStatus { Undefined, diff --git a/KoogleApp/ThrowPanelState.json b/KoogleApp/ThrowPanelState.json index 6e3b3f4..8d785ab 100644 --- a/KoogleApp/ThrowPanelState.json +++ b/KoogleApp/ThrowPanelState.json @@ -1,5 +1,5 @@ { - "IsStated": false, + "IsStated": true, "BellValue": false, "Pin1State": 0, "Pin2State": 0, @@ -13,7 +13,7 @@ "ThrowsPerRound": 3, "ThrowCounterPerRound": 1, "ThrowMode": 0, - "ThrowPanelStateStatus": 4, + "ThrowPanelStateStatus": 1, "ThrowCounter": 0, - "DayId": 0 + "DayId": 34 } \ No newline at end of file