feat(gameplay): implement in-system onboarding with docked station view
Implement the final onboarding step where the player loads into their selected starting system docked at a station. New features: - Create in_system module for system-scale gameplay - Spawn player ship docked at highest-population station - Display station info panel with undock button - Position camera for cinematic docked view with orbit controls Implementation details: - in_system/mod.rs: Plugin setup with DockedState and ActiveSystem resources - in_system/scene.rs: System/POI spawning and player ship docked positioning - in_system/docked.rs: Docked state management and UndockEvent - in_system/ui.rs: Docked UI with station details and undock button - Reuse existing POI spawning patterns from galaxy/contents.rs - Select docking station by highest population (better for new players) Modified files: - Add in_system module exports to gameplay/mod.rs - Register InSystemPlugin in main.rs - Update orbit camera control for InGame state - Re-export GeneratedStation and STARTING_SHIPS for use by in_system The player now completes onboarding by loading into a system view with their ship docked at a station, ready for gameplay. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
46
apps/game/src/gameplay/in_system/mod.rs
Normal file
46
apps/game/src/gameplay/in_system/mod.rs
Normal file
@@ -0,0 +1,46 @@
|
||||
//! In-system gameplay module.
|
||||
//!
|
||||
//! Handles the system-scale view where the player is docked at a station
|
||||
//! within their selected starting system. This is the entry point to actual
|
||||
//! gameplay after onboarding.
|
||||
|
||||
mod docked;
|
||||
mod scene;
|
||||
mod ui;
|
||||
|
||||
use bevy::prelude::*;
|
||||
|
||||
use crate::state::AppState;
|
||||
|
||||
pub use docked::{DockedState, UndockEvent};
|
||||
pub use scene::ActiveSystem;
|
||||
|
||||
pub struct InSystemPlugin;
|
||||
|
||||
impl Plugin for InSystemPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.init_resource::<DockedState>()
|
||||
.init_resource::<ActiveSystem>()
|
||||
.add_event::<UndockEvent>()
|
||||
.add_systems(
|
||||
OnEnter(AppState::InGame),
|
||||
(scene::setup_in_system_view, ui::setup_docked_ui).chain(),
|
||||
)
|
||||
.add_systems(
|
||||
OnExit(AppState::InGame),
|
||||
(
|
||||
ui::despawn_docked_ui,
|
||||
scene::despawn_in_system_scene,
|
||||
).chain(),
|
||||
)
|
||||
.add_systems(
|
||||
Update,
|
||||
(
|
||||
ui::refresh_docked_ui,
|
||||
ui::undock_button_handler,
|
||||
)
|
||||
.chain()
|
||||
.run_if(in_state(AppState::InGame)),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user