elevator_core/components/
rider.rs1use serde::{Deserialize, Serialize};
4
5use crate::entity::EntityId;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum RiderPhase {
11 Waiting,
13 Boarding(EntityId),
15 Riding(EntityId),
17 #[serde(alias = "Alighting")]
19 Exiting(EntityId),
20 Walking,
22 Arrived,
24 Abandoned,
26 Resident,
28}
29
30impl std::fmt::Display for RiderPhase {
31 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32 match self {
33 Self::Waiting => write!(f, "Waiting"),
34 Self::Boarding(id) => write!(f, "Boarding({id:?})"),
35 Self::Riding(id) => write!(f, "Riding({id:?})"),
36 Self::Exiting(id) => write!(f, "Exiting({id:?})"),
37 Self::Walking => write!(f, "Walking"),
38 Self::Arrived => write!(f, "Arrived"),
39 Self::Abandoned => write!(f, "Abandoned"),
40 Self::Resident => write!(f, "Resident"),
41 }
42 }
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct Rider {
53 pub(crate) weight: f64,
55 pub(crate) phase: RiderPhase,
57 pub(crate) current_stop: Option<EntityId>,
59 pub(crate) spawn_tick: u64,
61 pub(crate) board_tick: Option<u64>,
63}
64
65impl Rider {
66 #[must_use]
68 pub const fn weight(&self) -> f64 {
69 self.weight
70 }
71
72 #[must_use]
74 pub const fn phase(&self) -> RiderPhase {
75 self.phase
76 }
77
78 #[must_use]
80 pub const fn current_stop(&self) -> Option<EntityId> {
81 self.current_stop
82 }
83
84 #[must_use]
86 pub const fn spawn_tick(&self) -> u64 {
87 self.spawn_tick
88 }
89
90 #[must_use]
92 pub const fn board_tick(&self) -> Option<u64> {
93 self.board_tick
94 }
95}