Skip to main content

rbot_messages/messages/
messages.rs

1use serde::{Deserialize, Serialize};
2use std::{any::Any, fmt::Debug};
3
4// -----------------------------------------------------------------
5//                            Traits
6pub trait Message: Debug {
7    fn as_any(&self) -> &dyn Any;
8}
9
10pub trait MessageIdentity {
11    fn id() -> i32;
12}
13
14// -----------------------------------------------------------------
15//              Error Message (if things went wrong)
16#[repr(C)]
17#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
18pub struct MsgError {
19    pub error_code: i32,
20}
21
22// -----------------------------------------------------------------
23//                            Core
24#[repr(C)]
25#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
26pub struct MsgEmpty {
27    pub value: i32, // Dummy value, extern C do not allow empty types
28}
29
30#[repr(C)]
31#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Default, Clone, Copy)]
32pub struct MsgUse {
33    pub component_id: i32,
34    pub sticky: i32,
35}
36
37#[repr(C)]
38#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
39pub struct MsgVelocity {
40    pub x: f32,
41    pub y: f32,
42    pub speed: f32,
43}
44
45#[repr(C)]
46#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
47pub struct MsgAngle {
48    pub angle: f32,
49}
50
51#[repr(C)]
52#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
53pub struct MsgComponentStatusQuery {
54    pub component_id: i32,
55}
56
57#[repr(C)]
58#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
59pub struct RMsgComponentStatus {
60    pub component_id: i32,
61    pub health: f32,
62    pub cooldown: f32,
63    pub is_activated: bool,
64}
65
66#[repr(C)]
67#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
68pub struct MsgState {
69    pub value: i32,
70}
71
72#[repr(C)]
73#[derive(Serialize, Deserialize, Debug, Clone, Default)]
74pub struct RMsgState {
75    pub angle: f32,
76    pub vel_x: f32,
77    pub vel_y: f32,
78    pub health: f32,
79    pub buffs: Vec<String>,
80}
81
82// -----------------------------------------------------------------
83//                           Modules
84#[repr(C)]
85#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
86pub struct MsgModuleStatusQuery {
87    pub module_id: i32,
88}
89
90#[repr(C)]
91#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
92pub struct RMsgModuleStatus {
93    pub cooldown: f32,
94}
95
96#[repr(C)]
97#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy)]
98pub struct MsgTeleport {
99    pub x: f32,
100    pub y: f32,
101}
102
103#[repr(C)]
104#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
105pub struct MsgRadar {
106    pub value: i32, // A dummy value to satisfy extern "C"
107}
108
109#[repr(C)]
110#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
111pub struct RMsgRadar {
112    pub x: f32,
113    pub y: f32,
114    pub distance: f32,
115}
116
117#[repr(C)]
118#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
119pub struct MsgLaser {
120    pub angle: f32,
121}
122
123#[repr(C)]
124#[derive(Serialize, Deserialize, Debug, Clone, Default)]
125pub struct RMsgLaser {
126    pub tag: String,
127    pub kind: String,
128    pub distance: f32,
129    pub angle: f32,
130    pub buffs: Vec<String>,
131}
132
133#[repr(C)]
134#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
135pub struct MsgForceField {
136    pub value: i32,
137}
138
139#[repr(C)]
140#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
141pub struct MsgMine {
142    pub value: i32,
143}
144
145// -----------------------------------------------------------------
146//                        Messages Added Ad-Hoc
147// After this point, all of the messages are added ad-hoc This is because the
148// message number cannot continue to change and it is dependent on the struct
149// definition order.
150#[repr(C)]
151#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
152pub struct MsgTime {
153    pub value: i32, // Dummy value (for C FFI)
154}
155
156#[repr(C)]
157#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
158pub struct RMsgTime {
159    pub timestamp: f32, // time in seconds
160}
161
162#[repr(C)]
163#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
164pub struct MsgRepair {
165    pub component_id: i32,
166}
167
168#[repr(C)]
169#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
170pub struct RMsgRepair {
171    pub healed_amount: f32,
172}
173
174#[repr(C)]
175#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
176pub struct MsgThrust {
177    pub angle: f32,
178}
179
180#[repr(C)]
181#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
182pub struct MsgScan {
183    pub value: i32,
184}
185
186#[repr(C)]
187#[derive(Serialize, Deserialize, Debug, Clone, Default)]
188pub struct RMsgScanObject {
189    pub tag: String,
190    pub kind: String,
191    pub x: f32,
192    pub y: f32,
193    pub buffs: Vec<String>,
194}
195
196#[repr(C)]
197#[derive(Serialize, Deserialize, Debug, Clone, Default)]
198pub struct RMsgScan {
199    pub objects: Vec<RMsgScanObject>,
200}
201
202#[repr(C)]
203#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
204pub struct MsgGPS {
205    pub value: i32,
206}
207
208#[repr(C)]
209#[derive(Serialize, Deserialize, Debug, Clone, Default)]
210pub struct RMsgGPS {
211    pub x: f32,
212    pub y: f32,
213}
214
215#[repr(C)]
216#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
217pub struct MsgAwaitAction {
218    pub value: i32,
219}