minigene/systems/
goto_entity_simple.rs1use crate::*;
2
3pub fn goto_entity_simple_system(
5 entities: &Entities,
6 gotos: &Components<GotoEntity>,
7 positions: &mut Components<Point>,
8) -> SystemResult {
9 let mut v = vec![];
10 for (e, _, goto) in join!(&entities && &positions && &gotos) {
11 v.push((
12 e.unwrap(),
13 goto.unwrap().entity.clone(),
14 goto.unwrap().speed,
15 ));
16 }
17 for (e, t, speed) in v {
18 if let Some(target) = positions.get(t).map(|p| p.clone()) {
19 let p = positions.get_mut(e).unwrap();
20 for _i in 0..(speed as usize) {
22 let delta_x = target.x - p.x;
23 let delta_y = target.y - p.y;
24 if delta_x.abs() >= delta_y.abs() {
25 if delta_x > 0 {
26 p.x += 1;
27 } else if delta_x < 0 {
28 p.x -= 1;
29 }
30 } else {
31 if delta_y > 0 {
32 p.y += 1;
33 } else if delta_y < 0 {
34 p.y -= 1;
35 }
36 }
37 }
38 }
39 }
40 Ok(())
41}