Add galaxy parameter UI, star selection, and movement/physics scaffolding
Galaxy creation scene (Bevy 0.16): - Split into module folder: params.rs, mod.rs (generation + spawn), ui.rs, selection.rs - GalaxyParams resource (seed, count, arms, vertical_arms, size, twist, vertical_twist) with generation counter for change detection - Control panel: 7 +/- slider rows + Regenerate button, no native Bevy slider widget so uses label + icon buttons - Info panel: live-refreshes on selection change via despawn_related::<Children> - Click-to-select: screen-space picking (project each star to viewport, closest within 18px threshold wins); selected star lerps scale to 2.2x - Generation faithfully ports the docs TS reference including vertical arms - Regeneration system: despawns GalaxyScene root only, preserves UI panels Camera: - Camera2d -> Camera3d + OrbitCamera (left-drag yaw/pitch, scroll zoom, pitch/distance clamped to avoid gimbal) - Orbit drag suppressed when cursor over UI New plugins (scaffolding): - movement/: Velocity, MaxSpeed, TurnRate, Drag, MoveTarget, Player components + click-to-move (no player spawned yet) - physics/: pure-data geometry (ray_vs_sphere, overlaps, separate, segment_vs_sphere) with 7 passing unit tests; no systems wired yet - star_map/: plugin skeleton gated on AppState::InGame Shared: - ui/util.rs: cursor_over_ui helper for UI-hover detection - docs: ARCH-9 decision record (custom movement & collision, no physics engine)
This commit is contained in:
26
apps/game/src/gameplay/movement/mod.rs
Normal file
26
apps/game/src/gameplay/movement/mod.rs
Normal file
@@ -0,0 +1,26 @@
|
||||
use bevy::prelude::*;
|
||||
|
||||
pub mod components;
|
||||
pub mod input;
|
||||
pub mod kinematic;
|
||||
pub mod orbit;
|
||||
|
||||
pub struct MovementPlugin;
|
||||
|
||||
impl Plugin for MovementPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
// No state gating for slice 1: systems are no-ops when no Player exists.
|
||||
// When AppState::InGame is wired up, gate these on `in_state(AppState::InGame)`
|
||||
// and consider moving them to FixedUpdate for SpacetimeDB determinism.
|
||||
app.add_systems(
|
||||
Update,
|
||||
(
|
||||
input::click_to_move,
|
||||
kinematic::steer_to_target,
|
||||
kinematic::integrate_velocity,
|
||||
orbit::update_orbits,
|
||||
)
|
||||
.chain(),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user