lotus_script/message/types.rs
1//! Eingebaute Nachrichtentypen für Trigger, Tasten und Zugbildung.
2//!
3//! Built-in message types for triggers, buttons, and train composition.
4
5use lotus_shared::message::message_type;
6use serde::{Deserialize, Serialize};
7
8/// Ereignis, das durch einen Sensor ausgelöst wird.
9///
10/// Represents an event triggered by a sensor in the system.
11///
12/// Ein Trigger-Ereignis tritt auf, wenn ein Objekt den Erfassungsbereich eines Sensors betritt oder verlässt.
13///
14/// A trigger event occurs when an object enters or leaves a sensor's detection area.
15/// Each sensor has a unique index and can detect both entry and exit events.
16#[derive(Debug, Serialize, Deserialize)]
17pub struct TriggerEvent {
18 /// Eindeutige Kennung des Trigger-Ereignisses.
19 ///
20 /// Unique identifier for the trigger event.
21 pub id: String,
22 /// Index des Sensors, der das Ereignis erzeugt hat.
23 ///
24 /// Index of the sensor that generated this event.
25 pub sensor_index: i32,
26 /// Art des Triggers (Betreten oder Verlassen).
27 ///
28 /// The type of trigger (Enter or Leave).
29 pub kind: TriggerKind,
30}
31
32impl TriggerEvent {
33 /// Gibt `true` zurück, wenn es sich um ein Betreten-Ereignis handelt.
34 ///
35 /// Returns `true` if this is an entry event.
36 pub fn is_enter(&self) -> bool {
37 self.kind.is_enter()
38 }
39
40 /// Gibt `true` zurück, wenn es sich um ein Verlassen-Ereignis handelt.
41 ///
42 /// Returns `true` if this is a leave event.
43 pub fn is_leave(&self) -> bool {
44 self.kind.is_leave()
45 }
46}
47
48message_type!(TriggerEvent, "builtin", "trigger_event");
49
50/// Art eines Trigger-Ereignisses.
51///
52/// Represents the type of trigger event that occurred.
53#[derive(Debug, Serialize, Deserialize)]
54pub enum TriggerKind {
55 /// Objekt hat den Erfassungsbereich des Sensors betreten.
56 ///
57 /// An object entered the sensor's detection area.
58 Enter,
59 /// Objekt hat den Erfassungsbereich des Sensors verlassen.
60 ///
61 /// An object left the sensor's detection area.
62 Leave,
63}
64
65impl TriggerKind {
66 /// Gibt `true` zurück, wenn der Trigger ein Betreten-Ereignis darstellt.
67 ///
68 /// Returns `true` if this trigger represents an entry event.
69 pub fn is_enter(&self) -> bool {
70 matches!(self, Self::Enter)
71 }
72
73 /// Gibt `true` zurück, wenn der Trigger ein Verlassen-Ereignis darstellt.
74 ///
75 /// Returns `true` if this trigger represents a leave event.
76 pub fn is_leave(&self) -> bool {
77 matches!(self, Self::Leave)
78 }
79}
80
81/// Tastendruck- oder Loslass-Ereignis im Cockpit.
82///
83/// Represents a button press or release event in the cockpit.
84///
85/// Erfasst Zustandsänderungen von Tasten an verschiedenen Cockpit-Positionen.
86///
87/// Button events capture state changes of buttons in different cockpit positions,
88/// tracking whether they are pressed or released.
89#[derive(Debug, Serialize, Deserialize)]
90pub struct ButtonEvent {
91 /// Eindeutige Kennung des Tastenereignisses.
92 ///
93 /// Unique identifier for the button event.
94 pub id: String,
95 /// Aktueller Tastenzustand (`true` = gedrückt, `false` = losgelassen).
96 ///
97 /// Current state of the button (`true` = pressed, `false` = released).
98 pub value: bool,
99 /// Cockpit-Index der Taste.
100 ///
101 /// Cockpit index of this button.
102 pub cockpit_index: u8,
103}
104
105message_type!(ButtonEvent, "builtin", "button_event");
106
107/// Zustand des Batterieschalters.
108///
109/// Represents the state of the battery switch.
110///
111/// Einfacher Boolean-Wrapper: `true` = Batterie ein, `false` = Batterie aus.
112///
113/// Simple boolean wrapper: `true` = battery on, `false` = battery off.
114#[derive(Debug, Serialize, Deserialize)]
115pub struct BatterySwitch(pub bool);
116
117message_type!(BatterySwitch, "builtin", "battery_switch");
118
119pub use lotus_shared::vehicle::{
120 TrainConfiguration, TrainConfigurationChanged, TrainVehicleConfiguration,
121};