20#ifndef LIBCARLA_NO_EXCEPTIONS
28#ifndef LIBCARLA_NO_EXCEPTIONS
29 }
catch (
const std::exception &e) {
30 log_error(
"exception in the light manager destructor:", e.what());
54 std::vector<Light> result;
58 if((type == LightGroup::None) || (group == type)) {
59 auto it_light =
_lights.find(lights_state.first);
60 result.push_back(it_light->second);
68 for(
Light& light : lights) {
74 for(
Light& light : lights) {
80 size_t lights_to_update = (lights.size() < active.size()) ? lights.size() : active.size();
81 for(
size_t i = 0; i < lights_to_update; i++) {
87 std::vector<bool> result;
88 for(
Light& light : lights) {
89 result.push_back(
IsActive(light._id) );
95 std::vector<Light> result;
100 if( (type == LightGroup::None || group == type) && state.
_active ) {
101 auto it_light =
_lights.find(lights_state.first);
102 result.push_back(it_light->second);
110 std::vector<Light> result;
115 if( (type == LightGroup::None || group == type) && !state.
_active ) {
116 auto it_light =
_lights.find(lights_state.first);
117 result.push_back(it_light->second);
125 for(
Light& light : lights) {
131 size_t lights_to_update = (lights.size() < colors.size()) ? lights.size() : colors.size();
132 for(
size_t i = 0; i < lights_to_update; i++) {
138 std::vector<Color> result;
139 for(
Light& light : lights) {
140 result.push_back(
GetColor(light._id) );
146 for(
Light& light : lights) {
152 size_t lights_to_update = (lights.size() < intensities.size()) ? lights.size() : intensities.size();
153 for(
size_t i = 0; i < lights_to_update; i++) {
159 std::vector<float> result;
160 for(
Light& light : lights) {
167 for(
Light& light : lights) {
173 size_t lights_to_update = (lights.size() < groups.size()) ? lights.size() : groups.size();
174 for(
size_t i = 0; i < lights_to_update; i++) {
180 std::vector<LightGroup> result;
181 for(
Light& light : lights) {
188 for(
Light& light : lights) {
194 size_t lights_to_update = (lights.size() < states.size()) ? lights.size() : states.size();
195 for(
size_t i = 0; i < lights_to_update; i++) {
201 std::vector<LightState> result;
202 for(
Light& light : lights) {
229 std::scoped_lock<std::mutex> lock(
_mutex);
237 std::scoped_lock<std::mutex> lock(
_mutex);
245 std::scoped_lock<std::mutex> lock(
_mutex);
253 std::scoped_lock<std::mutex> lock(
_mutex);
267 std::scoped_lock<std::mutex> lock(
_mutex);
284 std::scoped_lock<std::mutex> lock(
_mutex);
286 std::vector<rpc::LightState> lights_snapshot =
_episode.Lock()->QueryLightsStateToServer();
295 std::unordered_map<LightId, LightState> lights_state;
296 std::unordered_map<LightId, Light> lights;
297 for(
const auto& it : lights_snapshot) {
300 Color(it._color.r, it._color.g, it._color.b),
304 lights[it._id] =
Light(lm, it._location, it._id);
311 std::scoped_lock<std::mutex> lock(
_mutex);
314 std::vector<rpc::LightState> message;
316 auto it_light =
_lights.find(it.first);
317 if(it_light !=
_lights.end()) {
319 it_light->second.GetLocation(),
320 it.second._intensity,
322 rpc::Color(it.second._color.r, it.second._color.g, it.second._color.b),
325 state.
_id = it.first;
327 message.push_back(state);
330 _episode.Lock()->UpdateServerLightsState(message, discard_client);
338 std::scoped_lock<std::mutex> lock(
_mutex);
345 _episode.Lock()->UpdateDayNightCycle(active);
std::vector< Light > GetTurnedOffLights(LightGroup type=LightGroup::None) const
size_t _on_tick_register_id
size_t _on_light_update_register_id
std::vector< Light > GetTurnedOnLights(LightGroup type=LightGroup::None) const
std::vector< LightGroup > GetLightGroup(std::vector< Light > &lights) const
void SetIntensity(std::vector< Light > &lights, float intensity)
std::vector< bool > IsActive(std::vector< Light > &lights) const
std::vector< Color > GetColor(std::vector< Light > &lights) const
const LightState & RetrieveLightState(LightId id) const
void SetLightState(std::vector< Light > &lights, LightState state)
std::unordered_map< LightId, LightState > _lights_changes
void TurnOff(std::vector< Light > &lights)
void SetLightStateNoLock(LightId id, const LightState &new_state)
detail::WeakEpisodeProxy _episode
void SetColor(std::vector< Light > &lights, Color color)
void QueryLightsStateToServer()
void TurnOn(std::vector< Light > &lights)
std::vector< float > GetIntensity(std::vector< Light > &lights) const
void SetDayNightCycle(const bool active)
std::unordered_map< LightId, LightState > _lights_state
void SetLightGroup(std::vector< Light > &lights, LightGroup group)
void SetEpisode(detail::WeakEpisodeProxy episode)
void SetActive(std::vector< Light > &lights, std::vector< bool > &active)
std::unordered_map< LightId, Light > _lights
void UpdateServerLightsState(bool discard_client=false)
std::vector< LightState > GetLightState(std::vector< Light > &lights) const
std::vector< Light > GetAllLights(LightGroup type=LightGroup::None) const
EpisodeProxyImpl< EpisodeProxyPointerType::Weak > WeakEpisodeProxy
rpc::LightState::LightGroup LightGroup
This file contains definitions of common data structures used in traffic manager.
std::shared_ptr< T > SharedPtr
static void log_error(Args &&... args)
static void log_warning(Args &&... args)