use super::{LightList, LightState};
use crate::{
error::ffi::with_ffi_error,
rpc::{LightGroup, LightId},
sensor::data::Color,
};
use carla_sys::carla_rust::client::FfiLightManager;
use cxx::SharedPtr;
use derivative::Derivative;
use static_assertions::assert_impl_all;
#[cfg_attr(carla_version_0916, doc = "")]
#[cfg_attr(
carla_version_0916,
doc = " [`carla.LightManager`]: https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager"
)]
#[cfg_attr(carla_version_0915, doc = "")]
#[cfg_attr(
carla_version_0915,
doc = " [`carla.LightManager`]: https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager"
)]
#[cfg_attr(carla_version_0914, doc = "")]
#[cfg_attr(
carla_version_0914,
doc = " [`carla.LightManager`]: https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager"
)]
#[derive(Clone, Derivative)]
#[derivative(Debug)]
#[repr(transparent)]
pub struct LightManager {
#[derivative(Debug = "ignore")]
inner: SharedPtr<FfiLightManager>,
}
impl LightManager {
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.get_all_lights](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.get_all_lights)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.get_all_lights](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.get_all_lights)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.get_all_lights](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.get_all_lights)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn all_lights(&self, group: LightGroup) -> crate::Result<LightList> {
let ptr = with_ffi_error("all_lights", |e| self.inner.GetAllLights(group, e))?;
Ok(unsafe { LightList::from_cxx(ptr).unwrap_unchecked() })
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.get_color](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.get_color)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.get_color](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.get_color)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.get_color](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.get_color)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn color(&self, id: LightId) -> crate::Result<Color> {
with_ffi_error("color", |e| self.inner.GetColor(id, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.get_intensity](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.get_intensity)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.get_intensity](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.get_intensity)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.get_intensity](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.get_intensity)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn intensity(&self, id: LightId) -> crate::Result<f32> {
with_ffi_error("intensity", |e| self.inner.GetIntensity(id, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.get_light_state](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.get_light_state)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.get_light_state](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.get_light_state)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.get_light_state](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.get_light_state)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn light_state(&self, id: LightId) -> crate::Result<LightState> {
with_ffi_error("light_state", |e| self.inner.GetLightState(id, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.get_light_group](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.get_light_group)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.get_light_group](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.get_light_group)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.get_light_group](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.get_light_group)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn light_group(&self, id: LightId) -> crate::Result<LightGroup> {
with_ffi_error("light_group", |e| self.inner.GetLightGroup(id, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.is_active](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.is_active)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.is_active](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.is_active)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.is_active](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.is_active)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn is_active(&self, id: LightId) -> crate::Result<bool> {
with_ffi_error("is_active", |e| self.inner.IsActive(id, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.set_active](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.set_active)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.set_active](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.set_active)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.set_active](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.set_active)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_active(&self, id: LightId, active: bool) -> crate::Result<()> {
with_ffi_error("set_active", |e| self.inner.SetActive(id, active, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.set_color](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.set_color)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.set_color](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.set_color)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.set_color](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.set_color)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_color(&self, id: LightId, color: Color) -> crate::Result<()> {
with_ffi_error("set_color", |e| self.inner.SetColor(id, color, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.set_intensity](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.set_intensity)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.set_intensity](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.set_intensity)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.set_intensity](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.set_intensity)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_intensity(&self, id: LightId, intensity: f32) -> crate::Result<()> {
with_ffi_error("set_intensity", |e| {
self.inner.SetIntensity(id, intensity, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.set_light_state](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.set_light_state)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.set_light_state](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.set_light_state)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.set_light_state](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.set_light_state)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_light_state(&self, id: LightId, state: &LightState) -> crate::Result<()> {
with_ffi_error("set_light_state", |e| {
self.inner.SetLightState(id, state, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.LightManager.set_light_group](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.LightManager.set_light_group)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.LightManager.set_light_group](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.LightManager.set_light_group)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.LightManager.set_light_group](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.LightManager.set_light_group)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_light_group(&self, id: LightId, group: LightGroup) -> crate::Result<()> {
with_ffi_error("set_light_group", |e| {
self.inner.SetLightGroup(id, group, e)
})
}
pub fn turned_on_lights(&self, group: LightGroup) -> crate::Result<LightList> {
let ptr = with_ffi_error("turned_on_lights", |e| {
self.inner.GetTurnedOnLights(group, e)
})?;
Ok(unsafe { LightList::from_cxx(ptr).unwrap_unchecked() })
}
pub fn turned_off_lights(&self, group: LightGroup) -> crate::Result<LightList> {
let ptr = with_ffi_error("turned_off_lights", |e| {
self.inner.GetTurnedOffLights(group, e)
})?;
Ok(unsafe { LightList::from_cxx(ptr).unwrap_unchecked() })
}
pub fn turn_on_list(&self, lights: &mut LightList) -> crate::Result<()> {
with_ffi_error("turn_on_list", |e| {
self.inner.TurnOnList(lights.inner.pin_mut(), e)
})
}
pub fn turn_off_list(&self, lights: &mut LightList) -> crate::Result<()> {
with_ffi_error("turn_off_list", |e| {
self.inner.TurnOffList(lights.inner.pin_mut(), e)
})
}
pub fn set_color_list(&self, lights: &mut LightList, color: Color) -> crate::Result<()> {
with_ffi_error("set_color_list", |e| {
self.inner.SetColorList1(lights.inner.pin_mut(), color, e)
})
}
pub fn set_intensity_list(&self, lights: &mut LightList, intensity: f32) -> crate::Result<()> {
with_ffi_error("set_intensity_list", |e| {
self.inner
.SetIntensityList1(lights.inner.pin_mut(), intensity, e)
})
}
pub fn set_light_state_list(
&self,
lights: &mut LightList,
state: LightState,
) -> crate::Result<()> {
with_ffi_error("set_light_state_list", |e| {
self.inner
.SetLightStateList1(lights.inner.pin_mut(), state, e)
})
}
pub fn set_light_group_list(
&self,
lights: &mut LightList,
group: LightGroup,
) -> crate::Result<()> {
with_ffi_error("set_light_group_list", |e| {
self.inner
.SetLightGroupList1(lights.inner.pin_mut(), group, e)
})
}
pub fn from_cxx(ptr: SharedPtr<FfiLightManager>) -> Option<Self> {
if ptr.is_null() {
return None;
}
Some(Self { inner: ptr })
}
}
assert_impl_all!(LightManager: Send, Sync);