d45629ae29
build / mod (push) Failing after 22s
The Windows log for #122 showed the mod stopping in the UI event (fuel budget 1e9, remaining 0) with known_units <- order_raid <- launch_wave <- ui_select: order_raid recomputed the planner snapshot known_units() for every drone, and the snapshot itself rescanned the whole force and the dedup list per intel entry. A second big Smart order cost drones x intel-log x force-size inside one event. Reproduced in actual WASM with measured per-callback fuel through the exact ui_select(BTN_LAUNCH) handler (diagnostic guest, trigger.patch): before, a 111-drone second order at revealed=13172/known=144 exhausted exactly 1e9 and stopped the mod (an 11-drone order at the same state: 247805865); after, the same scenario passes with max command fuel 32946177/1e9, failures=0, and /stats at tick 2602 byte-identical. A stacked single-point layout dies to one warhead (known=0, cheap order), so the scenario deploys spread clusters with a moved player. Fix: one known_units snapshot per order_raid passed to radar_strikes and choose_target; known_units is a single O(log + force) set pass; price_grid_on reuses its snapshot. Emitter/network targeting and carrier choice semantics are unchanged (native equivalence test against the former predicate; WASM checkpoint counters equal). Limits unchanged; HD/recording untouched; wave size unrestricted. Committed regressions: native snapshot-equivalence and second-smart-order tests; the heavy WASM fixture now orders two Smart raids through the wave screen's launch function (airdef preset + airdef raid) with EW and a combat intel log, four accepted orders asserted; the light contract covers preset and the empty-wave refusal. Core release 195 + 8 scenarios; adapter 65 + 1 boundary + 5 scenarios; light WASM 30 steps; heavy WASM 283 steps (tick max 182413686/300M, command max 6939810/1e9, failures 0). Windows GUI acceptance remains external and is not claimed. Co-Authored-By: Kimi Code (Moonshot AI) <noreply@moonshot.cn>
24 lines
1.3 KiB
Diff
24 lines
1.3 KiB
Diff
diff --git a/airdef-mod/src/lib.rs b/airdef-mod/src/lib.rs
|
|
index dc6585eb3..73864e41e 100644
|
|
--- a/airdef-mod/src/lib.rs
|
|
+++ b/airdef-mod/src/lib.rs
|
|
@@ -2351,8 +2351,16 @@ impl Mod for AirDef {
|
|
.nearest_target(DVec3::new(p.x, p.y, p.z))
|
|
.unwrap_or(DVec3::new(p.x, p.y, p.z));
|
|
if *kind == "mix" {
|
|
- let objects = self.objects(DVec3::new(p.x, p.y, p.z));
|
|
- self.sim.order_raid(&wave::WaveConfig::mix(count, dist), &objects, &mut out);
|
|
+ // DIAGNOSTIC ONLY (issue #122): drive the exact UI launch path
|
|
+ // (Page::WaveGo, BTN_LAUNCH) with the maximum menu composition.
|
|
+ let mut wave = wave::WaveConfig::default();
|
|
+ wave.counts = [40; wave::KINDS.len()];
|
|
+ wave.dist = dist;
|
|
+ wave.approach = sim::Approach::AllSides;
|
|
+ wave.aim = sim::Aim::Smart;
|
|
+ self.wave = wave;
|
|
+ self.menu = Some(Page::WaveGo);
|
|
+ self.ui_select(BTN_LAUNCH, 0);
|
|
} else {
|
|
let kind = DroneKind::from_key(kind).ok_or(
|
|
"Тип: shahed, geran3, lancet, gerbera, kh101, kalibr, kh22, zircon, iskander, kinzhal, oreshnik или mix",
|