use super::{Action, ActionBuffer, PrivateAction};
use crate::{
client::ActorBase, error::ffi::with_ffi_error, geom::Location, rpc::ActorId,
utils::CxxVectorExt,
};
use carla_sys::carla_rust::{client::FfiActor, traffic_manager::FfiTrafficManager};
use cxx::{CxxVector, SharedPtr, UniquePtr};
use derivative::Derivative;
use static_assertions::assert_impl_all;
use std::time::Duration;
#[cfg_attr(carla_version_0916, doc = "")]
#[cfg_attr(
carla_version_0916,
doc = " [`carla.TrafficManager`]: https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager"
)]
#[cfg_attr(carla_version_0915, doc = "")]
#[cfg_attr(
carla_version_0915,
doc = " [`carla.TrafficManager`]: https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager"
)]
#[cfg_attr(carla_version_0914, doc = "")]
#[cfg_attr(
carla_version_0914,
doc = " [`carla.TrafficManager`]: https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager"
)]
#[derive(Derivative)]
#[derivative(Debug)]
#[repr(transparent)]
pub struct TrafficManager {
#[derivative(Debug = "ignore")]
inner: UniquePtr<FfiTrafficManager>,
}
impl TrafficManager {
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.get_port](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.get_port)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.get_port](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.get_port)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.get_port](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.get_port)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn port(&self) -> u16 {
self.inner.Port()
}
pub fn is_valid_port(&self) -> bool {
self.inner.IsValidPort()
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_osm_mode](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_osm_mode)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_osm_mode](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_osm_mode)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_osm_mode](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_osm_mode)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_osm_mode(&mut self, yes: bool) -> crate::Result<()> {
with_ffi_error("set_osm_mode", |e| self.inner.pin_mut().SetOSMMode(yes, e))
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_path](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_path)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_path](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_path)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_path](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_path)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_custom_path<A, P>(
&mut self,
actor: &A,
path: &[P],
empty_buffer: bool,
) -> crate::Result<()>
where
A: ActorBase,
P: AsRef<Location>,
{
let path = path.iter().fold(CxxVector::new_typed(), |mut vec, point| {
let point = point.as_ref();
vec.pin_mut().push(point.into_ffi());
vec
});
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_custom_path", |e| {
self.inner.pin_mut().SetCustomPath(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
&path,
empty_buffer,
e,
)
})
}
pub fn remove_upload_path(
&mut self,
actor_id: ActorId,
remove_path: bool,
) -> crate::Result<()> {
let actor_id = autocxx::c_uint(actor_id);
with_ffi_error("remove_upload_path", |e| {
self.inner
.pin_mut()
.RemoveUploadPath(&actor_id, remove_path, e)
})
}
pub fn update_upload_path<P>(&mut self, actor_id: ActorId, path: &[P]) -> crate::Result<()>
where
P: AsRef<Location>,
{
let path = path.iter().fold(CxxVector::new_typed(), |mut vec, point| {
let point = point.as_ref();
vec.pin_mut().push(point.into_ffi());
vec
});
let actor_id = autocxx::c_uint(actor_id);
with_ffi_error("update_upload_path", |e| {
self.inner.pin_mut().UpdateUploadPath(&actor_id, &path, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_imported_route](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_imported_route)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_imported_route](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_imported_route)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_imported_route](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_imported_route)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_import_route<A: ActorBase>(
&mut self,
actor: &A,
route: &[u8],
empty_buffer: bool,
) -> crate::Result<()> {
let route = route.iter().fold(CxxVector::new_typed(), |mut vec, &val| {
vec.pin_mut().push(val);
vec
});
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_import_route", |e| {
self.inner.pin_mut().SetImportedRoute(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
route.as_ref().unwrap(),
empty_buffer,
e,
)
})
}
pub fn remove_imported_route(
&mut self,
actor_id: ActorId,
remove_path: bool,
) -> crate::Result<()> {
let actor_id = autocxx::c_uint(actor_id);
with_ffi_error("remove_imported_route", |e| {
self.inner
.pin_mut()
.RemoveImportedRoute(&actor_id, remove_path, e)
})
}
pub fn update_imported_route(&mut self, actor_id: ActorId, route: &[u8]) -> crate::Result<()> {
let route = route.iter().fold(CxxVector::new_typed(), |mut vec, &val| {
vec.pin_mut().push(val);
vec
});
let actor_id = autocxx::c_uint(actor_id);
with_ffi_error("update_imported_route", |e| {
self.inner
.pin_mut()
.UpdateImportedRoute(&actor_id, route.as_ref().unwrap(), e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_respawn_dormant_vehicles](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_respawn_dormant_vehicles)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_respawn_dormant_vehicles](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_respawn_dormant_vehicles)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_respawn_dormant_vehicles](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_respawn_dormant_vehicles)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_respawn_dormant_vehicles(&mut self, yes: bool) -> crate::Result<()> {
with_ffi_error("set_respawn_dormant_vehicles", |e| {
self.inner.pin_mut().SetRespawnDormantVehicles(yes, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_boundaries_respawn_dormant_vehicles](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_boundaries_respawn_dormant_vehicles)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_boundaries_respawn_dormant_vehicles](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_boundaries_respawn_dormant_vehicles)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_boundaries_respawn_dormant_vehicles](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_boundaries_respawn_dormant_vehicles)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_boundaries_respawn_dormant_vehicles(
&mut self,
lower_bound: f32,
upper_bound: f32,
) -> crate::Result<()> {
with_ffi_error("set_boundaries_respawn_dormant_vehicles", |e| {
self.inner
.pin_mut()
.SetBoundariesRespawnDormantVehicles(lower_bound, upper_bound, e)
})
}
pub fn set_max_boundaries(&mut self, lower: f32, upper: f32) -> crate::Result<()> {
with_ffi_error("set_max_boundaries", |e| {
self.inner.pin_mut().SetMaxBoundaries(lower, upper, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_hybrid_physics_mode](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_hybrid_physics_mode)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_hybrid_physics_mode](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_hybrid_physics_mode)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_hybrid_physics_mode](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_hybrid_physics_mode)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_hybrid_physics_mode(&mut self, yes: bool) -> crate::Result<()> {
with_ffi_error("set_hybrid_physics_mode", |e| {
self.inner.pin_mut().SetHybridPhysicsMode(yes, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_hybrid_physics_radius](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_hybrid_physics_radius)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_hybrid_physics_radius](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_hybrid_physics_radius)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_hybrid_physics_radius](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_hybrid_physics_radius)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_hybrid_physics_radius(&mut self, radius: f32) -> crate::Result<()> {
with_ffi_error("set_hybrid_physics_radius", |e| {
self.inner.pin_mut().SetHybridPhysicsRadius(radius, e)
})
}
pub fn register_vehicles<A>(&mut self, actors: &[A]) -> crate::Result<()>
where
A: ActorBase,
{
let actors: Vec<SharedPtr<FfiActor>> =
actors.iter().map(|actor| actor.cxx_actor()).collect();
let ptr = actors.as_ptr();
let len = actors.len();
with_ffi_error("register_vehicles", |e| unsafe {
self.inner.pin_mut().RegisterVehicles(ptr, len, e)
})
}
pub fn unregister_vehicles<A>(&mut self, actors: &[A]) -> crate::Result<()>
where
A: ActorBase,
{
let actors: Vec<SharedPtr<FfiActor>> =
actors.iter().map(|actor| actor.cxx_actor()).collect();
let ptr = actors.as_ptr();
let len = actors.len();
with_ffi_error("unregister_vehicles", |e| unsafe {
self.inner.pin_mut().UnregisterVehicles(ptr, len, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.vehicle_percentage_speed_difference](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.vehicle_percentage_speed_difference)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.vehicle_percentage_speed_difference](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.vehicle_percentage_speed_difference)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.vehicle_percentage_speed_difference](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.vehicle_percentage_speed_difference)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_percentage_speed_difference<A>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()>
where
A: ActorBase,
{
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_percentage_speed_difference", |e| {
self.inner.pin_mut().SetPercentageSpeedDifference(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.update_vehicle_lights](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.update_vehicle_lights)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.update_vehicle_lights](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.update_vehicle_lights)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.update_vehicle_lights](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.update_vehicle_lights)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_lane_offset<A: ActorBase>(&mut self, actor: &A, offset: f32) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_lane_offset", |e| {
self.inner.pin_mut().SetLaneOffset(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
offset,
e,
)
})
}
pub fn set_desired_speed<A: ActorBase>(&mut self, actor: &A, value: f32) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_desired_speed", |e| {
self.inner.pin_mut().SetDesiredSpeed(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
value,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.global_percentage_speed_difference](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.global_percentage_speed_difference)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.global_percentage_speed_difference](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.global_percentage_speed_difference)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.global_percentage_speed_difference](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.global_percentage_speed_difference)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_global_percentage_speed_difference(&mut self, percentage: f32) -> crate::Result<()> {
with_ffi_error("set_global_percentage_speed_difference", |e| {
self.inner
.pin_mut()
.SetGlobalPercentageSpeedDifference(percentage, e)
})
}
pub fn set_global_lane_offset(&mut self, offset: f32) -> crate::Result<()> {
with_ffi_error("set_global_lane_offset", |e| {
self.inner.pin_mut().SetGlobalLaneOffset(offset, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.update_vehicle_lights](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.update_vehicle_lights)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.update_vehicle_lights](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.update_vehicle_lights)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.update_vehicle_lights](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.update_vehicle_lights)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_update_vehicle_lights<A: ActorBase>(
&mut self,
actor: &A,
do_update: bool,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_update_vehicle_lights", |e| {
self.inner.pin_mut().SetUpdateVehicleLights(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
do_update,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.collision_detection](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.collision_detection)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.collision_detection](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.collision_detection)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.collision_detection](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.collision_detection)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_collision_detection<A1: ActorBase, A2: ActorBase>(
&mut self,
reference_actor: &A1,
other_actor: &A2,
detect_collision: bool,
) -> crate::Result<()> {
let cxx_ref = reference_actor.cxx_actor();
let cxx_other = other_actor.cxx_actor();
with_ffi_error("set_collision_detection", |e| {
self.inner.pin_mut().SetCollisionDetection(
unsafe { cxx_ref.as_ref().unwrap_unchecked() },
unsafe { cxx_other.as_ref().unwrap_unchecked() },
detect_collision,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.force_lane_change](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.force_lane_change)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.force_lane_change](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.force_lane_change)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.force_lane_change](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.force_lane_change)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_force_lane_change<A: ActorBase>(
&mut self,
actor: &A,
direction: bool,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_force_lane_change", |e| {
self.inner.pin_mut().SetForceLaneChange(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
direction,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.auto_lane_change](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.auto_lane_change)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.auto_lane_change](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.auto_lane_change)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.auto_lane_change](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.auto_lane_change)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_auto_lane_change<A: ActorBase>(
&mut self,
actor: &A,
enable: bool,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_auto_lane_change", |e| {
self.inner.pin_mut().SetAutoLaneChange(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
enable,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.distance_to_leading_vehicle](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.distance_to_leading_vehicle)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.distance_to_leading_vehicle](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.distance_to_leading_vehicle)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.distance_to_leading_vehicle](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.distance_to_leading_vehicle)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_distance_to_leading_vehicle<A: ActorBase>(
&mut self,
actor: &A,
distance: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_distance_to_leading_vehicle", |e| {
self.inner.pin_mut().SetDistanceToLeadingVehicle(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
distance,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.ignore_walkers_percentage](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.ignore_walkers_percentage)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.ignore_walkers_percentage](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.ignore_walkers_percentage)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.ignore_walkers_percentage](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.ignore_walkers_percentage)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_percentage_ignore_walkers<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_percentage_ignore_walkers", |e| {
self.inner.pin_mut().SetPercentageIgnoreWalkers(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.ignore_vehicles_percentage](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.ignore_vehicles_percentage)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.ignore_vehicles_percentage](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.ignore_vehicles_percentage)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.ignore_vehicles_percentage](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.ignore_vehicles_percentage)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_percentage_ignore_vehicles<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_percentage_ignore_vehicles", |e| {
self.inner.pin_mut().SetPercentageIgnoreVehicles(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.ignore_lights_percentage](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.ignore_lights_percentage)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.ignore_lights_percentage](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.ignore_lights_percentage)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.ignore_lights_percentage](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.ignore_lights_percentage)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_percentage_running_light<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_percentage_running_light", |e| {
self.inner.pin_mut().SetPercentageRunningLight(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.ignore_signs_percentage](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.ignore_signs_percentage)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.ignore_signs_percentage](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.ignore_signs_percentage)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.ignore_signs_percentage](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.ignore_signs_percentage)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_percentage_running_sign<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_percentage_running_sign", |e| {
self.inner.pin_mut().SetPercentageRunningSign(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_synchronous_mode](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_synchronous_mode)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_synchronous_mode](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_synchronous_mode)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_synchronous_mode](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_synchronous_mode)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_synchronous_mode(&mut self, yes: bool) -> crate::Result<()> {
with_ffi_error("set_synchronous_mode", |e| {
self.inner.pin_mut().SetSynchronousMode(yes, e)
})
}
pub fn set_synchronous_mode_time_out(&mut self, time: Duration) -> crate::Result<()> {
let millis = time.as_millis();
let millis_f64 = if millis > f64::MAX as u128 {
f64::MAX
} else {
millis as f64
};
with_ffi_error("set_synchronous_mode_time_out", |e| {
self.inner
.pin_mut()
.SetSynchronousModeTimeOutInMiliSecond(millis_f64, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.tick](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.tick)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.tick](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.tick)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.tick](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.tick)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn synchronous_tick(&mut self) -> crate::Result<bool> {
with_ffi_error("synchronous_tick", |e| {
self.inner.pin_mut().SynchronousTick(e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_global_distance_to_leading_vehicle](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_global_distance_to_leading_vehicle)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_global_distance_to_leading_vehicle](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_global_distance_to_leading_vehicle)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_global_distance_to_leading_vehicle](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_global_distance_to_leading_vehicle)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_global_distance_to_leading_vehicle(&mut self, distance: f32) -> crate::Result<()> {
with_ffi_error("set_global_distance_to_leading_vehicle", |e| {
self.inner
.pin_mut()
.SetGlobalDistanceToLeadingVehicle(distance, e)
})
}
#[cfg(not(carla_version_0916))]
pub fn set_keep_right_percentage<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_keep_right_percentage", |e| {
self.inner.pin_mut().SetKeepRightPercentage(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.random_left_lanechange_percentage](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.random_left_lanechange_percentage)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.random_left_lanechange_percentage](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.random_left_lanechange_percentage)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.random_left_lanechange_percentage](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.random_left_lanechange_percentage)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_random_left_lane_change_percentage<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_random_left_lane_change_percentage", |e| {
self.inner.pin_mut().SetRandomLeftLaneChangePercentage(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.random_right_lanechange_percentage](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.random_right_lanechange_percentage)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.random_right_lanechange_percentage](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.random_right_lanechange_percentage)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.random_right_lanechange_percentage](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.random_right_lanechange_percentage)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_random_right_lane_change_percentage<A: ActorBase>(
&mut self,
actor: &A,
percentage: f32,
) -> crate::Result<()> {
let cxx_actor = actor.cxx_actor();
with_ffi_error("set_random_right_lane_change_percentage", |e| {
self.inner.pin_mut().SetRandomRightLaneChangePercentage(
unsafe { cxx_actor.as_ref().unwrap_unchecked() },
percentage,
e,
)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.set_random_device_seed](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.set_random_device_seed)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.set_random_device_seed](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.set_random_device_seed)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.set_random_device_seed](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.set_random_device_seed)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn set_random_device_seed(&mut self, seed: u64) -> crate::Result<()> {
with_ffi_error("set_random_device_seed", |e| {
self.inner.pin_mut().SetRandomDeviceSeed(seed, e)
})
}
#[cfg_attr(
carla_version_0916,
doc = " See [carla.TrafficManager.shut_down](https://carla.readthedocs.io/en/0.9.16/python_api/#carla.TrafficManager.shut_down)"
)]
#[cfg_attr(
carla_version_0915,
doc = " See [carla.TrafficManager.shut_down](https://carla.readthedocs.io/en/0.9.15/python_api/#carla.TrafficManager.shut_down)"
)]
#[cfg_attr(
carla_version_0914,
doc = " See [carla.TrafficManager.shut_down](https://carla.readthedocs.io/en/0.9.14/python_api/#carla.TrafficManager.shut_down)"
)]
#[cfg_attr(
any(carla_version_0916, carla_version_0915, carla_version_0914),
doc = " in the Python API."
)]
pub fn shutdown(mut self) -> crate::Result<()> {
with_ffi_error("shutdown", |e| self.inner.pin_mut().ShutDown(e))?;
self.inner = UniquePtr::null();
Ok(())
}
pub fn next_action(&mut self, actor_id: ActorId) -> crate::Result<Action> {
let actor_id = autocxx::c_uint(actor_id);
let ptr = with_ffi_error("next_action", |e| {
self.inner.pin_mut().GetNextAction(&actor_id, e)
})?;
Ok(unsafe { PrivateAction::from_cxx(ptr).unwrap_unchecked() }.to_pair())
}
pub fn action_buffer(&mut self, actor_id: ActorId) -> crate::Result<ActionBuffer> {
let actor_id = autocxx::c_uint(actor_id);
let ptr = with_ffi_error("action_buffer", |e| {
self.inner.pin_mut().GetActionBuffer(&actor_id, e)
})?;
Ok(unsafe { ActionBuffer::from_cxx(ptr).unwrap_unchecked() })
}
pub(crate) fn from_cxx(ptr: UniquePtr<FfiTrafficManager>) -> Option<Self> {
if ptr.is_null() {
return None;
}
Some(Self { inner: ptr })
}
}
impl Drop for TrafficManager {
fn drop(&mut self) {
if !self.inner.is_null() {
let _ = with_ffi_error("shutdown", |e| self.inner.pin_mut().ShutDown(e));
}
}
}
assert_impl_all!(TrafficManager: Send);