diff --git a/Assets/Scripts/PuzzleS/BirdGameStats.cs b/Assets/Scripts/PuzzleS/BirdGameStats.cs index 36af2d90..4dff5880 100644 --- a/Assets/Scripts/PuzzleS/BirdGameStats.cs +++ b/Assets/Scripts/PuzzleS/BirdGameStats.cs @@ -1,19 +1,73 @@ +using System; +using Core.Lifecycle; using UnityEngine; -public class BirdGameStats : MonoBehaviour +namespace PuzzleS { - public int birdsFoundInLevel; - - // Start is called once before the first execution of Update after the MonoBehaviour is created - void Start() + /// + /// Tracks bird discovery progress in the bird finding minigame. + /// Saves scene-specific progress using the ManagedBehaviour lifecycle system. + /// + public class BirdGameStats : ManagedBehaviour { - + public int birdsFoundInLevel; + + // Save system configuration + public override bool AutoRegisterForSave => true; + + protected override void OnManagedAwake() + { + // Initialize after all managers are ready + } + + public void BirdFound() + { + birdsFoundInLevel += 1; + } + + #region Save/Load Lifecycle Hooks + + protected override string OnSceneSaveRequested() + { + // Save scene-specific progress + var state = new BirdGameState + { + birdsFoundInLevel = this.birdsFoundInLevel + }; + return JsonUtility.ToJson(state); + } + + protected override void OnSceneRestoreRequested(string serializedData) + { + if (string.IsNullOrEmpty(serializedData)) + { + // No saved data, keep default values + return; + } + + try + { + var state = JsonUtility.FromJson(serializedData); + if (state != null) + { + birdsFoundInLevel = state.birdsFoundInLevel; + } + } + catch (Exception ex) + { + Debug.LogWarning($"[BirdGameStats] Failed to restore state: {ex.Message}"); + } + } + + #endregion } - public void BirdFound() + /// + /// Serializable state for bird game progress + /// + [Serializable] + public class BirdGameState { - birdsFoundInLevel += 1; + public int birdsFoundInLevel; } - - } diff --git a/Assets/Scripts/Sound/BushAudioController.cs b/Assets/Scripts/Sound/BushAudioController.cs index 3b4ddc5a..a924b2de 100644 --- a/Assets/Scripts/Sound/BushAudioController.cs +++ b/Assets/Scripts/Sound/BushAudioController.cs @@ -6,6 +6,7 @@ using UnityEngine; using UnityEngine.Audio; using Core; using Core.Lifecycle; +using PuzzleS; public class BushAudioController : ManagedBehaviour {