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}