feat(galaxy): refactor params into core/disk/beam layers, fix randomize button scaling

- Split GalaxyParams into CoreParams, DiskParams, and BeamParams sub-structs
- Add polar beam systems (top/bottom) with visual differentiation
- Add scrollable control panel with section headers for each layer
- Fix Randomize Settings button: remove explicit width (use flex auto)
  and bump height from 28px to 32px to match other action buttons
- Add mouse-wheel scroll routing for the control panel
- Add 'Randomize Settings' button that randomizes all params within bounds
- Add SystemOrigin enum for per-layer tracking
- Update AGENTS.md with new module layout and plugin pattern
This commit is contained in:
2026-06-09 23:07:55 -04:00
parent b372a75a84
commit f83a0c5e59
5 changed files with 1080 additions and 228 deletions

View File

@@ -75,6 +75,18 @@ Follows [Rust RFC 344](https://rust-lang.github.io/api-guidelines/naming.html).
| Functions, systems, locals | `snake_case`, verb-first | `spawn_camera`, `setup_main_menu` |
| Constants, statics | `SCREAMING_SNAKE_CASE` | `MAX_HEALTH` |
## Warnings & Errors Policy
**Never suppress compiler warnings or errors.** This includes but is not limited to:
- Do **not** add `#[allow(...)]` / `#[allow(dead_code)]` / `#[allow(unused)]` / `#[allow(unused_variables)]` or any other lint suppression attribute.
- Do **not** prefix unused variables with `_` to silence warnings (e.g. `_unused_var`).
- Do **not** use `let _ = ...` to discard results that might carry meaningful errors.
- Do **not** add `#[cfg_attr(..., allow(...))]` or equivalent conditional suppressions.
- Do **not** use `#![allow(...)]` at the crate or module level.
If a warning or error fires, **fix the underlying issue** — remove dead code, use the variable, handle the error properly, or restructure the code. Suppressing warnings hides real problems and is not an acceptable fix.
## Architecture Notes
- **State machine driven**: each `AppState` variant has its own UI/systems wired via `OnEnter` / `OnExit` / `Update` (latter guarded by `in_state`).