spring_ai_rs/
ai_macro.rs

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                        //
362                    }
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}