tschesky e27bb7bfb6 Refactor interactions, introduce template-method lifecycle management, work on save-load system (#51)
# 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`

Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com>
Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com>
Reviewed-on: #51
2025-11-07 15:38:31 +00:00
2025-11-06 15:33:30 +01:00
2025-08-06 17:00:32 +02:00

Apple Hills

Apple Hills is a Unity-based adventure game featuring interactive puzzle mechanics, dialogue systems, and item interactions.

Project Overview

Apple Hills provides a unique gaming experience with:

  • Node-based dialogue system for interactive NPC conversations
  • Puzzle mechanics with condition-based progression
  • Item pickup, combination, and interaction systems
  • Custom Universal Render Pipeline setup

Repository Structure

AppleHills/
├── Assets/               # Unity asset files
│   ├── Art/              # Visual assets, models, textures
│   ├── Dialogue/         # Dialogue system and dialogue data
│   ├── Scripts/          # C# code for game systems
│   │   ├── Core/         # Core managers and services
│   │   ├── Dialogue/     # Dialogue system implementation
│   │   ├── Input/        # Input handling systems
│   │   ├── Interactions/ # Object interaction systems
│   │   ├── Movement/     # Character movement controllers
│   │   ├── PuzzleS/      # Puzzle mechanics and systems
│   │   └── UI/           # User interface components
│   ├── Scenes/           # Game scenes and levels
│   ├── Prefabs/          # Reusable game objects
│   └── ...               # Other asset folders
├── Packages/             # Unity package dependencies
├── ProjectSettings/      # Unity project settings
└── docs/                 # Project documentation
    ├── media/            # Images and other media for documentation
    └── dialogue_readme.md  # Detailed documentation about the dialogue system

Code Structure

Scripts Organization

The game's codebase is organized into several key modules:

Module Purpose
Animation Animation controllers and state machines
Bootstrap Game initialization and scene loading
Core Core game managers and services
Dialogue Dialogue tree implementation and text handling
Input Player input processing and mapping
Interactions Interactive object behaviors and triggers
Movement Character controllers and navigation
Pooling Object pooling for performance optimization
PuzzleS Puzzle mechanics, conditions, and validators
Settings Configurable game parameters and constants
UI User interface elements and controllers
Utilities Helper classes and extension methods

Core Systems Highlight

The Assets/Scripts/Core directory contains critical managers that orchestrate the game's systems:

Key Managers

  • GameManager: Central hub managing game state, scene transitions, and system coordination
  • ItemManager: Handles inventory system, item pickup, combination, and usage logic
  • SceneManagerService: Controls scene loading, unloading, and transitions

Settings Framework

The Core/Settings system provides a robust configuration framework:

  • ServiceLocator: Dependency injection system for accessing game services
  • SettingsProvider: Central access point for game configuration values
  • BaseSettings/BaseDeveloperSettings: Foundation for creating configurable parameters
  • InteractionSettings: Configuration for player-object interactions
  • MovementModeTypes: Movement parameters for different locomotion modes

Documentation

Detailed documentation about specific systems can be found in the docs folder:

Development

The project is structured using standard Unity practices. Key components:

  • Universal Render Pipeline for consistent visuals
  • Input System for configurable controls
  • Addressable Assets for asset management
Description
Main production repository for the AppleHills game
Readme 1 GiB
Languages
C# 100%