chore: sync codebase remediation, gameplay systems, and docs

Security & infrastructure:
- Remove unused services/ (auth, spacetimedb) and auth.db
- Add .env.example template, expand .gitignore for env/db files
- Add GitHub Actions CI + commitlint config and workflows
- Add manual vendor chunking and source maps to docs/site vite configs

Shared UI & docs app:
- Add ARIA props and focus-visible rings to Button/Panel
- Add ButtonAsLink primitive; use shared Button in NotFound
- Wire @void-nav/ui into docs app; refresh content pages
- Replace Todo page with Kanban board

Gameplay (Bevy):
- Add ai module (behavior, faction, navigation, perception, spawning, states)
- Add narrative module (events, history, synthesis, ui)
- Refine galaxy contents and in-system flight/scene systems
This commit is contained in:
2026-06-16 11:49:13 -04:00
parent 98c2ba59df
commit 57633addfe
60 changed files with 5084 additions and 2473 deletions

View File

@@ -107,6 +107,11 @@ pub fn spawn_camera(mut commands: Commands) {
.looking_at(orbit.target, Vec3::Y),
MainCamera,
orbit,
Camera {
// Customize clear color for space background
clear_color: ClearColorConfig::Custom(Color::srgb(0.02, 0.02, 0.05)),
..default()
},
));
}
@@ -121,7 +126,7 @@ const ORBIT_MAX_DISTANCE: f32 = 1500.0;
/// Drag is suppressed when the cursor is over any UI node — otherwise clicking
/// buttons or panels would also rotate the camera.
///
/// Only runs when camera mode is Orbit.
/// Only runs when camera mode is Orbit or Follow (for tactical repositioning).
pub fn orbit_camera_control(
camera_state: Res<CameraState>,
mouse_input: Res<ButtonInput<MouseButton>>,
@@ -131,8 +136,8 @@ pub fn orbit_camera_control(
mut query: Query<(&mut Transform, &mut OrbitCamera), With<MainCamera>>,
ui_nodes: Query<(&bevy::ui::ComputedNode, &GlobalTransform)>,
) {
// Only run orbit controls in Orbit mode
if camera_state.mode != CameraMode::Orbit {
// Only run orbit controls in Orbit or Follow mode (not Cinematic)
if !camera_state.mode.is_orbit() && !camera_state.mode.is_follow() {
mouse_motion.clear();
scroll_events.clear();
return;