1use bevy::{
2 ecs::{
3 event::EntityEvent,
4 observer::On,
5 query::With,
6 system::{Query, Res},
7 },
8 picking::events::{PointerEnter, PointerLeave},
9 sprite_render::{ColorMaterial, MeshMaterial2d},
10};
11
12use crate::{AssetType, AssetsManager, sim::track::segment::TrackSegment, ui::target::Target};
13
14pub mod node;
15pub mod segment;
16
17fn highlight_segment(
18 e: On<PointerEnter>,
19 q_targets: Query<&Target>,
20 mut q_segments: Query<&mut MeshMaterial2d<ColorMaterial>, With<TrackSegment>>,
21 assets_manager: Res<AssetsManager>,
22) {
23 let mut segment = q_segments
24 .get_mut(q_targets.get(e.event_target()).unwrap().0)
25 .unwrap();
26
27 segment.0 = assets_manager
28 .materials
29 .get(&AssetType::TrackSegmentHighlight)
30 .cloned()
31 .unwrap();
32}
33
34fn remove_highlight_segment(
35 e: On<PointerLeave>,
36 q_targets: Query<&Target>,
37 mut q_segments: Query<&mut MeshMaterial2d<ColorMaterial>, With<TrackSegment>>,
38 assets_manager: Res<AssetsManager>,
39) {
40 let mut segment = q_segments
41 .get_mut(q_targets.get(e.event_target()).unwrap().0)
42 .unwrap();
43
44 segment.0 = assets_manager
45 .materials
46 .get(&AssetType::TrackSegmentNormal)
47 .cloned()
48 .unwrap();
49}