49 std::vector<Light> result;
54 if((type == LightGroup::None) || (group == type)) {
55 auto it_light =
_lights.find(lights_state.first);
56 result.push_back(it_light->second);
64 for(
Light& light : lights) {
70 for(
Light& light : lights) {
77 size_t lights_to_update = (lights.size() < active.size()) ? lights.size() : active.size();
78 for(
size_t i = 0; i < lights_to_update; i++) {
85 std::vector<bool> result;
86 for(
Light& light : lights) {
87 result.push_back(
IsActive(light._id) );
93 std::vector<Light> result;
99 if( (type == LightGroup::None || group == type) && state.
_active ) {
100 auto it_light =
_lights.find(lights_state.first);
101 result.push_back(it_light->second);
109 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);
127 for(
Light& light : lights) {
135 size_t lights_to_update = (lights.size() < colors.size()) ? lights.size() : colors.size();
137 for(
size_t i = 0; i < lights_to_update; i++) {
144 std::vector<Color> result;
145 for(
Light& light : lights) {
146 result.push_back(
GetColor(light._id) );
153 for(
Light& light : lights) {
160 size_t lights_to_update = (lights.size() < intensities.size()) ? lights.size() : intensities.size();
161 for(
size_t i = 0; i < lights_to_update; i++) {
168 std::vector<float> result;
169 for(
Light& light : lights) {
177 for(
Light& light : lights) {
184 size_t lights_to_update = (lights.size() < groups.size()) ? lights.size() : groups.size();
185 for(
size_t i = 0; i < lights_to_update; i++) {
192 std::vector<LightGroup> result;
193 for(
Light& light : lights) {
201 for(
Light& light : lights) {
208 size_t lights_to_update = (lights.size() < states.size()) ? lights.size() : states.size();
209 for(
size_t i = 0; i < lights_to_update; i++) {
216 std::vector<LightState> result;
217 for(
Light& light : lights) {
249 std::lock_guard<std::mutex> lock(
_mutex);
257 std::lock_guard<std::mutex> lock(
_mutex);
265 std::lock_guard<std::mutex> lock(
_mutex);
273 std::lock_guard<std::mutex> lock(
_mutex);
288 std::lock_guard<std::mutex> lock(
_mutex);
306 std::lock_guard<std::mutex> lock(
_mutex);
308 std::vector<rpc::LightState> lights_snapshot =
_episode.Lock()->QueryLightsStateToServer();
313 for(
const auto& it : lights_snapshot) {
316 Color(it._color.r, it._color.g, it._color.b),
330 std::lock_guard<std::mutex> lock(
_mutex);
334 std::vector<rpc::LightState> message;
338 auto it_light =
_lights.find(it.first);
339 if(it_light !=
_lights.end()) {
342 it_light->second.GetLocation(),
343 it.second._intensity,
345 rpc::Color(it.second._color.r, it.second._color.g, it.second._color.b),
348 state.
_id = it.first;
350 message.push_back(state);
354 _episode.Lock()->UpdateServerLightsState(message, discard_client);
364 std::lock_guard<std::mutex> lock(
_mutex);
374 _episode.Lock()->UpdateDayNightCycle(active);
FVehicleLightState LightState
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
uint32_t LightId
定义灯光ID的类型,使用uint32_t表示。
static void log_warning(Args &&... args)
boost::shared_ptr< T > SharedPtr
使用这个SharedPtr(boost::shared_ptr)以保持与boost::python的兼容性, 但未来如果可能的话,我们希望能为std::shared_ptr制作一个Python适配器。
float _intensity
灯光的强度,范围0.0到1.0。
bool _active
表示灯光是否激活的布尔值。