diff --git a/docs/adr/0002-stat-und-modifier-pipeline.md b/docs/adr/0002-stat-und-modifier-pipeline.md index 1ff9363..0c418dd 100644 --- a/docs/adr/0002-stat-und-modifier-pipeline.md +++ b/docs/adr/0002-stat-und-modifier-pipeline.md @@ -471,16 +471,8 @@ Sichtbarkeitsanforderung ab. ## Konsequenzen -**Positiv** - -- Ein Save enthält keine Formel. Balancing- und Formeländerungen wirken rückwirkend, ohne - Migration. -- Das Run-Ende braucht keinen Aufräum-Code, den man beim nächsten Feature erweitern müsste. -- Ein neuer Stat oder Modifikator erzeugt Compile-Fehler an genau den Stellen, die nachziehen - müssen. -- Die Stapelregel ist reihenfolgeunabhängig; es gibt keine „richtige" Sortierung von Quellen. - -**Negativ** +Was diese Entscheidung einbringt, steht in den Punkten 1 bis 11 und wird hier nicht wiederholt. +Was sie kostet, steht nur hier: - Der Clamp ist eine harte Wand. Ohne die Sichtbarkeitsanforderung entstehen wirkungslose Modifikatoren, die niemandem auffallen. Die Prüfung ist manuell und damit die schwächste diff --git a/examples/perf_spike.rs b/examples/perf_spike.rs index 755058c..cdaeb2f 100644 --- a/examples/perf_spike.rs +++ b/examples/perf_spike.rs @@ -16,8 +16,6 @@ //! PERF_N enemy population held constant (default 1000) //! PERF_FIRE_RATE tower shots per second (default 20) //! PERF_RENDER 1 = window + sprites, 0 = headless logic (default 1) -//! PERF_COLLIDE 1 = run naive O(n*m) collision (default 1) -//! PERF_MOVE 1 = run enemy movement (default 1) //! PERF_SECONDS length of the measurement window (default 12) //! PERF_WARMUP seconds discarded before measuring (default 4) //! @@ -48,7 +46,7 @@ const HIT_RADIUS: f32 = 10.0; /// An enemy this close to the centre has "arrived" and is recycled to the rim. const CENTER_RADIUS: f32 = 24.0; /// Enough history to hold every frame of a long run at high fps. -const HISTORY: usize = 120_000; +const HISTORY: usize = 20_000; const D_MAINTAIN: DiagnosticPath = DiagnosticPath::const_new("spike/maintain_us"); const D_MOVE_ENEMIES: DiagnosticPath = DiagnosticPath::const_new("spike/move_enemies_us"); @@ -64,8 +62,6 @@ struct SpikeConfig { enemy_count: usize, fire_rate: f32, render: bool, - collide: bool, - move_enemies: bool, warmup_secs: f64, measure_secs: f64, } @@ -77,8 +73,6 @@ impl SpikeConfig { enemy_count: cli_n.unwrap_or_else(|| env_num("PERF_N", 1000.0) as usize), fire_rate: env_num("PERF_FIRE_RATE", 20.0) as f32, render: env_flag("PERF_RENDER", true), - collide: env_flag("PERF_COLLIDE", true), - move_enemies: env_flag("PERF_MOVE", true), warmup_secs: env_num("PERF_WARMUP", 4.0), measure_secs: env_num("PERF_SECONDS", 12.0), } @@ -183,10 +177,10 @@ fn main() { Update, ( maintain_population, - move_enemies.run_if(|c: Res| c.move_enemies), + move_enemies, tower_fire, move_projectiles, - collide.run_if(|c: Res| c.collide), + collide, ) .chain(), ) @@ -441,10 +435,6 @@ fn harness( ); println!("N (enemies) {}", cfg.enemy_count); println!("fire rate {} shots/s", cfg.fire_rate); - println!( - "systems move={} collide={}", - cfg.move_enemies, cfg.collide - ); println!("frames measured {frames}"); println!( "frame time median {median_ms:.3} ms | p95 {p95_ms:.3} ms | p99 {p99_ms:.3} ms"