spring_ai_rs/ai_interface/callback/unit_def/
detection.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 UnitDetection {
9    pub ai_id: i32,
10    pub def_id: i32,
11}
12
13#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
14pub struct UnitDetectionAll {
15    pub jammar_radius: i32,
16    pub sonar_jam_radius: i32,
17    pub seismic_radius: i32,
18    pub seismic_signature: f32,
19    pub is_stealth: bool,
20    pub is_sonar_stealth: bool,
21}
22
23impl UnitDetection {
24    pub fn jammer_radius(&self) -> Result<i32, Box<dyn Error>> {
25        let get_jammer_radius_func = get_callback!(self.ai_id, UnitDef_getJammerRadius)?;
26        Ok(unsafe { get_jammer_radius_func(self.ai_id, self.def_id) })
27    }
28
29    pub fn sonar_jam_radius(&self) -> Result<i32, Box<dyn Error>> {
30        let get_sonar_jam_radius_func = get_callback!(self.ai_id, UnitDef_getSonarJamRadius)?;
31        Ok(unsafe { get_sonar_jam_radius_func(self.ai_id, self.def_id) })
32    }
33
34    pub fn seismic_radius(&self) -> Result<i32, Box<dyn Error>> {
35        let get_seismic_radius_func = get_callback!(self.ai_id, UnitDef_getSeismicRadius)?;
36        Ok(unsafe { get_seismic_radius_func(self.ai_id, self.def_id) })
37    }
38
39    pub fn seismic_signature(&self) -> Result<f32, Box<dyn Error>> {
40        let get_seismic_signature_func = get_callback!(self.ai_id, UnitDef_getSeismicSignature)?;
41        Ok(unsafe { get_seismic_signature_func(self.ai_id, self.def_id) })
42    }
43
44    pub fn is_stealth(&self) -> Result<bool, Box<dyn Error>> {
45        let get_is_stealth_func = get_callback!(self.ai_id, UnitDef_isStealth)?;
46        Ok(unsafe { get_is_stealth_func(self.ai_id, self.def_id) })
47    }
48
49    pub fn is_sonar_stealth(&self) -> Result<bool, Box<dyn Error>> {
50        let get_is_sonar_stealth_func = get_callback!(self.ai_id, UnitDef_isSonarStealth)?;
51        Ok(unsafe { get_is_sonar_stealth_func(self.ai_id, self.def_id) })
52    }
53
54    pub fn all(&self) -> Result<UnitDetectionAll, Box<dyn Error>> {
55        Ok(UnitDetectionAll {
56            jammar_radius: self.jammer_radius()?,
57            sonar_jam_radius: self.sonar_jam_radius()?,
58            seismic_radius: self.seismic_radius()?,
59            seismic_signature: self.seismic_signature()?,
60            is_stealth: self.is_stealth()?,
61            is_sonar_stealth: self.is_sonar_stealth()?,
62        })
63    }
64}