fix gutter

This commit is contained in:
beo3000 2025-12-27 16:59:07 +01:00
parent dc1fad14c8
commit 48b96cec0c
4 changed files with 12 additions and 5 deletions

View File

@ -147,10 +147,15 @@ public static class GameProgressExtensions
/// <summary>
/// Creates after-throw state from before and after snapshots.
/// </summary>
/// <param name="afterThrow">Snapshot after the throw.</param>
/// <param name="beforeThrow">Snapshot before the throw.</param>
/// <param name="playerId">Current player ID.</param>
/// <param name="isGutter">Whether the throw went into the gutter (from user input).</param>
public static AfterThrowState CreateAfterThrowState(
this ThrowPanelSnapshot afterThrow,
ThrowPanelSnapshot beforeThrow,
Guid playerId)
Guid playerId,
bool isGutter = false)
{
var pinsKnockedBefore = beforeThrow.PinCount();
var pinsKnockedAfter = afterThrow.PinCount();
@ -162,7 +167,7 @@ public static class GameProgressExtensions
PinsKnocked: pinsKnocked,
IsCircle: afterThrow.IsCircle(),
IsStrike: afterThrow.IsStrike(),
IsGutter: pinsKnocked == 0
IsGutter: isGutter
);
}
}

View File

@ -276,7 +276,7 @@
var beforeState = _beforeThrowState ?? currentThrowPanel;
// Dispatch record throw action - game logic will handle pin reset and player rotation
Dispatcher.Dispatch(new RecordThrowAction(beforeState, currentThrowPanel));
Dispatcher.Dispatch(new RecordThrowAction(beforeState, currentThrowPanel, isGutter, isLeftGutter));
// Reset local state
_selectedNumber = null;

View File

@ -106,7 +106,9 @@ public record LoadCompletedGamesFailureAction(string Error);
/// </summary>
/// <param name="BeforeThrowState">State before the throw was made.</param>
/// <param name="AfterThrowState">State after the throw was made.</param>
public record RecordThrowAction(ThrowPanelState BeforeThrowState, ThrowPanelState AfterThrowState);
/// <param name="IsGutter">Whether the throw went into the gutter.</param>
/// <param name="IsLeftGutter">Whether it was the left gutter.</param>
public record RecordThrowAction(ThrowPanelState BeforeThrowState, ThrowPanelState AfterThrowState, bool IsGutter = false, bool IsLeftGutter = false);
/// <summary>
/// Action dispatched after ProcessThrow completes with game logic result.

View File

@ -310,7 +310,7 @@ public class GameEffects
// Create AfterThrowState for game logic with updated counters
var beforeSnapshot = CreateThrowPanelSnapshot(action.BeforeThrowState);
var afterSnapshot = CreateThrowPanelSnapshot(newThrowPanel);
var afterThrowState = afterSnapshot.CreateAfterThrowState(beforeSnapshot, currentPlayerId.Value);
var afterThrowState = afterSnapshot.CreateAfterThrowState(beforeSnapshot, currentPlayerId.Value, action.IsGutter);
// Default values
bool shouldRotatePlayer = false;