tschesky 235fa04eba Merge a card refresh (#59)
- **Refactored Card Placement Flow**
  - Separated card presentation from orchestration logic
  - Extracted `CornerCardManager` for pending card lifecycle (spawn, shuffle, rebuild)
  - Extracted `AlbumNavigationService` for book page navigation and zone mapping
  - Extracted `CardEnlargeController` for backdrop management and card reparenting
  - Implemented controller pattern (non-MonoBehaviour) for complex logic
  - Cards now unparent from slots before rebuild to prevent premature destruction

- **Improved Corner Card Display**
  - Fixed cards spawning on top of each other during rebuild
  - Implemented shuffle-to-front logic (remaining cards occupy slots 0→1→2)
  - Added smart card selection (prioritizes cards matching current album page)
  - Pending cards now removed from queue immediately on drag start
  - Corner cards rebuild after each placement with proper slot reassignment

- **Enhanced Album Card Viewing**
  - Added dramatic scale increase when viewing cards from album slots
  - Implemented shrink animation when dismissing enlarged cards
  - Cards transition: `PlacedInSlotState` → `AlbumEnlargedState` → `PlacedInSlotState`
  - Backdrop shows/hides with card enlarge/shrink cycle
  - Cards reparent to enlarged container while viewing, return to slot after

- **State Machine Improvements**
  - Added `CardStateNames` constants for type-safe state transitions
  - Implemented `ICardClickHandler` and `ICardStateDragHandler` interfaces
  - State transitions now use cached property indices
  - `BoosterCardContext` separated from `CardContext` for single responsibility

- **Code Cleanup**
  - Identified unused `SlotContainerHelper.cs` (superseded by `CornerCardManager`)
  - Identified unused `BoosterPackDraggable.canOpenOnDrop` field
  - Identified unused `AlbumViewPage._previousInputMode` (hardcoded value)
  - Identified unused `Card.OnPlacedInAlbumSlot` event (no subscribers)

Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com>
Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com>
Reviewed-on: #59
2025-11-18 08:40:59 +00:00
2025-11-18 08:40:59 +00:00
2025-11-18 08:40:59 +00:00
2025-11-10 14:57:42 +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%