---
- module_name: carla

  # - CLASSES ------------------------------
  classes:
  - class_name: WeatherParameters
    # - DESCRIPTION ------------------------
    doc: >
      This class defines objects containing lighting and weather specifications that can later be applied in carla.World. So far, these conditions only intervene with [sensor.camera.rgb](ref_sensors.md#rgb-camera). They neither affect the actor's physics nor other sensors.        
        Each of these parameters acts indepently from the rest. Increasing the rainfall will not automatically create puddles nor change the road's humidity. That makes for a better customization but means that realistic conditions need to be scripted. However an example of dynamic weather conditions working realistically can be found [here](https://github.com/carla-simulator/carla/blob/master/PythonAPI/examples/dynamic_weather.py). 
    # - PROPERTIES -------------------------
    instance_variables:
    - var_name: cloudiness
      type: float
      doc: >
        Values range from 0 to 100, being 0 a clear sky and 100 one completely covered with clouds. 
    # --------------------------------------
    - var_name: precipitation
      type: float
      doc: >
        Rain intensity values range from 0 to 100, being 0 none at all and 100 a heavy rain. 
    # --------------------------------------
    - var_name: precipitation_deposits
      type: float
      doc: >
        Determines the creation of puddles. Values range from 0 to 100, being 0 none at all and 100 a road completely capped with water. Puddles are created with static noise, meaning that they will always appear at the same locations. 
    # --------------------------------------
    - var_name: wind_intensity
      type: float
      doc: >
        Controls the strenght of the wind with values from 0, no wind at all, to 100, a strong wind. The wind does affect rain direction and leaves from trees, so this value is restricted to avoid animation issues. 
    # --------------------------------------
    - var_name: sun_azimuth_angle
      type: float
      var_units: degrees
      doc: >
        The azimuth angle of the sun. Values range from 0 to 360. Zero is an origin point in a sphere determined by Unreal Engine. 
    # --------------------------------------
    - var_name: sun_altitude_angle
      type: float
      var_units: degrees
      doc: >
        Altitude angle of the sun. Values range from -90 to 90 corresponding to midnight and midday each.
    # --------------------------------------
    - var_name: fog_density
      type: float
      doc: >
        Fog concentration or thickness. It only affects the RGB camera sensor. Values range from 0 to 100.
    # --------------------------------------
    - var_name: fog_distance
      type: float
      var_units: meters
      doc: >
        Fog start distance. Values range from 0 to infinite.
    # --------------------------------------
    - var_name: wetness
      type: float
      doc: >
        Wetness intensity. It only affects the RGB camera sensor. Values range from 0 to 100.
    # --------------------------------------
    - var_name: fog_falloff
      type: float
      doc: >
        Density of the fog (as in specific mass) from 0 to infinity. The bigger the value, the more dense and heavy it will be, and the fog will reach smaller heights. Corresponds to <a href="https://docs.unrealengine.com/en-US/Engine/Actors/FogEffects/HeightFog/index.html#:~:text=Using%20Exponential%20Height%20Fog%20Features,-The%20sections%20below&text=Add%20a%20second%20fog%20layer,height%20falloff%2C%20and%20height%20offset">Fog Height Falloff</a> in the UE docs. <br> If the value is 0, the fog will be lighter than air, and will cover the whole scene. <br> A value of 1 is approximately as dense as the air, and reaches normal-sized buildings. <br> For values greater than 5, the air will be so dense that it will be compressed on ground level. 
    # --------------------------------------
    - var_name: scattering_intensity
      type: float
      doc: >
        Controls how much the light will contribute to volumetric fog. When set to 0, there is no contribution.
    # --------------------------------------
    - var_name: mie_scattering_scale
      type: float
      doc: >
        Controls interaction of light with large particles like pollen or air pollution resulting in a hazy sky with halos around the light sources. When set to 0, there is no contribution.
    # --------------------------------------
    - var_name: rayleigh_scattering_scale
      type: float
      doc: >
          Controls interaction of light with small particles like air molecules. Dependent on light wavelength, resulting in a blue sky in the day or red sky in the evening.
    # --------------------------------------
    - var_name: dust_storm
      type: float
      doc: >
          Determines the strength of the dust storm weather. Values range from 0 to 100.
    # - METHODS ----------------------------
    methods:
    - def_name: __init__
      params:
      - param_name: cloudiness
        type: float
        default: 0.0
        doc: >
          0 is a clear sky, 100 complete overcast. 
      - param_name: precipitation
        type: float
        default: 0.0
        doc: >
          0 is no rain at all, 100 a heavy rain. 
      - param_name: precipitation_deposits
        type: float
        default: 0.0
        doc: >
          0 means no puddles on the road, 100 means roads completely capped by rain. 
      - param_name: wind_intensity
        type: float
        default: 0.0
        doc: >
          0 is calm, 100 a strong wind. 
      - param_name: sun_azimuth_angle
        type: float
        default: 0.0
        param_units: degrees
        doc: >
          0 is an arbitrary North, 180 its corresponding South.  
      - param_name: sun_altitude_angle
        type: float
        default: 0.0
        param_units: degrees
        doc: >
          90 is midday, -90 is midnight.  
      - param_name: fog_density
        type: float
        default: 0.0
        doc: >
          Concentration or thickness of the fog, from 0 to 100.  
      - param_name: fog_distance
        type: float
        default: 0.0
        param_units: meters
        doc: >
          Distance where the fog starts in meters.  
      - param_name: wetness
        type: float
        default: 0.0
        doc: >
          Humidity percentages of the road, from 0 to 100.  
      - param_name: fog_falloff
        type: float
        default: 0.0
        doc: >
          Density (specific mass) of the fog, from 0 to infinity.  
      - param_name: scattering_intensity
        type: float
        default: 0.0
        doc: >
          Controls how much the light will contribute to volumetric fog. When set to 0, there is no contribution.
      - param_name: mie_scattering_scale
        type: float
        default: 0.0
        doc: >
          Controls interaction of light with large particles like pollen or air pollution resulting in a hazy sky with halos around the light sources. When set to 0, there is no contribution.
      - param_name: rayleigh_scattering_scale
        type: float
        default: 0.0331
        doc: >
          Controls interaction of light with small particles like air molecules. Dependent on light wavelength, resulting in a blue sky in the day or red sky in the evening.
      note: >
        ClearNoon, CloudyNoon, WetNoon, WetCloudyNoon, SoftRainNoon, MidRainyNoon, HardRainNoon, ClearSunset, CloudySunset, WetSunset, WetCloudySunset, SoftRainSunset, MidRainSunset, HardRainSunset. 
      doc: >
        Method to initialize an object defining weather conditions. This class has some presets for different noon and sunset conditions listed in a note below. 
    # --------------------------------------
    - def_name: __eq__
      params:
      - param_name: other
      return: bool
      doc: >
        Returns <b>True</b> if both objects' variables are the same. 
    # --------------------------------------
    - def_name: __ne__
      params:
      - param_name: other
      return: bool
      doc: >
        Returns <b>True</b> if both objects' variables are different. 
    # --------------------------------------
    - def_name: __str__
    # --------------------------------------
...
