spring_ai_rs/ai_interface/callback/
game.rs

1use std::{error::Error, ffi::CStr};
2
3use crate::{ai_interface::AIInterface, get_callback};
4
5#[derive(Debug, Copy, Clone)]
6pub struct Game {
7    ai_id: i32,
8}
9
10#[derive(Debug, Clone)]
11pub struct GameAll {
12    ai_interface_version: i32,
13    debug_mode_enabled: bool,
14    //    mode: i32,
15    paused: bool,
16    speed_factor: f32,
17    setup_script: String,
18}
19
20impl AIInterface {
21    pub fn game(&self) -> Game {
22        Game { ai_id: self.ai_id }
23    }
24}
25
26impl Game {
27    pub fn ai_interface_version(&self) -> Result<i32, Box<dyn Error>> {
28        let interface_version = get_callback!(self.ai_id, Game_getAiInterfaceVersion)?;
29        Ok(unsafe { interface_version(self.ai_id) })
30    }
31
32    pub fn debug_mode_enabled(&self) -> Result<bool, Box<dyn Error>> {
33        let is_debug_enabled_func = get_callback!(self.ai_id, Game_isDebugModeEnabled)?;
34        Ok(unsafe { is_debug_enabled_func(self.ai_id) })
35    }
36
37    pub fn mode(&self) -> Result<i32, Box<dyn Error>> {
38        let get_mode_func = get_callback!(self.ai_id, Game_getMode)?;
39        Ok(unsafe { get_mode_func(self.ai_id) })
40    }
41
42    pub fn paused(&self) -> Result<bool, Box<dyn Error>> {
43        let is_paused_func = get_callback!(self.ai_id, Game_isPaused)?;
44        Ok(unsafe { is_paused_func(self.ai_id) })
45    }
46
47    pub fn speed_factor(&self) -> Result<f32, Box<dyn Error>> {
48        let get_speed_factor_func = get_callback!(self.ai_id, Game_getSpeedFactor)?;
49        Ok(unsafe { get_speed_factor_func(self.ai_id) })
50    }
51
52    pub fn setup_script(&self) -> Result<String, Box<dyn Error>> {
53        let get_setup_script_func = get_callback!(self.ai_id, Game_getSetupScript)?;
54        Ok(String::from(
55            unsafe { CStr::from_ptr(get_setup_script_func(self.ai_id)) }.to_str()?,
56        ))
57    }
58
59    pub fn all(&self) -> Result<GameAll, Box<dyn Error>> {
60        Ok(GameAll {
61            ai_interface_version: self.ai_interface_version()?,
62            debug_mode_enabled: self.debug_mode_enabled()?,
63            // TODO:           mode: self.mode()?,
64            paused: self.paused()?,
65            speed_factor: self.speed_factor()?,
66            setup_script: self.setup_script()?,
67        })
68    }
69
70    // TODO: Game_getCategoryFlag
71    // TODO: Game_getCategoriesFlag
72    // TODO: Game_getCategoryName
73}