[bug] ТЗМ застревает, если обслуживаемая установка сменила позицию #3

Closed
opened 2026-10-29 11:43:31 +00:00 by chexit · 1 comment
Owner

Проверено на 90379f6.

Машина едет к координатам установки на момент назначения задания. Если установка переехала, ТЗМ доезжает до старой точки, заканчивает развёртывание и оказывается без dest. В step_supply() цель ещё жива и ждёт БК, поэтому ветка выполняет continue, но новый приказ движения не выдаёт. Это повторяется бесконечно.

Предложение: если цель задания вне HANDOVER, а машина уже не движется, перепрокладывать движение к текущей позиции цели либо отменять/переназначать заявку. Проверять значимое перемещение точки встречи и во время движения.

Код:

} else if self.sams[j].alive() && (self.sams[j].empty || self.sams[j].kind == SamKind::Depot) {

Воспроизведено на настоящем коде sim и wave в отдельном native Rust crate (edition=2024, glam=0.30.10, cargo test --release). Движок и GPU не участвовали. Тест ниже проверяет ожидаемое исправленное поведение и сейчас падает; поместить в дочерний #[cfg(test)]-модуль соответствующего файла с use super::*;.

#[test]
fn truck_must_follow_a_target_that_moved_away() {
        let mut sim=Sim::new(1);
        let depot=sim.id();sim.sams.push(Sam::new(depot,SamKind::Depot,DVec3::new(500.,70.,0.),0.));
        let target=sim.id();let mut s=Sam::new(target,SamKind::Tor,DVec3::new(100.,70.,0.),0.);s.empty=true;s.missiles=0;sim.sams.push(s);
        let truck=sim.id();let mut s=Sam::new(truck,SamKind::Tzm,DVec3::new(0.,70.,0.),0.);s.job=Some(target);sim.sams.push(s);
        sim.tick=2;sim.step_supply(&mut Out::default());
        assert!(sim.sams[2].moving(),"truck at obsolete rendezvous must get a new move order");
    }
Проверено на `90379f6`. Машина едет к координатам установки на момент назначения задания. Если установка переехала, ТЗМ доезжает до старой точки, заканчивает развёртывание и оказывается без `dest`. В `step_supply()` цель ещё жива и ждёт БК, поэтому ветка выполняет `continue`, но новый приказ движения не выдаёт. Это повторяется бесконечно. Предложение: если цель задания вне HANDOVER, а машина уже не движется, перепрокладывать движение к текущей позиции цели либо отменять/переназначать заявку. Проверять значимое перемещение точки встречи и во время движения. Код: https://gitea.maoniao.team/chexit/airdef/src/commit/90379f6/airdef-mod/src/sim/logistics.rs#L68 Воспроизведено на настоящем коде `sim` и `wave` в отдельном native Rust crate (`edition=2024`, `glam=0.30.10`, `cargo test --release`). Движок и GPU не участвовали. Тест ниже проверяет ожидаемое исправленное поведение и сейчас падает; поместить в дочерний `#[cfg(test)]`-модуль соответствующего файла с `use super::*;`. ```rust #[test] fn truck_must_follow_a_target_that_moved_away() { let mut sim=Sim::new(1); let depot=sim.id();sim.sams.push(Sam::new(depot,SamKind::Depot,DVec3::new(500.,70.,0.),0.)); let target=sim.id();let mut s=Sam::new(target,SamKind::Tor,DVec3::new(100.,70.,0.),0.);s.empty=true;s.missiles=0;sim.sams.push(s); let truck=sim.id();let mut s=Sam::new(truck,SamKind::Tzm,DVec3::new(0.,70.,0.),0.);s.job=Some(target);sim.sams.push(s); sim.tick=2;sim.step_supply(&mut Out::default()); assert!(sim.sams[2].moving(),"truck at obsolete rendezvous must get a new move order"); } ```
chexit added the area:logisticspriority:P1type:bug labels 2026-10-29 12:56:22 +00:00
Author
Owner

🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/e08fc65 (запушено в main).

🤖 Agent: исправлено в https://gitea.maoniao.team/chexit/airdef/commit/e08fc65 (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#3