fix throwhandle:
Zusammenfassung der Fixes:
1. Fix 1 (HandlePinClick und HandleNumberClick): _hasModifiedPins = true wird jetzt VOR dem Dispatch gesetzt, um zu verhindern, dass OnGameStateChanged den Before-State während der Pin-Modifikation überschreibt.
2. Fix 2 (ConfirmThrow): Nach dem Dispatch wird explizit CaptureBeforeThrowState() aufgerufen. Das ist der wichtigste Fix:
- Nach RecordThrowAction Dispatch sind alle Reducer/Effects durchgelaufen
- Der State ist bereits mit den neuen Pin-Zuständen aktualisiert
- _beforeThrowState wird mit dem NEUEN Zustand für den nächsten Wurf erfasst
Vorher wurde _beforeThrowState nie nach einem Wurf aktualisiert (weil _hasModifiedPins zum falschen Zeitpunkt gesetzt war), sodass beim zweiten Wurf der stale Before-State verwendet wurde.
This commit is contained in:
parent
e50b13f092
commit
ea08ff9a5b
|
|
@ -208,8 +208,8 @@
|
|||
|
||||
var newStatus = currentStatus == PinStatus.Standing ? PinStatus.Fallen : PinStatus.Standing;
|
||||
|
||||
Dispatcher.Dispatch(new SetPinStatusAction(pinNumber, newStatus));
|
||||
_hasModifiedPins = true;
|
||||
Dispatcher.Dispatch(new SetPinStatusAction(pinNumber, newStatus));
|
||||
_selectedNumber = null;
|
||||
}
|
||||
|
||||
|
|
@ -224,15 +224,16 @@
|
|||
newState = newState.SetPin(i, status);
|
||||
}
|
||||
|
||||
// Set flag BEFORE dispatching to prevent CaptureBeforeThrowState in StateChanged
|
||||
_hasModifiedPins = true;
|
||||
_selectedNumber = number;
|
||||
|
||||
// Dispatch individual pin updates to match the new state
|
||||
for (int i = 1; i <= 9; i++)
|
||||
{
|
||||
var targetStatus = i <= number ? PinStatus.Fallen : PinStatus.Standing;
|
||||
Dispatcher.Dispatch(new SetPinStatusAction(i, targetStatus));
|
||||
}
|
||||
|
||||
_selectedNumber = number;
|
||||
_hasModifiedPins = true;
|
||||
}
|
||||
|
||||
private void HandleBellClick()
|
||||
|
|
@ -276,9 +277,11 @@
|
|||
// Dispatch record throw action - game logic will handle pin reset and player rotation
|
||||
Dispatcher.Dispatch(new RecordThrowAction(beforeState, currentThrowPanel, isGutter, isLeftGutter));
|
||||
|
||||
// Reset local state
|
||||
// Reset local state and capture new before-state for next throw
|
||||
// (Dispatch is synchronous, so state is already updated with pin reset)
|
||||
_selectedNumber = null;
|
||||
_hasModifiedPins = false;
|
||||
CaptureBeforeThrowState();
|
||||
|
||||
// Notify parent (for timer/tab switching)
|
||||
await OnThrowCompleted.InvokeAsync(result);
|
||||
|
|
|
|||
Loading…
Reference in New Issue