Skip to main content

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};