spring_ai_rs/ai_interface/callback/unit_def/
flare.rs

1use std::error::Error;
2
3use serde::{Deserialize, Serialize};
4
5use crate::get_callback;
6
7#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
8pub struct UnitFlare {
9    pub ai_id: i32,
10    pub def_id: i32,
11}
12
13#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
14pub struct UnitFlareAll {
15    pub able_to_drop: bool,
16    pub reload_time: f32,
17    pub efficiency: f32,
18    pub delay: f32,
19    pub drop_vector: [f32; 3],
20    pub time: i32,
21    pub salvo_size: i32,
22    pub salvo_delay: i32,
23}
24
25impl UnitFlare {
26    pub fn able_to_drop(&self) -> Result<bool, Box<dyn Error>> {
27        let get_is_able_to_drop_flare_func = get_callback!(self.ai_id, UnitDef_isAbleToDropFlare)?;
28        Ok(unsafe { get_is_able_to_drop_flare_func(self.ai_id, self.def_id) })
29    }
30
31    pub fn reload_time(&self) -> Result<f32, Box<dyn Error>> {
32        let get_flare_reload_time_func = get_callback!(self.ai_id, UnitDef_getFlareReloadTime)?;
33        Ok(unsafe { get_flare_reload_time_func(self.ai_id, self.def_id) })
34    }
35
36    pub fn efficiency(&self) -> Result<f32, Box<dyn Error>> {
37        let get_flare_efficiency_func = get_callback!(self.ai_id, UnitDef_getFlareEfficiency)?;
38        Ok(unsafe { get_flare_efficiency_func(self.ai_id, self.def_id) })
39    }
40
41    pub fn delay(&self) -> Result<f32, Box<dyn Error>> {
42        let get_flare_delay_func = get_callback!(self.ai_id, UnitDef_getFlareDelay)?;
43        Ok(unsafe { get_flare_delay_func(self.ai_id, self.def_id) })
44    }
45
46    pub fn drop_vector(&self) -> Result<[f32; 3], Box<dyn Error>> {
47        let get_flare_drop_vector_func = get_callback!(self.ai_id, UnitDef_getFlareDropVector)?;
48
49        let mut ret = [0.0; 3];
50        unsafe { get_flare_drop_vector_func(self.ai_id, self.def_id, ret.as_mut_ptr()) };
51
52        Ok(ret)
53    }
54
55    pub fn time(&self) -> Result<i32, Box<dyn Error>> {
56        let get_flare_time_func = get_callback!(self.ai_id, UnitDef_getFlareTime)?;
57        Ok(unsafe { get_flare_time_func(self.ai_id, self.def_id) })
58    }
59
60    pub fn salvo_size(&self) -> Result<i32, Box<dyn Error>> {
61        let get_flare_salvo_size_func = get_callback!(self.ai_id, UnitDef_getFlareSalvoSize)?;
62        Ok(unsafe { get_flare_salvo_size_func(self.ai_id, self.def_id) })
63    }
64
65    pub fn salvo_delay(&self) -> Result<i32, Box<dyn Error>> {
66        let get_flare_salvo_delay_func = get_callback!(self.ai_id, UnitDef_getFlareSalvoDelay)?;
67        Ok(unsafe { get_flare_salvo_delay_func(self.ai_id, self.def_id) })
68    }
69
70    pub fn all(&self) -> Result<UnitFlareAll, Box<dyn Error>> {
71        Ok(UnitFlareAll {
72            able_to_drop: self.able_to_drop()?,
73            reload_time: self.reload_time()?,
74            efficiency: self.efficiency()?,
75            delay: self.delay()?,
76            drop_vector: self.drop_vector()?,
77            time: self.time()?,
78            salvo_size: self.salvo_size()?,
79            salvo_delay: self.salvo_delay()?,
80        })
81    }
82}