Refactor interactions, introduce template-method lifecycle management, work on save-load system #51

Merged
tschesky merged 14 commits from work_on_interactions_rebased into main 2025-11-07 15:38:32 +00:00
Owner

Lifecycle Management & Save System Revamp

Overview

Complete overhaul of game lifecycle management, interactable system, and save/load architecture. Introduces centralized ManagedBehaviour base class for consistent initialization ordering and lifecycle hooks across all systems.

Core Architecture

New Lifecycle System

  • LifecycleManager: Centralized coordinator for all managed objects
  • ManagedBehaviour: Base class replacing ad-hoc initialization patterns
    • OnManagedAwake(): Priority-based initialization (0-100, lower = earlier)
    • OnSceneReady(): Scene-specific setup after managers ready
    • Replaces BootCompletionService (deleted)
  • Priority groups: Infrastructure (0-20) → Game Systems (30-50) → Data (60-80) → UI/Gameplay (90-100)
  • Editor support: EditorLifecycleBootstrap ensures lifecycle works in editor mode

Unified SaveID System

  • Consistent format: {ParentName}_{ComponentType}
  • Auto-registration via AutoRegisterForSave = true
  • New DebugSaveIds editor tool for inspection

Save/Load Improvements

Enhanced State Management

  • Extended SaveLoadData: Unlocked minigames, card collection states, combination items, slot occupancy
  • Async loading: ApplyCardCollectionState() waits for card definitions before restoring
  • New SaveablePlayableDirector: Timeline sequences save/restore playback state
  • Fixed race conditions: Proper initialization ordering prevents data corruption

Interactable & Pickup System

  • Migrated to OnManagedAwake() for consistent initialization
  • Template method pattern for state restoration (RestoreInteractionState())
  • Fixed combination item save/load bugs (items in slots vs. follower hand)
  • Dynamic spawning support for combined items on load
  • Breaking: Interactable.Awake() now sealed, use OnManagedAwake() instead

UI System Changes

  • AlbumViewPage and BoosterNotificationDot: Migrated to ManagedBehaviour
  • Fixed menu persistence bug: Menus no longer reappear after scene transitions
  • Pause Menu: Now reacts to all scene loads (not just first scene)
  • Orientation Enforcer: Enforces per-scene via SceneManagementService
  • Loading Screen: Integrated with new lifecycle

⚠️ Breaking Changes

  1. BootCompletionService removed → Use ManagedBehaviour.OnManagedAwake() with priority
  2. Interactable.Awake() sealed → Override OnManagedAwake() instead
  3. SaveID format changed → Now {ParentName}_{ComponentType} consistently
  4. MonoBehaviours needing init ordering → Must inherit from ManagedBehaviour
# Lifecycle Management & Save System Revamp ## Overview Complete overhaul of game lifecycle management, interactable system, and save/load architecture. Introduces centralized `ManagedBehaviour` base class for consistent initialization ordering and lifecycle hooks across all systems. ## Core Architecture ### New Lifecycle System - **`LifecycleManager`**: Centralized coordinator for all managed objects - **`ManagedBehaviour`**: Base class replacing ad-hoc initialization patterns - `OnManagedAwake()`: Priority-based initialization (0-100, lower = earlier) - `OnSceneReady()`: Scene-specific setup after managers ready - Replaces `BootCompletionService` (deleted) - **Priority groups**: Infrastructure (0-20) → Game Systems (30-50) → Data (60-80) → UI/Gameplay (90-100) - **Editor support**: `EditorLifecycleBootstrap` ensures lifecycle works in editor mode ### Unified SaveID System - Consistent format: `{ParentName}_{ComponentType}` - Auto-registration via `AutoRegisterForSave = true` - New `DebugSaveIds` editor tool for inspection ## Save/Load Improvements ### Enhanced State Management - **Extended SaveLoadData**: Unlocked minigames, card collection states, combination items, slot occupancy - **Async loading**: `ApplyCardCollectionState()` waits for card definitions before restoring - **New `SaveablePlayableDirector`**: Timeline sequences save/restore playback state - **Fixed race conditions**: Proper initialization ordering prevents data corruption ## Interactable & Pickup System - Migrated to `OnManagedAwake()` for consistent initialization - Template method pattern for state restoration (`RestoreInteractionState()`) - Fixed combination item save/load bugs (items in slots vs. follower hand) - Dynamic spawning support for combined items on load - **Breaking**: `Interactable.Awake()` now sealed, use `OnManagedAwake()` instead ## UI System Changes - **AlbumViewPage** and **BoosterNotificationDot**: Migrated to `ManagedBehaviour` - **Fixed menu persistence bug**: Menus no longer reappear after scene transitions - **Pause Menu**: Now reacts to all scene loads (not just first scene) - **Orientation Enforcer**: Enforces per-scene via `SceneManagementService` - **Loading Screen**: Integrated with new lifecycle ## ⚠️ Breaking Changes 1. **`BootCompletionService` removed** → Use `ManagedBehaviour.OnManagedAwake()` with priority 2. **`Interactable.Awake()` sealed** → Override `OnManagedAwake()` instead 3. **SaveID format changed** → Now `{ParentName}_{ComponentType}` consistently 4. **MonoBehaviours needing init ordering** → Must inherit from `ManagedBehaviour`
tschesky added 13 commits 2025-11-07 14:36:04 +00:00
tschesky added 1 commit 2025-11-07 15:37:34 +00:00
tschesky force-pushed work_on_interactions_rebased from 5c0f4f8f6d to ba2c1f5310 2025-11-07 15:38:17 +00:00 Compare
tschesky merged commit e27bb7bfb6 into main 2025-11-07 15:38:32 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tschesky/AppleHillsProduction#51
No description provided.