Commit Graph

22 Commits

Author SHA1 Message Date
Michal Pikulski
4dfe6202fd Update logging calls to new system 2025-11-11 09:00:05 +01:00
Michal Pikulski
a049c6a750 Update methods to be internal, remove invocation bloat 2025-11-10 21:59:47 +01:00
Michal Pikulski
01caca1878 Add docs and clear the zero-width-backspace-formatting 2025-11-10 15:56:30 +01:00
Michal Pikulski
7565b189b9 Add distinction between managed awake and managed start 2025-11-10 15:52:53 +01:00
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
Michal Pikulski
43779c560e Cleanup compile warnings, cleanup logs, spruce up level selection menu 2025-10-28 14:31:17 +01:00
Michal Pikulski
dad1f6498d Pause timescale when game is paused 2025-10-27 15:21:23 +01:00
5a85a602bd Revamp game pausing and input handling. Fix minigame tutorial and end sequence. (#39)
- Revamp pausing and centralize management in GameManager
- Switch Pause implementation to be counter-based to solve corner case of multiple pause requests
- Remove duplicated Pause logic from other components
- Add pausing when browsing the card album
- Fully deliver the exclusive UI implementation
- Spruce up the MiniGame tutorial with correct pausing, hiding other UI
- Correctly unpause after showing tutorial
- Fix minigame ending sequence. The cinematic correctly plays only once now
- Replaying the minigame works

Co-authored-by: Michal Adam Pikulski <michal@foolhardyhorizons.com>
Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com>
Reviewed-on: #39
2025-10-24 11:09:32 +00:00
Michal Pikulski
50448c5bd3 Revamp the prompt system, the bootstrapper system, the starting cinematic 2025-10-16 19:43:24 +02:00
Michal Pikulski
e8180b21bf Strip debug logging from the game, fix screen weirdness 2025-10-14 15:54:11 +02:00
Michal Pikulski
0c5546efd2 Add backbone for card creation and implement Camera minigame mechanics 2025-10-10 14:49:42 +02:00
Michal Pikulski
0e17516df7 Add a pausable interface and make minigameobjecs pausable 2025-10-08 12:36:08 +02:00
Michal Pikulski
f845673eca Remove dependencies on legacy variables in GameManager.Instance 2025-10-07 10:44:26 +02:00
e713a580a9 puzzlestep_indicators (#14)
Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com>
Reviewed-on: #14
2025-10-02 05:42:17 +00:00
63cb3f1a8c Revamp the settings system (#7)
- A Settings Provider system to utilize addressables for loading settings at runtime
- An editor UI for easy modifications of the settings objects
- A split out developer settings functionality to keep gameplay and nitty-gritty details separately
- Most settings migrated out of game objects and into the new system
- An additional Editor utility for fetching the settings at editor runtime, for gizmos, visualization etc

Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com>
Co-authored-by: AlexanderT <alexander@foolhardyhorizons.com>
Reviewed-on: #7
2025-09-24 13:33:43 +00:00
Michal Pikulski
8cffe0b161 Fix build issues due to comparison operators 2025-09-12 16:47:45 +02:00
Michal Pikulski
e1ff13db30 Rework interactables into a flatter hierarchy, reenable puzzles as well 2025-09-11 14:07:57 +02:00
Michal Pikulski
3a40d1a151 Interactables fully working now 2025-09-11 14:07:57 +02:00
Michal Pikulski
f4a183d524 [Interactions] Make combinable object pickup-able and swappable 2025-09-08 14:56:59 +02:00
Michal Pikulski
749d72904e Add main menu scene, setup framework for orientation switching 2025-09-08 12:44:35 +02:00
Michal Pikulski
3b0988243e [Misc] Singleton pattern improvements, get rid of warnings and errors 2025-09-08 08:45:13 +02:00
Michal Pikulski
d3c6b838b4 Big script cleanup. Remove the examples from Ropes' external package 2025-09-06 22:29:55 +02:00