Skip to main content

asterion_core/
entity.rs

1use crate::{Direction, PlayerId, Position, View};
2use std::time::Duration;
3
4pub trait Entity {
5    fn id(&self) -> PlayerId;
6    fn name(&self) -> &str;
7    fn vision(&self) -> usize;
8    fn view(&self) -> View {
9        if self.vision() <= 2 {
10            return View::Cone {
11                radius: 6 + self.vision(),
12            };
13        }
14
15        if self.vision() <= 4 {
16            return View::Plane {
17                radius: 5 + self.vision(),
18            };
19        }
20
21        if self.vision() <= 7 {
22            return View::Circle {
23                radius: 4 + self.vision(),
24            };
25        }
26
27        View::Full
28    }
29    fn speed(&self) -> u64;
30    fn movement_recovery_duration(&self) -> Duration {
31        Duration::from_millis(50 + 200_u64.saturating_sub(25 * self.speed()))
32    }
33    fn position(&self) -> Position;
34    fn direction(&self) -> Direction;
35    fn maze_id(&self) -> usize;
36}