spring_ai_rs/ai_interface/callback/unit_def/
flare.rs1use 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}