Fix puzzle lockout
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -72,6 +72,9 @@ namespace PuzzleS
|
||||
// Registration for ObjectiveStepBehaviour
|
||||
private Dictionary<PuzzleStepSO, ObjectiveStepBehaviour> _stepBehaviours = new Dictionary<PuzzleStepSO, ObjectiveStepBehaviour>();
|
||||
|
||||
// Track pending unlocks for steps that were unlocked before their behavior registered
|
||||
private HashSet<string> _pendingUnlocks = new HashSet<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if this participant has already had its state restored.
|
||||
/// Used by SaveLoadManager to prevent double-restoration.
|
||||
@@ -333,8 +336,15 @@ namespace PuzzleS
|
||||
_stepBehaviours.Add(behaviour.stepData, behaviour);
|
||||
Logging.Debug($"[Puzzles] Registered step: {behaviour.stepData.stepId} on {behaviour.gameObject.name}");
|
||||
|
||||
// Use pending registration pattern for save/load timing independence
|
||||
if (_isDataRestored)
|
||||
// Check if this step has a pending unlock
|
||||
if (_pendingUnlocks.Contains(behaviour.stepData.stepId))
|
||||
{
|
||||
// Step was unlocked before behavior registered - unlock it now!
|
||||
behaviour.UnlockStep();
|
||||
_pendingUnlocks.Remove(behaviour.stepData.stepId);
|
||||
Logging.Debug($"[Puzzles] Fulfilled pending unlock for step: {behaviour.stepData.stepId}");
|
||||
}
|
||||
else if (_isDataRestored)
|
||||
{
|
||||
// Data already restored - update immediately
|
||||
UpdateStepState(behaviour);
|
||||
@@ -482,9 +492,16 @@ namespace PuzzleS
|
||||
|
||||
if (_stepBehaviours.TryGetValue(step, out var behaviour))
|
||||
{
|
||||
// Behavior exists - unlock it immediately
|
||||
behaviour.UnlockStep();
|
||||
}
|
||||
Logging.Debug($"[Puzzles] Step unlocked: {step.stepId}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Behavior hasn't registered yet - add to pending unlocks
|
||||
_pendingUnlocks.Add(step.stepId);
|
||||
Logging.Debug($"[Puzzles] Step unlocked but behavior not registered yet, added to pending: {step.stepId}");
|
||||
}
|
||||
|
||||
// Broadcast unlock
|
||||
OnStepUnlocked?.Invoke(step);
|
||||
|
||||
Reference in New Issue
Block a user