spring_ai_rs/ai_interface/callback/unit_def/
vision.rs1use std::error::Error;
2
3use serde::{Deserialize, Serialize};
4
5use crate::get_callback;
6
7#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
8pub struct UnitVision {
9 pub ai_id: i32,
10 pub def_id: i32,
11}
12
13#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
14pub struct UnitVisionAll {
15 pub los_radius: f32,
16 pub air_los_radius: f32,
17 pub los_height: f32,
18 pub radar_radius: i32,
19 pub sonar_radius: i32,
20}
21
22impl UnitVision {
23 pub fn los_radius(&self) -> Result<f32, Box<dyn Error>> {
24 let get_los_radius_func = get_callback!(self.ai_id, UnitDef_getLosRadius)?;
25 Ok(unsafe { get_los_radius_func(self.ai_id, self.def_id) })
26 }
27
28 pub fn air_los_radius(&self) -> Result<f32, Box<dyn Error>> {
29 let get_air_los_radius_func = get_callback!(self.ai_id, UnitDef_getAirLosRadius)?;
30 Ok(unsafe { get_air_los_radius_func(self.ai_id, self.def_id) })
31 }
32
33 pub fn los_height(&self) -> Result<f32, Box<dyn Error>> {
34 let get_los_height_func = get_callback!(self.ai_id, UnitDef_getLosHeight)?;
35 Ok(unsafe { get_los_height_func(self.ai_id, self.def_id) })
36 }
37
38 pub fn radar_radius(&self) -> Result<i32, Box<dyn Error>> {
39 let get_radar_radius_func = get_callback!(self.ai_id, UnitDef_getRadarRadius)?;
40 Ok(unsafe { get_radar_radius_func(self.ai_id, self.def_id) })
41 }
42
43 pub fn sonar_radius(&self) -> Result<i32, Box<dyn Error>> {
44 let get_sonar_radius_func = get_callback!(self.ai_id, UnitDef_getSonarRadius)?;
45 Ok(unsafe { get_sonar_radius_func(self.ai_id, self.def_id) })
46 }
47
48 pub fn all(&self) -> Result<UnitVisionAll, Box<dyn Error>> {
49 Ok(UnitVisionAll {
50 los_radius: self.los_radius()?,
51 air_los_radius: self.air_los_radius()?,
52 los_height: self.los_height()?,
53 radar_radius: self.radar_radius()?,
54 sonar_radius: self.sonar_radius()?,
55 })
56 }
57}