spring_ai_rs/
skirmish_ai.rs

1use std::{
2    collections::HashMap,
3    ptr::NonNull,
4    sync::{Arc, RwLock},
5};
6
7use lazy_static::lazy_static;
8pub use spring_ai_sys::SSkirmishAICallback;
9
10#[derive(Copy, Clone, Debug, Default)]
11pub struct SkirmishAI {
12    callback: usize,
13}
14
15impl SkirmishAI {
16    pub fn new(callback: *const SSkirmishAICallback) -> Result<Self, &'static str> {
17        if NonNull::new(callback as *mut SSkirmishAICallback).is_some() {
18            Ok(Self {
19                callback: callback as usize,
20            })
21        } else {
22            Err("Callback is null")
23        }
24    }
25
26    pub fn get_callback(&self) -> Option<NonNull<SSkirmishAICallback>> {
27        NonNull::new(self.callback as *mut SSkirmishAICallback)
28    }
29}
30
31lazy_static! {
32    static ref SKIRMISH_AI: Arc<RwLock<HashMap<i32, SkirmishAI>>> = Default::default();
33}
34
35pub fn set_skirmish_ai(ai_id: i32, skirmish_ai: SkirmishAI) {
36    SKIRMISH_AI.try_write().unwrap().insert(ai_id, skirmish_ai);
37}
38
39pub fn get_skirmish_ai(ai_id: i32) -> Option<SkirmishAI> {
40    SKIRMISH_AI.try_read().unwrap().get(&ai_id).copied()
41}
42
43pub fn remove_skirmish_ai(ai_id: i32) {
44    SKIRMISH_AI.try_write().unwrap().remove(&ai_id);
45}