spring_ai_rs/
skirmish_ai.rs1use 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}