1pub use spring_ai_rs_macro::ai_func;
2
3#[macro_export]
4macro_rules! activate_ai {
5 () => {
6 #[no_mangle]
7 pub extern "C" fn handleEvent(
8 skirmishAIId: spring_ai_rs::libc::c_int,
9 topic: spring_ai_rs::spring_ai_sys::EventTopic,
10 data: *const spring_ai_rs::libc::c_void,
11 ) -> spring_ai_rs::libc::c_int {
12 use spring_ai_rs::slog::Drain;
13
14 let logger = spring_ai_rs::slog::Logger::root(
15 spring_ai_rs::ai_logger::AILogger::new(skirmishAIId)
16 .with_level(spring_ai_rs::slog::Level::Trace)
17 .with_file_info(true)
18 .fuse(),
19 slog::o!(),
20 );
21
22 let f = || -> Result<(), Box<dyn spring_ai_rs::Error>> {
23 match spring_ai_rs::event::event_topic::EventTopic::from(topic) {
24 spring_ai_rs::event::event_topic::EventTopic::Init => {
25 for init_wrapper in
26 spring_ai_rs::inventory::iter::<spring_ai_rs::event::other::InitWrapper>
27 {
28 spring_ai_rs::event::other::init_wrapper(
29 &logger,
30 skirmishAIId,
31 data,
32 &init_wrapper.init_func,
33 )?;
34 }
35 }
36 spring_ai_rs::event::event_topic::EventTopic::Release => {
37 for release_wrapper in spring_ai_rs::inventory::iter::<
38 spring_ai_rs::event::other::ReleaseWrapper,
39 > {
40 spring_ai_rs::event::other::release_wrapper(
41 &logger,
42 skirmishAIId,
43 data,
44 &release_wrapper.release_func,
45 )?;
46 }
47 }
48 spring_ai_rs::event::event_topic::EventTopic::Message => {
49 for message_wrapper in spring_ai_rs::inventory::iter::<
50 spring_ai_rs::event::other::MessageWrapper,
51 > {
52 spring_ai_rs::event::other::message_wrapper(
53 &logger,
54 skirmishAIId,
55 data,
56 &message_wrapper.message_func,
57 )?;
58 }
59 }
60 spring_ai_rs::event::event_topic::EventTopic::CommandFinished => {
61 for command_finished_wrapper in spring_ai_rs::inventory::iter::<
62 spring_ai_rs::event::other::CommandFinishedWrapper,
63 > {
64 spring_ai_rs::event::other::command_finished_wrapper(
65 &logger,
66 skirmishAIId,
67 data,
68 &command_finished_wrapper.command_finished_func,
69 )?;
70 }
71 }
72 spring_ai_rs::event::event_topic::EventTopic::EnemyCreated => {
73 for enemy_created_wrapper in spring_ai_rs::inventory::iter::<
74 spring_ai_rs::event::enemy::EnemyCreatedWrapper,
75 > {
76 spring_ai_rs::event::enemy::enemy_created_wrapper(
77 &logger,
78 skirmishAIId,
79 data,
80 &enemy_created_wrapper.enemy_created_func,
81 )?;
82 }
83 }
84 spring_ai_rs::event::event_topic::EventTopic::EnemyDamaged => {
85 for enemy_damaged_wrapper in spring_ai_rs::inventory::iter::<
86 spring_ai_rs::event::enemy::EnemyDamagedWrapper,
87 > {
88 spring_ai_rs::event::enemy::enemy_damaged_wrapper(
89 &logger,
90 skirmishAIId,
91 data,
92 &enemy_damaged_wrapper.enemy_damaged_func,
93 )?;
94 }
95 }
96 spring_ai_rs::event::event_topic::EventTopic::EnemyDestroyed => {
97 for enemy_destroyed_wrapper in spring_ai_rs::inventory::iter::<
98 spring_ai_rs::event::enemy::EnemyDestroyedWrapper,
99 > {
100 spring_ai_rs::event::enemy::enemy_destroyed_wrapper(
101 &logger,
102 skirmishAIId,
103 data,
104 &enemy_destroyed_wrapper.enemy_destroyed_func,
105 )?;
106 }
107 }
108 spring_ai_rs::event::event_topic::EventTopic::EnemyEnterLOS => {
109 for enemy_enter_los_wrapper in spring_ai_rs::inventory::iter::<
110 spring_ai_rs::event::enemy::EnemyEnterLOSWrapper,
111 > {
112 let enemy_enter_los_data =
113 spring_ai_rs::event::enemy::enemy_enter_los_wrapper(
114 &logger,
115 skirmishAIId,
116 data,
117 &enemy_enter_los_wrapper.enemy_enter_los_func,
118 )?;
119 }
120 }
121 spring_ai_rs::event::event_topic::EventTopic::EnemyEnterRadar => {
122 for enemy_enter_radar_wrapper in spring_ai_rs::inventory::iter::<
123 spring_ai_rs::event::enemy::EnemyEnterRadarWrapper,
124 > {
125 spring_ai_rs::event::enemy::enemy_enter_radar_wrapper(
126 &logger,
127 skirmishAIId,
128 data,
129 &enemy_enter_radar_wrapper.enemy_enter_radar_func,
130 )?;
131 }
132 }
133 spring_ai_rs::event::event_topic::EventTopic::EnemyFinished => {
134 for enemy_finished_wrapper in spring_ai_rs::inventory::iter::<
135 spring_ai_rs::event::enemy::EnemyFinishedWrapper,
136 > {
137 spring_ai_rs::event::enemy::enemy_finished_wrapper(
138 &logger,
139 skirmishAIId,
140 data,
141 &enemy_finished_wrapper.enemy_finished_func,
142 )?;
143 }
144 }
145 spring_ai_rs::event::event_topic::EventTopic::EnemyLeaveLOS => {
146 for enemy_leave_los_wrapper in spring_ai_rs::inventory::iter::<
147 spring_ai_rs::event::enemy::EnemyLeaveLOSWrapper,
148 > {
149 spring_ai_rs::event::enemy::enemy_leave_los_wrapper(
150 &logger,
151 skirmishAIId,
152 data,
153 &enemy_leave_los_wrapper.enemy_leave_los_func,
154 )?;
155 }
156 }
157 spring_ai_rs::event::event_topic::EventTopic::EnemyLeaveRadar => {
158 for enemy_leave_radar_wrapper in spring_ai_rs::inventory::iter::<
159 spring_ai_rs::event::enemy::EnemyLeaveRadarWrapper,
160 > {
161 spring_ai_rs::event::enemy::enemy_leave_radar_wrapper(
162 &logger,
163 skirmishAIId,
164 data,
165 &enemy_leave_radar_wrapper.enemy_leave_radar_func,
166 )?;
167 }
168 }
169 spring_ai_rs::event::event_topic::EventTopic::Load => {
170 for load_wrapper in
171 spring_ai_rs::inventory::iter::<spring_ai_rs::event::other::LoadWrapper>
172 {
173 spring_ai_rs::event::other::load_wrapper(
174 &logger,
175 skirmishAIId,
176 data,
177 &load_wrapper.load_func,
178 )?;
179 }
180 }
181 spring_ai_rs::event::event_topic::EventTopic::LuaMessage => {
182 for lua_message_wrapper in spring_ai_rs::inventory::iter::<
183 spring_ai_rs::event::other::LuaMessageWrapper,
184 > {
185 spring_ai_rs::event::other::lua_message_wrapper(
186 &logger,
187 skirmishAIId,
188 data,
189 &lua_message_wrapper.lua_message_func,
190 )?;
191 }
192 }
193 spring_ai_rs::event::event_topic::EventTopic::Null => {
194 for null_wrapper in
195 spring_ai_rs::inventory::iter::<spring_ai_rs::event::other::NullWrapper>
196 {
197 spring_ai_rs::event::other::null_wrapper(
198 &logger,
199 skirmishAIId,
200 &null_wrapper.null_func,
201 )?;
202 }
203 }
204 spring_ai_rs::event::event_topic::EventTopic::PlayerCommand => {
205 for player_command_wrapper in spring_ai_rs::inventory::iter::<
206 spring_ai_rs::event::other::PlayerCommandWrapper,
207 > {
208 spring_ai_rs::event::other::player_command_wrapper(
209 &logger,
210 skirmishAIId,
211 data,
212 &player_command_wrapper.player_command_func,
213 )?;
214 }
215 }
216 spring_ai_rs::event::event_topic::EventTopic::Save => {
217 for save_wrapper in
218 spring_ai_rs::inventory::iter::<spring_ai_rs::event::other::SaveWrapper>
219 {
220 spring_ai_rs::event::other::save_wrapper(
221 &logger,
222 skirmishAIId,
223 data,
224 &save_wrapper.save_func,
225 )?;
226 }
227 }
228 spring_ai_rs::event::event_topic::EventTopic::SeismicPing => {
229 for seismic_ping_wrapper in spring_ai_rs::inventory::iter::<
230 spring_ai_rs::event::other::SeismicPingWrapper,
231 > {
232 spring_ai_rs::event::other::seismic_ping_wrapper(
233 &logger,
234 skirmishAIId,
235 data,
236 &seismic_ping_wrapper.seismic_ping_func,
237 )?;
238 }
239 }
240 spring_ai_rs::event::event_topic::EventTopic::UnitCaptured => {
241 for unit_captured_wrapper in spring_ai_rs::inventory::iter::<
242 spring_ai_rs::event::unit::UnitCapturedWrapper,
243 > {
244 spring_ai_rs::event::unit::unit_captured_wrapper(
245 &logger,
246 skirmishAIId,
247 data,
248 &unit_captured_wrapper.unit_captured_func,
249 )?;
250 }
251 }
252 spring_ai_rs::event::event_topic::EventTopic::UnitCreated => {
253 for unit_created_wrapper in spring_ai_rs::inventory::iter::<
254 spring_ai_rs::event::unit::UnitCreatedWrapper,
255 > {
256 spring_ai_rs::event::unit::unit_created_wrapper(
257 &logger,
258 skirmishAIId,
259 data,
260 &unit_created_wrapper.unit_created_func,
261 )?;
262 }
263 }
264 spring_ai_rs::event::event_topic::EventTopic::UnitDamaged => {
265 for unit_damaged_wrapper in spring_ai_rs::inventory::iter::<
266 spring_ai_rs::event::unit::UnitDamagedWrapper,
267 > {
268 spring_ai_rs::event::unit::unit_damaged_wrapper(
269 &logger,
270 skirmishAIId,
271 data,
272 &unit_damaged_wrapper.unit_damaged_func,
273 )?;
274 }
275 }
276 spring_ai_rs::event::event_topic::EventTopic::UnitDestroyed => {
277 for unit_destroyed_wrapper in spring_ai_rs::inventory::iter::<
278 spring_ai_rs::event::unit::UnitDestroyedWrapper,
279 > {
280 spring_ai_rs::event::unit::unit_destroyed_wrapper(
281 &logger,
282 skirmishAIId,
283 data,
284 &unit_destroyed_wrapper.unit_destroyed_func,
285 )?;
286 }
287 }
288 spring_ai_rs::event::event_topic::EventTopic::UnitFinished => {
289 for unit_finished_wrapper in spring_ai_rs::inventory::iter::<
290 spring_ai_rs::event::unit::UnitFinishedWrapper,
291 > {
292 spring_ai_rs::event::unit::unit_finished_wrapper(
293 &logger,
294 skirmishAIId,
295 data,
296 &unit_finished_wrapper.unit_finished_func,
297 )?;
298 }
299 }
300 spring_ai_rs::event::event_topic::EventTopic::UnitGiven => {
301 for unit_given_wrapper in spring_ai_rs::inventory::iter::<
302 spring_ai_rs::event::unit::UnitGivenWrapper,
303 > {
304 spring_ai_rs::event::unit::unit_given_wrapper(
305 &logger,
306 skirmishAIId,
307 data,
308 &unit_given_wrapper.unit_given_func,
309 )?;
310 }
311 }
312 spring_ai_rs::event::event_topic::EventTopic::UnitIdle => {
313 for unit_idle_wrapper in spring_ai_rs::inventory::iter::<
314 spring_ai_rs::event::unit::UnitIdleWrapper,
315 > {
316 spring_ai_rs::event::unit::unit_idle_wrapper(
317 &logger,
318 skirmishAIId,
319 data,
320 &unit_idle_wrapper.unit_idle_func,
321 )?;
322 }
323 }
324 spring_ai_rs::event::event_topic::EventTopic::UnitMoveFailed => {
325 for unit_move_failed_wrapper in spring_ai_rs::inventory::iter::<
326 spring_ai_rs::event::unit::UnitMoveFailedWrapper,
327 > {
328 spring_ai_rs::event::unit::unit_move_failed_wrapper(
329 &logger,
330 skirmishAIId,
331 data,
332 &unit_move_failed_wrapper.unit_move_failed_func,
333 )?;
334 }
335 }
336 spring_ai_rs::event::event_topic::EventTopic::Update => {
337 for update_wrapper in spring_ai_rs::inventory::iter::<
338 spring_ai_rs::event::other::UpdateWrapper,
339 > {
340 spring_ai_rs::event::other::update_wrapper(
341 &logger,
342 skirmishAIId,
343 data,
344 &update_wrapper.update_func,
345 )?;
346 }
347 }
348 spring_ai_rs::event::event_topic::EventTopic::WeaponFired => {
349 for weapon_fired_wrapper in spring_ai_rs::inventory::iter::<
350 spring_ai_rs::event::other::WeaponFiredWrapper,
351 > {
352 spring_ai_rs::event::other::weapon_fired_wrapper(
353 &logger,
354 skirmishAIId,
355 data,
356 &weapon_fired_wrapper.weapon_fired_func,
357 )?;
358 }
359 }
360 _ => {
361 }
363 }
364 Ok(())
365 };
366
367 let ret = f();
368 if ret.is_ok() {
369 0
370 } else {
371 spring_ai_rs::slog::error!(logger, "{:?}", ret);
372 -1
373 }
374 }
375 };
376}