114 lines
4.3 KiB
Markdown
114 lines
4.3 KiB
Markdown
|
|
# AppleHills - Interactables Refactor & Save System Integration
|
||
|
|
|
||
|
|
## 🎯 Overview
|
||
|
|
|
||
|
|
Major refactoring of the interaction system and full integration of save/load functionality across the game. This includes architecture improvements, asset cleanup, and comprehensive state persistence.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 Core Systems
|
||
|
|
|
||
|
|
### Interactables Architecture Refactor
|
||
|
|
- **Converted composition to inheritance** - Moved from component-based to class-based interactables
|
||
|
|
- **Created `InteractableBase`** abstract base class with common functionality
|
||
|
|
- **Specialized child classes**: `Pickup`, `ItemSlot`, `LevelSwitch`, `MinigameSwitch`, `CombinationItem`, `OneClickInteraction`
|
||
|
|
- **Unified interaction flow** - All interactables now share consistent behavior patterns
|
||
|
|
- **Custom inspector** - New collapsible inspector UI for better editor experience
|
||
|
|
|
||
|
|
📚 **Documentation**: See `docs/Interaction_System_Refactoring_Analysis.md`
|
||
|
|
|
||
|
|
### Save/Load System Integration
|
||
|
|
- **Implemented `ISaveParticipant` interface** for all stateful objects
|
||
|
|
- **`SaveableInteractable` base class** - Abstract base for all save-enabled interactables
|
||
|
|
- **Bilateral restoration pattern** - Elegant timing-independent state restoration
|
||
|
|
- **Integrated systems**:
|
||
|
|
- ✅ Interactables (Pickups, ItemSlots, Switches)
|
||
|
|
- ✅ Player & Follower positions and held items
|
||
|
|
- ✅ Puzzle system state (completed/unlocked steps)
|
||
|
|
- ✅ State machines (custom `SaveableStateMachine` wrapper)
|
||
|
|
- ✅ Card collection progress
|
||
|
|
|
||
|
|
📚 **Documentation**:
|
||
|
|
- `docs/SaveLoadSystem_Implementation_Complete.md`
|
||
|
|
- `docs/bilateral_restoration_implementation.md`
|
||
|
|
- `docs/puzzle_save_load_proposal.md`
|
||
|
|
- `docs/state_machine_save_load_FINAL_SUMMARY.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧹 Asset & Scene Cleanup
|
||
|
|
|
||
|
|
### Prefab Organization
|
||
|
|
- **Removed placeholder files** from Characters, Levels, UI, and Minigames folders
|
||
|
|
- **Consolidated Environment prefabs** - Moved items out of Placeholders subfolder into main Environment folder
|
||
|
|
- **Moved Item prefabs** - Organized items from PrefabsPLACEHOLDER into proper Items folder
|
||
|
|
- **Updated prefab references** - All scene references updated to new locations
|
||
|
|
|
||
|
|
### Scene Updates
|
||
|
|
- **Quarry scene** - Major updates and cleanup
|
||
|
|
- Saved multiple working versions (Quarry, Quarry_Fixed, Quarry_OLD)
|
||
|
|
- Added proper lighting data
|
||
|
|
- Updated all interactable components to new architecture
|
||
|
|
- **Test scenes** - Updated MichalTesting_ItemsPuzzles to new interaction system
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠️ Developer Tools
|
||
|
|
|
||
|
|
### Migration & Cleanup Tools
|
||
|
|
- **`StateMachineMigrationTool`** - Automated migration from base StateMachine to SaveableStateMachine
|
||
|
|
- **`RemoveInteractableBaseComponents`** - Cleanup tool for removing old abstract Interactable references
|
||
|
|
- **`RemoveOldInteractableReferences`** - Scene cleanup for refactored components
|
||
|
|
- **`CardSystemTesterWindow`** - New testing window for card system development
|
||
|
|
|
||
|
|
### Editor Improvements
|
||
|
|
- **`InteractableEditor`** - Custom inspector with collapsible sections for base + child properties
|
||
|
|
- **Updated `ItemPrefabEditor`** and `PrefabCreatorWindow`** for new architecture
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Statistics
|
||
|
|
|
||
|
|
- **159 files changed**
|
||
|
|
- **~975k insertions, ~10k deletions** (massive scene file updates)
|
||
|
|
- **13 new documentation files** covering implementation details
|
||
|
|
- **~2k lines of new production code** (excluding scene data)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎨 Key Features
|
||
|
|
|
||
|
|
### Bilateral Restoration Pattern
|
||
|
|
Solved complex timing issues with a simple elegant solution:
|
||
|
|
- Both Pickup and Follower attempt to restore their relationship
|
||
|
|
- First to succeed claims ownership
|
||
|
|
- No callbacks, no queues, no race conditions
|
||
|
|
|
||
|
|
### State Machine Integration
|
||
|
|
- Custom `SaveableStateMachine` wrapper around Pixelplacement's StateMachine
|
||
|
|
- Saves state IDs instead of references
|
||
|
|
- Restores directly to target state without triggering transitional logic
|
||
|
|
- Migration tool converts existing instances
|
||
|
|
|
||
|
|
### Puzzle System Persistence
|
||
|
|
- String-based step tracking (timing-independent)
|
||
|
|
- Pending registration pattern for late-loading objectives
|
||
|
|
- Supports both pre-placed and dynamically created puzzle elements
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 What's Next
|
||
|
|
|
||
|
|
The save system foundation is complete and tested. Future work:
|
||
|
|
- Additional state machines integration
|
||
|
|
- More complex puzzle element support
|
||
|
|
- Save slot management UI
|
||
|
|
- Auto-save functionality
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 Notes
|
||
|
|
|
||
|
|
All internal implementation docs have been cleaned up. Key architectural documentation remains in the `docs/` folder for future reference.
|
||
|
|
|