traaains/sim/signal/
commands.rs1use bevy::ecs::{entity::Entity, system::Command, world::World};
4
5use crate::sim::{
6 signal::SignalPos,
7 track::{pos::TrackPos, segment::signals_manager::SignalsManager},
8};
9
10pub struct RemoveSignal {
12 target: Entity,
13}
14
15impl RemoveSignal {
16 pub fn new(target: Entity) -> Self {
17 Self { target }
18 }
19}
20
21impl Command for RemoveSignal {
22 type Out = ();
23
24 fn apply(self, world: &mut World) -> Self::Out {
25 let (signal_idx, signal_segment) = {
26 let track_pos = world.get::<TrackPos>(self.target).unwrap();
27 (track_pos.idx, track_pos.segment)
28 };
29
30 let mut signals_manager = world.get_mut::<SignalsManager>(signal_segment).unwrap();
31 signals_manager.inner.remove(&SignalPos(signal_idx));
32
33 world.despawn(self.target);
35 }
36}