spring_ai_rs/ai_interface/callback/unit_def/
cloak.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 UnitCloak {
9    pub ai_id: i32,
10    pub def_id: i32,
11}
12
13#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
14pub struct UnitCloakAll {
15    pub able_to_cloak: bool,
16    pub start_cloaked: bool,
17    pub cloak_cost: f32,
18    pub cloak_cost_moving: f32,
19    pub decloak_distance: f32,
20    pub decloak_spherical: bool,
21    pub decloak_on_fire: bool,
22}
23
24impl UnitCloak {
25    pub fn able_to_cloak(&self) -> Result<bool, Box<dyn Error>> {
26        let get_able_to_cloak_func = get_callback!(self.ai_id, UnitDef_isAbleToCloak)?;
27        Ok(unsafe { get_able_to_cloak_func(self.ai_id, self.def_id) })
28    }
29
30    pub fn start_cloaked(&self) -> Result<bool, Box<dyn Error>> {
31        let get_start_cloaked_func = get_callback!(self.ai_id, UnitDef_isStartCloaked)?;
32        Ok(unsafe { get_start_cloaked_func(self.ai_id, self.def_id) })
33    }
34
35    pub fn cloak_cost(&self) -> Result<f32, Box<dyn Error>> {
36        let get_cloak_cost_func = get_callback!(self.ai_id, UnitDef_getCloakCost)?;
37        Ok(unsafe { get_cloak_cost_func(self.ai_id, self.def_id) })
38    }
39
40    pub fn cloak_cost_moving(&self) -> Result<f32, Box<dyn Error>> {
41        let get_cloak_cost_moving_func = get_callback!(self.ai_id, UnitDef_getCloakCostMoving)?;
42        Ok(unsafe { get_cloak_cost_moving_func(self.ai_id, self.def_id) })
43    }
44
45    pub fn decloak_distance(&self) -> Result<f32, Box<dyn Error>> {
46        let get_decloak_distance_func = get_callback!(self.ai_id, UnitDef_getDecloakDistance)?;
47        Ok(unsafe { get_decloak_distance_func(self.ai_id, self.def_id) })
48    }
49
50    pub fn decloak_spherical(&self) -> Result<bool, Box<dyn Error>> {
51        let get_is_decloak_spherical_func = get_callback!(self.ai_id, UnitDef_isDecloakSpherical)?;
52        Ok(unsafe { get_is_decloak_spherical_func(self.ai_id, self.def_id) })
53    }
54
55    pub fn decloak_on_fire(&self) -> Result<bool, Box<dyn Error>> {
56        let get_is_decloak_on_fire_func = get_callback!(self.ai_id, UnitDef_isDecloakOnFire)?;
57        Ok(unsafe { get_is_decloak_on_fire_func(self.ai_id, self.def_id) })
58    }
59
60    pub fn all(&self) -> Result<UnitCloakAll, Box<dyn Error>> {
61        Ok(UnitCloakAll {
62            able_to_cloak: self.able_to_cloak()?,
63            start_cloaked: self.start_cloaked()?,
64            cloak_cost: self.cloak_cost()?,
65            cloak_cost_moving: self.cloak_cost_moving()?,
66            decloak_distance: self.decloak_distance()?,
67            decloak_spherical: self.decloak_spherical()?,
68            decloak_on_fire: self.decloak_on_fire()?,
69        })
70    }
71}