fix decrease mode

This commit is contained in:
beo3000 2025-12-27 14:01:32 +01:00
parent aa8cf4d83a
commit 061ba4dbdb
2 changed files with 41 additions and 6 deletions

View File

@ -171,6 +171,13 @@
private void HandlePinClick(int pinNumber)
{
var currentStatus = GetPinStatus(pinNumber);
// In Decrease mode, fallen pins cannot be reset to standing
if (GameState.Value.ThrowPanel.ThrowMode == ThrowMode.Decrease && currentStatus == PinStatus.Fallen)
{
return;
}
var newStatus = currentStatus == PinStatus.Standing ? PinStatus.Fallen : PinStatus.Standing;
Dispatcher.Dispatch(new SetPinStatusAction(pinNumber, newStatus));
@ -246,18 +253,25 @@
if (newThrowPanel.ThrowCounterPerRound >= newThrowPanel.ThrowsPerRound)
{
newThrowPanel = newThrowPanel with { ThrowCounterPerRound = 0 };
// Reset pins if in Reposition mode
if (newThrowPanel.ThrowMode == ThrowMode.Reposition)
{
newThrowPanel = newThrowPanel.ResetPins();
}
// Reset all pins at end of round (both modes)
newThrowPanel = newThrowPanel.ResetPins();
}
else if (newThrowPanel.ThrowMode == ThrowMode.Reposition)
{
// In Reposition mode, always reset pins after each throw
newThrowPanel = newThrowPanel.ResetPins();
}
else if (newThrowPanel.ThrowMode == ThrowMode.Decrease)
{
// In Decrease mode: Mark fallen pins as disabled (not available for next throw)
newThrowPanel = newThrowPanel.MarkFallenAsDisabled();
// If all pins are down, reset all pins for a fresh set
if (newThrowPanel.AllPinsDown())
{
newThrowPanel = newThrowPanel.ResetPins();
}
}
// Dispatch record throw action
Dispatcher.Dispatch(new RecordThrowAction(newThrowPanel, GameState.Value.GameModel));

View File

@ -257,6 +257,27 @@ public record ThrowPanelState
9 => this with { Pin9 = status },
_ => this
};
/// <summary>
/// Marks all fallen pins as disabled (for Decrease mode).
/// </summary>
public ThrowPanelState MarkFallenAsDisabled() => this with
{
Pin1 = Pin1 == PinStatus.Fallen ? PinStatus.Disabled : Pin1,
Pin2 = Pin2 == PinStatus.Fallen ? PinStatus.Disabled : Pin2,
Pin3 = Pin3 == PinStatus.Fallen ? PinStatus.Disabled : Pin3,
Pin4 = Pin4 == PinStatus.Fallen ? PinStatus.Disabled : Pin4,
Pin5 = Pin5 == PinStatus.Fallen ? PinStatus.Disabled : Pin5,
Pin6 = Pin6 == PinStatus.Fallen ? PinStatus.Disabled : Pin6,
Pin7 = Pin7 == PinStatus.Fallen ? PinStatus.Disabled : Pin7,
Pin8 = Pin8 == PinStatus.Fallen ? PinStatus.Disabled : Pin8,
Pin9 = Pin9 == PinStatus.Fallen ? PinStatus.Disabled : Pin9
};
/// <summary>
/// Checks if all pins are knocked down (fallen or disabled).
/// </summary>
public bool AllPinsDown() => GetPins().All(p => p != PinStatus.Standing);
}
/// <summary>