Переглянути джерело

replace lightshare early work

UbitUmarov 4 роки тому
батько
коміт
e2be90caaf

+ 0 - 222
OpenSim/Data/MySQL/MySQLSimulationData.cs

@@ -863,107 +863,6 @@ namespace OpenSim.Data.MySQL
             }
         }
 
-        public virtual RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
-        {
-            RegionLightShareData nWP = new RegionLightShareData();
-            nWP.OnSave += StoreRegionWindlightSettings;
-
-            using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
-            {
-                dbcon.Open();
-
-                string command = "select * from `regionwindlight` where region_id = ?regionID";
-
-                using (MySqlCommand cmd = new MySqlCommand(command))
-                {
-                    cmd.Connection = dbcon;
-
-                    cmd.Parameters.AddWithValue("?regionID", regionUUID.ToString());
-
-                    using(IDataReader result = ExecuteReader(cmd))
-                    {
-                        if(!result.Read())
-                        {
-                            //No result, so store our default windlight profile and return it
-                            nWP.regionID = regionUUID;
-                            //                            StoreRegionWindlightSettings(nWP);
-                            return nWP;
-                        }
-                        else
-                        {
-                            nWP.regionID = DBGuid.FromDB(result["region_id"]);
-                            nWP.waterColor.X = Convert.ToSingle(result["water_color_r"]);
-                            nWP.waterColor.Y = Convert.ToSingle(result["water_color_g"]);
-                            nWP.waterColor.Z = Convert.ToSingle(result["water_color_b"]);
-                            nWP.waterFogDensityExponent = Convert.ToSingle(result["water_fog_density_exponent"]);
-                            nWP.underwaterFogModifier = Convert.ToSingle(result["underwater_fog_modifier"]);
-                            nWP.reflectionWaveletScale.X = Convert.ToSingle(result["reflection_wavelet_scale_1"]);
-                            nWP.reflectionWaveletScale.Y = Convert.ToSingle(result["reflection_wavelet_scale_2"]);
-                            nWP.reflectionWaveletScale.Z = Convert.ToSingle(result["reflection_wavelet_scale_3"]);
-                            nWP.fresnelScale = Convert.ToSingle(result["fresnel_scale"]);
-                            nWP.fresnelOffset = Convert.ToSingle(result["fresnel_offset"]);
-                            nWP.refractScaleAbove = Convert.ToSingle(result["refract_scale_above"]);
-                            nWP.refractScaleBelow = Convert.ToSingle(result["refract_scale_below"]);
-                            nWP.blurMultiplier = Convert.ToSingle(result["blur_multiplier"]);
-                            nWP.bigWaveDirection.X = Convert.ToSingle(result["big_wave_direction_x"]);
-                            nWP.bigWaveDirection.Y = Convert.ToSingle(result["big_wave_direction_y"]);
-                            nWP.littleWaveDirection.X = Convert.ToSingle(result["little_wave_direction_x"]);
-                            nWP.littleWaveDirection.Y = Convert.ToSingle(result["little_wave_direction_y"]);
-                            UUID.TryParse(result["normal_map_texture"].ToString(),out nWP.normalMapTexture);
-                            nWP.horizon.X = Convert.ToSingle(result["horizon_r"]);
-                            nWP.horizon.Y = Convert.ToSingle(result["horizon_g"]);
-                            nWP.horizon.Z = Convert.ToSingle(result["horizon_b"]);
-                            nWP.horizon.W = Convert.ToSingle(result["horizon_i"]);
-                            nWP.hazeHorizon = Convert.ToSingle(result["haze_horizon"]);
-                            nWP.blueDensity.X = Convert.ToSingle(result["blue_density_r"]);
-                            nWP.blueDensity.Y = Convert.ToSingle(result["blue_density_g"]);
-                            nWP.blueDensity.Z = Convert.ToSingle(result["blue_density_b"]);
-                            nWP.blueDensity.W = Convert.ToSingle(result["blue_density_i"]);
-                            nWP.hazeDensity = Convert.ToSingle(result["haze_density"]);
-                            nWP.densityMultiplier = Convert.ToSingle(result["density_multiplier"]);
-                            nWP.distanceMultiplier = Convert.ToSingle(result["distance_multiplier"]);
-                            nWP.maxAltitude = Convert.ToUInt16(result["max_altitude"]);
-                            nWP.sunMoonColor.X = Convert.ToSingle(result["sun_moon_color_r"]);
-                            nWP.sunMoonColor.Y = Convert.ToSingle(result["sun_moon_color_g"]);
-                            nWP.sunMoonColor.Z = Convert.ToSingle(result["sun_moon_color_b"]);
-                            nWP.sunMoonColor.W = Convert.ToSingle(result["sun_moon_color_i"]);
-                            nWP.sunMoonPosition = Convert.ToSingle(result["sun_moon_position"]);
-                            nWP.ambient.X = Convert.ToSingle(result["ambient_r"]);
-                            nWP.ambient.Y = Convert.ToSingle(result["ambient_g"]);
-                            nWP.ambient.Z = Convert.ToSingle(result["ambient_b"]);
-                            nWP.ambient.W = Convert.ToSingle(result["ambient_i"]);
-                            nWP.eastAngle = Convert.ToSingle(result["east_angle"]);
-                            nWP.sunGlowFocus = Convert.ToSingle(result["sun_glow_focus"]);
-                            nWP.sunGlowSize = Convert.ToSingle(result["sun_glow_size"]);
-                            nWP.sceneGamma = Convert.ToSingle(result["scene_gamma"]);
-                            nWP.starBrightness = Convert.ToSingle(result["star_brightness"]);
-                            nWP.cloudColor.X = Convert.ToSingle(result["cloud_color_r"]);
-                            nWP.cloudColor.Y = Convert.ToSingle(result["cloud_color_g"]);
-                            nWP.cloudColor.Z = Convert.ToSingle(result["cloud_color_b"]);
-                            nWP.cloudColor.W = Convert.ToSingle(result["cloud_color_i"]);
-                            nWP.cloudXYDensity.X = Convert.ToSingle(result["cloud_x"]);
-                            nWP.cloudXYDensity.Y = Convert.ToSingle(result["cloud_y"]);
-                            nWP.cloudXYDensity.Z = Convert.ToSingle(result["cloud_density"]);
-                            nWP.cloudCoverage = Convert.ToSingle(result["cloud_coverage"]);
-                            nWP.cloudScale = Convert.ToSingle(result["cloud_scale"]);
-                            nWP.cloudDetailXYDensity.X = Convert.ToSingle(result["cloud_detail_x"]);
-                            nWP.cloudDetailXYDensity.Y = Convert.ToSingle(result["cloud_detail_y"]);
-                            nWP.cloudDetailXYDensity.Z = Convert.ToSingle(result["cloud_detail_density"]);
-                            nWP.cloudScrollX = Convert.ToSingle(result["cloud_scroll_x"]);
-                            nWP.cloudScrollXLock = Convert.ToBoolean(result["cloud_scroll_x_lock"]);
-                            nWP.cloudScrollY = Convert.ToSingle(result["cloud_scroll_y"]);
-                            nWP.cloudScrollYLock = Convert.ToBoolean(result["cloud_scroll_y_lock"]);
-                            nWP.drawClassicClouds = Convert.ToBoolean(result["draw_classic_clouds"]);
-                            nWP.valid = true;
-                        }
-                    }
-                }
-                dbcon.Close();
-            }
-
-            return nWP;
-        }
-
         public virtual RegionSettings LoadRegionSettings(UUID regionUUID)
         {
             RegionSettings rs = null;
@@ -1009,127 +908,6 @@ namespace OpenSim.Data.MySQL
             return rs;
         }
 
-        public virtual void StoreRegionWindlightSettings(RegionLightShareData wl)
-        {
-            using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
-            {
-                dbcon.Open();
-
-                using (MySqlCommand cmd = dbcon.CreateCommand())
-                {
-                    cmd.CommandText = "REPLACE INTO `regionwindlight` (`region_id`, `water_color_r`, `water_color_g`, "
-                            + "`water_color_b`, `water_fog_density_exponent`, `underwater_fog_modifier`, "
-                            + "`reflection_wavelet_scale_1`, `reflection_wavelet_scale_2`, `reflection_wavelet_scale_3`, "
-                            + "`fresnel_scale`, `fresnel_offset`, `refract_scale_above`, `refract_scale_below`, "
-                            + "`blur_multiplier`, `big_wave_direction_x`, `big_wave_direction_y`, `little_wave_direction_x`, "
-                            + "`little_wave_direction_y`, `normal_map_texture`, `horizon_r`, `horizon_g`, `horizon_b`, "
-                            + "`horizon_i`, `haze_horizon`, `blue_density_r`, `blue_density_g`, `blue_density_b`, "
-                            + "`blue_density_i`, `haze_density`, `density_multiplier`, `distance_multiplier`, `max_altitude`, "
-                            + "`sun_moon_color_r`, `sun_moon_color_g`, `sun_moon_color_b`, `sun_moon_color_i`, `sun_moon_position`, "
-                            + "`ambient_r`, `ambient_g`, `ambient_b`, `ambient_i`, `east_angle`, `sun_glow_focus`, `sun_glow_size`, "
-                            + "`scene_gamma`, `star_brightness`, `cloud_color_r`, `cloud_color_g`, `cloud_color_b`, `cloud_color_i`, "
-                            + "`cloud_x`, `cloud_y`, `cloud_density`, `cloud_coverage`, `cloud_scale`, `cloud_detail_x`, "
-                            + "`cloud_detail_y`, `cloud_detail_density`, `cloud_scroll_x`, `cloud_scroll_x_lock`, `cloud_scroll_y`, "
-                            + "`cloud_scroll_y_lock`, `draw_classic_clouds`) VALUES (?region_id, ?water_color_r, "
-                            + "?water_color_g, ?water_color_b, ?water_fog_density_exponent, ?underwater_fog_modifier, ?reflection_wavelet_scale_1, "
-                            + "?reflection_wavelet_scale_2, ?reflection_wavelet_scale_3, ?fresnel_scale, ?fresnel_offset, ?refract_scale_above, "
-                            + "?refract_scale_below, ?blur_multiplier, ?big_wave_direction_x, ?big_wave_direction_y, ?little_wave_direction_x, "
-                            + "?little_wave_direction_y, ?normal_map_texture, ?horizon_r, ?horizon_g, ?horizon_b, ?horizon_i, ?haze_horizon, "
-                            + "?blue_density_r, ?blue_density_g, ?blue_density_b, ?blue_density_i, ?haze_density, ?density_multiplier, "
-                            + "?distance_multiplier, ?max_altitude, ?sun_moon_color_r, ?sun_moon_color_g, ?sun_moon_color_b, "
-                            + "?sun_moon_color_i, ?sun_moon_position, ?ambient_r, ?ambient_g, ?ambient_b, ?ambient_i, ?east_angle, "
-                            + "?sun_glow_focus, ?sun_glow_size, ?scene_gamma, ?star_brightness, ?cloud_color_r, ?cloud_color_g, "
-                            + "?cloud_color_b, ?cloud_color_i, ?cloud_x, ?cloud_y, ?cloud_density, ?cloud_coverage, ?cloud_scale, "
-                            + "?cloud_detail_x, ?cloud_detail_y, ?cloud_detail_density, ?cloud_scroll_x, ?cloud_scroll_x_lock, "
-                            + "?cloud_scroll_y, ?cloud_scroll_y_lock, ?draw_classic_clouds)"
-                            ;
-
-                    cmd.Parameters.AddWithValue("region_id", wl.regionID);
-                    cmd.Parameters.AddWithValue("water_color_r", wl.waterColor.X);
-                    cmd.Parameters.AddWithValue("water_color_g", wl.waterColor.Y);
-                    cmd.Parameters.AddWithValue("water_color_b", wl.waterColor.Z);
-                    cmd.Parameters.AddWithValue("water_fog_density_exponent", wl.waterFogDensityExponent);
-                    cmd.Parameters.AddWithValue("underwater_fog_modifier", wl.underwaterFogModifier);
-                    cmd.Parameters.AddWithValue("reflection_wavelet_scale_1", wl.reflectionWaveletScale.X);
-                    cmd.Parameters.AddWithValue("reflection_wavelet_scale_2", wl.reflectionWaveletScale.Y);
-                    cmd.Parameters.AddWithValue("reflection_wavelet_scale_3", wl.reflectionWaveletScale.Z);
-                    cmd.Parameters.AddWithValue("fresnel_scale", wl.fresnelScale);
-                    cmd.Parameters.AddWithValue("fresnel_offset", wl.fresnelOffset);
-                    cmd.Parameters.AddWithValue("refract_scale_above", wl.refractScaleAbove);
-                    cmd.Parameters.AddWithValue("refract_scale_below", wl.refractScaleBelow);
-                    cmd.Parameters.AddWithValue("blur_multiplier", wl.blurMultiplier);
-                    cmd.Parameters.AddWithValue("big_wave_direction_x", wl.bigWaveDirection.X);
-                    cmd.Parameters.AddWithValue("big_wave_direction_y", wl.bigWaveDirection.Y);
-                    cmd.Parameters.AddWithValue("little_wave_direction_x", wl.littleWaveDirection.X);
-                    cmd.Parameters.AddWithValue("little_wave_direction_y", wl.littleWaveDirection.Y);
-                    cmd.Parameters.AddWithValue("normal_map_texture", wl.normalMapTexture);
-                    cmd.Parameters.AddWithValue("horizon_r", wl.horizon.X);
-                    cmd.Parameters.AddWithValue("horizon_g", wl.horizon.Y);
-                    cmd.Parameters.AddWithValue("horizon_b", wl.horizon.Z);
-                    cmd.Parameters.AddWithValue("horizon_i", wl.horizon.W);
-                    cmd.Parameters.AddWithValue("haze_horizon", wl.hazeHorizon);
-                    cmd.Parameters.AddWithValue("blue_density_r", wl.blueDensity.X);
-                    cmd.Parameters.AddWithValue("blue_density_g", wl.blueDensity.Y);
-                    cmd.Parameters.AddWithValue("blue_density_b", wl.blueDensity.Z);
-                    cmd.Parameters.AddWithValue("blue_density_i", wl.blueDensity.W);
-                    cmd.Parameters.AddWithValue("haze_density", wl.hazeDensity);
-                    cmd.Parameters.AddWithValue("density_multiplier", wl.densityMultiplier);
-                    cmd.Parameters.AddWithValue("distance_multiplier", wl.distanceMultiplier);
-                    cmd.Parameters.AddWithValue("max_altitude", wl.maxAltitude);
-                    cmd.Parameters.AddWithValue("sun_moon_color_r", wl.sunMoonColor.X);
-                    cmd.Parameters.AddWithValue("sun_moon_color_g", wl.sunMoonColor.Y);
-                    cmd.Parameters.AddWithValue("sun_moon_color_b", wl.sunMoonColor.Z);
-                    cmd.Parameters.AddWithValue("sun_moon_color_i", wl.sunMoonColor.W);
-                    cmd.Parameters.AddWithValue("sun_moon_position", wl.sunMoonPosition);
-                    cmd.Parameters.AddWithValue("ambient_r", wl.ambient.X);
-                    cmd.Parameters.AddWithValue("ambient_g", wl.ambient.Y);
-                    cmd.Parameters.AddWithValue("ambient_b", wl.ambient.Z);
-                    cmd.Parameters.AddWithValue("ambient_i", wl.ambient.W);
-                    cmd.Parameters.AddWithValue("east_angle", wl.eastAngle);
-                    cmd.Parameters.AddWithValue("sun_glow_focus", wl.sunGlowFocus);
-                    cmd.Parameters.AddWithValue("sun_glow_size", wl.sunGlowSize);
-                    cmd.Parameters.AddWithValue("scene_gamma", wl.sceneGamma);
-                    cmd.Parameters.AddWithValue("star_brightness", wl.starBrightness);
-                    cmd.Parameters.AddWithValue("cloud_color_r", wl.cloudColor.X);
-                    cmd.Parameters.AddWithValue("cloud_color_g", wl.cloudColor.Y);
-                    cmd.Parameters.AddWithValue("cloud_color_b", wl.cloudColor.Z);
-                    cmd.Parameters.AddWithValue("cloud_color_i", wl.cloudColor.W);
-                    cmd.Parameters.AddWithValue("cloud_x", wl.cloudXYDensity.X);
-                    cmd.Parameters.AddWithValue("cloud_y", wl.cloudXYDensity.Y);
-                    cmd.Parameters.AddWithValue("cloud_density", wl.cloudXYDensity.Z);
-                    cmd.Parameters.AddWithValue("cloud_coverage", wl.cloudCoverage);
-                    cmd.Parameters.AddWithValue("cloud_scale", wl.cloudScale);
-                    cmd.Parameters.AddWithValue("cloud_detail_x", wl.cloudDetailXYDensity.X);
-                    cmd.Parameters.AddWithValue("cloud_detail_y", wl.cloudDetailXYDensity.Y);
-                    cmd.Parameters.AddWithValue("cloud_detail_density", wl.cloudDetailXYDensity.Z);
-                    cmd.Parameters.AddWithValue("cloud_scroll_x", wl.cloudScrollX);
-                    cmd.Parameters.AddWithValue("cloud_scroll_x_lock", wl.cloudScrollXLock);
-                    cmd.Parameters.AddWithValue("cloud_scroll_y", wl.cloudScrollY);
-                    cmd.Parameters.AddWithValue("cloud_scroll_y_lock", wl.cloudScrollYLock);
-                    cmd.Parameters.AddWithValue("draw_classic_clouds", wl.drawClassicClouds);
-
-                    ExecuteNonQuery(cmd);
-                }
-                dbcon.Close();
-            }
-        }
-
-        public virtual void RemoveRegionWindlightSettings(UUID regionID)
-        {
-            using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
-            {
-                dbcon.Open();
-
-                using (MySqlCommand cmd = dbcon.CreateCommand())
-                {
-                    cmd.CommandText = "delete from `regionwindlight` where `region_id`=?regionID";
-                    cmd.Parameters.AddWithValue("?regionID", regionID.ToString());
-                    ExecuteNonQuery(cmd);
-                }
-                dbcon.Close();
-            }
-        }
-
         #region RegionEnvironmentSettings
         public string LoadRegionEnvironmentSettings(UUID regionUUID)
         {

+ 0 - 471
OpenSim/Data/PGSQL/PGSQLSimulationData.cs

@@ -825,477 +825,6 @@ namespace OpenSim.Data.PGSQL
                 cmd.ExecuteNonQuery();
             }
         }
-        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
-        {
-            RegionLightShareData nWP = new RegionLightShareData();
-            nWP.OnSave += StoreRegionWindlightSettings;
-
-            string sql = @"select * from regionwindlight where ""region_id"" = :regionID";
-
-            using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
-            using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
-            {
-                cmd.Parameters.Add(_Database.CreateParameter("regionID", regionUUID.ToString() ));
-                conn.Open();
-                using (NpgsqlDataReader result = cmd.ExecuteReader())
-                {
-                    if (!result.Read())
-                    {
-                        //No result, so store our default windlight profile and return it
-                        nWP.regionID = regionUUID;
-                        StoreRegionWindlightSettings(nWP);
-                        return nWP;
-                    }
-                    else
-                    {
-                        nWP.regionID = DBGuid.FromDB(result["region_id"]);
-                        nWP.waterColor.X = Convert.ToSingle(result["water_color_r"]);
-                        nWP.waterColor.Y = Convert.ToSingle(result["water_color_g"]);
-                        nWP.waterColor.Z = Convert.ToSingle(result["water_color_b"]);
-                        nWP.waterFogDensityExponent = Convert.ToSingle(result["water_fog_density_exponent"]);
-                        nWP.underwaterFogModifier = Convert.ToSingle(result["underwater_fog_modifier"]);
-                        nWP.reflectionWaveletScale.X = Convert.ToSingle(result["reflection_wavelet_scale_1"]);
-                        nWP.reflectionWaveletScale.Y = Convert.ToSingle(result["reflection_wavelet_scale_2"]);
-                        nWP.reflectionWaveletScale.Z = Convert.ToSingle(result["reflection_wavelet_scale_3"]);
-                        nWP.fresnelScale = Convert.ToSingle(result["fresnel_scale"]);
-                        nWP.fresnelOffset = Convert.ToSingle(result["fresnel_offset"]);
-                        nWP.refractScaleAbove = Convert.ToSingle(result["refract_scale_above"]);
-                        nWP.refractScaleBelow = Convert.ToSingle(result["refract_scale_below"]);
-                        nWP.blurMultiplier = Convert.ToSingle(result["blur_multiplier"]);
-                        nWP.bigWaveDirection.X = Convert.ToSingle(result["big_wave_direction_x"]);
-                        nWP.bigWaveDirection.Y = Convert.ToSingle(result["big_wave_direction_y"]);
-                        nWP.littleWaveDirection.X = Convert.ToSingle(result["little_wave_direction_x"]);
-                        nWP.littleWaveDirection.Y = Convert.ToSingle(result["little_wave_direction_y"]);
-                        UUID.TryParse(result["normal_map_texture"].ToString(), out nWP.normalMapTexture);
-                        nWP.horizon.X = Convert.ToSingle(result["horizon_r"]);
-                        nWP.horizon.Y = Convert.ToSingle(result["horizon_g"]);
-                        nWP.horizon.Z = Convert.ToSingle(result["horizon_b"]);
-                        nWP.horizon.W = Convert.ToSingle(result["horizon_i"]);
-                        nWP.hazeHorizon = Convert.ToSingle(result["haze_horizon"]);
-                        nWP.blueDensity.X = Convert.ToSingle(result["blue_density_r"]);
-                        nWP.blueDensity.Y = Convert.ToSingle(result["blue_density_g"]);
-                        nWP.blueDensity.Z = Convert.ToSingle(result["blue_density_b"]);
-                        nWP.blueDensity.W = Convert.ToSingle(result["blue_density_i"]);
-                        nWP.hazeDensity = Convert.ToSingle(result["haze_density"]);
-                        nWP.densityMultiplier = Convert.ToSingle(result["density_multiplier"]);
-                        nWP.distanceMultiplier = Convert.ToSingle(result["distance_multiplier"]);
-                        nWP.maxAltitude = Convert.ToUInt16(result["max_altitude"]);
-                        nWP.sunMoonColor.X = Convert.ToSingle(result["sun_moon_color_r"]);
-                        nWP.sunMoonColor.Y = Convert.ToSingle(result["sun_moon_color_g"]);
-                        nWP.sunMoonColor.Z = Convert.ToSingle(result["sun_moon_color_b"]);
-                        nWP.sunMoonColor.W = Convert.ToSingle(result["sun_moon_color_i"]);
-                        nWP.sunMoonPosition = Convert.ToSingle(result["sun_moon_position"]);
-                        nWP.ambient.X = Convert.ToSingle(result["ambient_r"]);
-                        nWP.ambient.Y = Convert.ToSingle(result["ambient_g"]);
-                        nWP.ambient.Z = Convert.ToSingle(result["ambient_b"]);
-                        nWP.ambient.W = Convert.ToSingle(result["ambient_i"]);
-                        nWP.eastAngle = Convert.ToSingle(result["east_angle"]);
-                        nWP.sunGlowFocus = Convert.ToSingle(result["sun_glow_focus"]);
-                        nWP.sunGlowSize = Convert.ToSingle(result["sun_glow_size"]);
-                        nWP.sceneGamma = Convert.ToSingle(result["scene_gamma"]);
-                        nWP.starBrightness = Convert.ToSingle(result["star_brightness"]);
-                        nWP.cloudColor.X = Convert.ToSingle(result["cloud_color_r"]);
-                        nWP.cloudColor.Y = Convert.ToSingle(result["cloud_color_g"]);
-                        nWP.cloudColor.Z = Convert.ToSingle(result["cloud_color_b"]);
-                        nWP.cloudColor.W = Convert.ToSingle(result["cloud_color_i"]);
-                        nWP.cloudXYDensity.X = Convert.ToSingle(result["cloud_x"]);
-                        nWP.cloudXYDensity.Y = Convert.ToSingle(result["cloud_y"]);
-                        nWP.cloudXYDensity.Z = Convert.ToSingle(result["cloud_density"]);
-                        nWP.cloudCoverage = Convert.ToSingle(result["cloud_coverage"]);
-                        nWP.cloudScale = Convert.ToSingle(result["cloud_scale"]);
-                        nWP.cloudDetailXYDensity.X = Convert.ToSingle(result["cloud_detail_x"]);
-                        nWP.cloudDetailXYDensity.Y = Convert.ToSingle(result["cloud_detail_y"]);
-                        nWP.cloudDetailXYDensity.Z = Convert.ToSingle(result["cloud_detail_density"]);
-                        nWP.cloudScrollX = Convert.ToSingle(result["cloud_scroll_x"]);
-                        nWP.cloudScrollXLock = Convert.ToBoolean(result["cloud_scroll_x_lock"]);
-                        nWP.cloudScrollY = Convert.ToSingle(result["cloud_scroll_y"]);
-                        nWP.cloudScrollYLock = Convert.ToBoolean(result["cloud_scroll_y_lock"]);
-                        nWP.drawClassicClouds = Convert.ToBoolean(result["draw_classic_clouds"]);
-                        nWP.valid = true;
-                    }
-                }
-            }
-            return nWP;
-        }
-
-        public void RemoveRegionWindlightSettings(UUID regionID)
-        {
-            string sql = @"delete from regionwindlight where ""region_id"" = :region_id";
-            using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
-            using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
-            {
-                conn.Open();
-                cmd.Parameters.Add(_Database.CreateParameter("region_id", regionID.ToString()));
-                cmd.ExecuteNonQuery();
-            }
-        }
-
-        public void StoreRegionWindlightSettings(RegionLightShareData wl)
-        {
-            string sql = @"select region_id from regionwindlight where ""region_id"" = :region_id limit 1;";
-            bool exists = false;
-            using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
-            {
-                conn.Open();
-                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
-                {
-                    cmd.Parameters.Add(_Database.CreateParameter("region_id", wl.regionID.ToString() ));
-                    NpgsqlDataReader dr = cmd.ExecuteReader();
-                    exists = dr.Read();
-                }
-            }
-            if (exists)
-            {
-                RemoveRegionWindlightSettings(wl.regionID);
-            }
-
-            // sql insert
-            sql = @"INSERT INTO regionwindlight
-                       (region_id
-                       ,water_color_r
-                       ,water_color_g
-                       ,water_color_b
-                       ,water_fog_density_exponent
-                       ,underwater_fog_modifier
-                       ,reflection_wavelet_scale_1
-                       ,reflection_wavelet_scale_2
-                       ,reflection_wavelet_scale_3
-                       ,fresnel_scale
-                       ,fresnel_offset
-                       ,refract_scale_above
-                       ,refract_scale_below
-                       ,blur_multiplier
-                       ,big_wave_direction_x
-                       ,big_wave_direction_y
-                       ,little_wave_direction_x
-                       ,little_wave_direction_y
-                       ,normal_map_texture
-                       ,horizon_r
-                       ,horizon_g
-                       ,horizon_b
-                       ,horizon_i
-                       ,haze_horizon
-                       ,blue_density_r
-                       ,blue_density_g
-                       ,blue_density_b
-                       ,blue_density_i
-                       ,haze_density
-                       ,density_multiplier
-                       ,distance_multiplier
-                       ,max_altitude
-                       ,sun_moon_color_r
-                       ,sun_moon_color_g
-                       ,sun_moon_color_b
-                       ,sun_moon_color_i
-                       ,sun_moon_position
-                       ,ambient_r
-                       ,ambient_g
-                       ,ambient_b
-                       ,ambient_i
-                       ,east_angle
-                       ,sun_glow_focus
-                       ,sun_glow_size
-                       ,scene_gamma
-                       ,star_brightness
-                       ,cloud_color_r
-                       ,cloud_color_g
-                       ,cloud_color_b
-                       ,cloud_color_i
-                       ,cloud_x
-                       ,cloud_y
-                       ,cloud_density
-                       ,cloud_coverage
-                       ,cloud_scale
-                       ,cloud_detail_x
-                       ,cloud_detail_y
-                       ,cloud_detail_density
-                       ,cloud_scroll_x
-                       ,cloud_scroll_x_lock
-                       ,cloud_scroll_y
-                       ,cloud_scroll_y_lock
-                       ,draw_classic_clouds)
-                 VALUES
-                       (:region_id
-                       ,:water_color_r
-                       ,:water_color_g
-                       ,:water_color_b
-                       ,:water_fog_density_exponent
-                       ,:underwater_fog_modifier
-                       ,:reflection_wavelet_scale_1
-                       ,:reflection_wavelet_scale_2
-                       ,:reflection_wavelet_scale_3
-                       ,:fresnel_scale
-                       ,:fresnel_offset
-                       ,:refract_scale_above
-                       ,:refract_scale_below
-                       ,:blur_multiplier
-                       ,:big_wave_direction_x
-                       ,:big_wave_direction_y
-                       ,:little_wave_direction_x
-                       ,:little_wave_direction_y
-                       ,:normal_map_texture
-                       ,:horizon_r
-                       ,:horizon_g
-                       ,:horizon_b
-                       ,:horizon_i
-                       ,:haze_horizon
-                       ,:blue_density_r
-                       ,:blue_density_g
-                       ,:blue_density_b
-                       ,:blue_density_i
-                       ,:haze_density
-                       ,:density_multiplier
-                       ,:distance_multiplier
-                       ,:max_altitude
-                       ,:sun_moon_color_r
-                       ,:sun_moon_color_g
-                       ,:sun_moon_color_b
-                       ,:sun_moon_color_i
-                       ,:sun_moon_position
-                       ,:ambient_r
-                       ,:ambient_g
-                       ,:ambient_b
-                       ,:ambient_i
-                       ,:east_angle
-                       ,:sun_glow_focus
-                       ,:sun_glow_size
-                       ,:scene_gamma
-                       ,:star_brightness
-                       ,:cloud_color_r
-                       ,:cloud_color_g
-                       ,:cloud_color_b
-                       ,:cloud_color_i
-                       ,:cloud_x
-                       ,:cloud_y
-                       ,:cloud_density
-                       ,:cloud_coverage
-                       ,:cloud_scale
-                       ,:cloud_detail_x
-                       ,:cloud_detail_y
-                       ,:cloud_detail_density
-                       ,:cloud_scroll_x
-                       ,:cloud_scroll_x_lock
-                       ,:cloud_scroll_y
-                       ,:cloud_scroll_y_lock
-                       ,:draw_classic_clouds);";
-
-            using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
-            {
-                conn.Open();
-                using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
-                {
-                    cmd.Parameters.Add(_Database.CreateParameter("region_id", wl.regionID.ToString()));
-                    cmd.Parameters.Add(_Database.CreateParameter("water_color_r", wl.waterColor.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("water_color_g", wl.waterColor.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("water_color_b", wl.waterColor.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("water_fog_density_exponent", wl.waterFogDensityExponent));
-                    cmd.Parameters.Add(_Database.CreateParameter("underwater_fog_modifier", wl.underwaterFogModifier));
-                    cmd.Parameters.Add(_Database.CreateParameter("reflection_wavelet_scale_1", wl.reflectionWaveletScale.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("reflection_wavelet_scale_2", wl.reflectionWaveletScale.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("reflection_wavelet_scale_3", wl.reflectionWaveletScale.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("fresnel_scale", wl.fresnelScale));
-                    cmd.Parameters.Add(_Database.CreateParameter("fresnel_offset", wl.fresnelOffset));
-                    cmd.Parameters.Add(_Database.CreateParameter("refract_scale_above", wl.refractScaleAbove));
-                    cmd.Parameters.Add(_Database.CreateParameter("refract_scale_below", wl.refractScaleBelow));
-                    cmd.Parameters.Add(_Database.CreateParameter("blur_multiplier", wl.blurMultiplier));
-                    cmd.Parameters.Add(_Database.CreateParameter("big_wave_direction_x", wl.bigWaveDirection.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("big_wave_direction_y", wl.bigWaveDirection.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_x", wl.littleWaveDirection.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("little_wave_direction_y", wl.littleWaveDirection.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("normal_map_texture", wl.normalMapTexture.ToString()));
-                    cmd.Parameters.Add(_Database.CreateParameter("horizon_r", wl.horizon.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("horizon_g", wl.horizon.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("horizon_b", wl.horizon.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("horizon_i", wl.horizon.W));
-                    cmd.Parameters.Add(_Database.CreateParameter("haze_horizon", wl.hazeHorizon));
-                    cmd.Parameters.Add(_Database.CreateParameter("blue_density_r", wl.blueDensity.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("blue_density_g", wl.blueDensity.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("blue_density_b", wl.blueDensity.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("blue_density_i", wl.blueDensity.W));
-                    cmd.Parameters.Add(_Database.CreateParameter("haze_density", wl.hazeDensity));
-                    cmd.Parameters.Add(_Database.CreateParameter("density_multiplier", wl.densityMultiplier));
-                    cmd.Parameters.Add(_Database.CreateParameter("distance_multiplier", wl.distanceMultiplier));
-                    cmd.Parameters.Add(_Database.CreateParameter("max_altitude", wl.maxAltitude));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_r", wl.sunMoonColor.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_g", wl.sunMoonColor.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_b", wl.sunMoonColor.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_moon_color_i", wl.sunMoonColor.W));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_moon_position", wl.sunMoonPosition));
-                    cmd.Parameters.Add(_Database.CreateParameter("ambient_r", wl.ambient.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("ambient_g", wl.ambient.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("ambient_b", wl.ambient.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("ambient_i", wl.ambient.W));
-                    cmd.Parameters.Add(_Database.CreateParameter("east_angle", wl.eastAngle));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_glow_focus", wl.sunGlowFocus));
-                    cmd.Parameters.Add(_Database.CreateParameter("sun_glow_size", wl.sunGlowSize));
-                    cmd.Parameters.Add(_Database.CreateParameter("scene_gamma", wl.sceneGamma));
-                    cmd.Parameters.Add(_Database.CreateParameter("star_brightness", wl.starBrightness));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_color_r", wl.cloudColor.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_color_g", wl.cloudColor.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_color_b", wl.cloudColor.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_color_i", wl.cloudColor.W));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_x", wl.cloudXYDensity.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_y", wl.cloudXYDensity.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_density", wl.cloudXYDensity.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_coverage", wl.cloudCoverage));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_scale", wl.cloudScale));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_detail_x", wl.cloudDetailXYDensity.X));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_detail_y", wl.cloudDetailXYDensity.Y));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_detail_density", wl.cloudDetailXYDensity.Z));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_x", wl.cloudScrollX));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_x_lock", wl.cloudScrollXLock));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_y", wl.cloudScrollY));
-                    cmd.Parameters.Add(_Database.CreateParameter("cloud_scroll_y_lock", wl.cloudScrollYLock));
-                    cmd.Parameters.Add(_Database.CreateParameter("draw_classic_clouds", wl.drawClassicClouds));
-
-                    cmd.ExecuteNonQuery();
-                }
-            }
-            #region update
-            //            }
-            //            else
-            //            {
-            //                // sql update
-            //                sql = @"UPDATE [OpenSim].[dbo].[regionwindlight]
-            //   SET [region_id] =                   @region_id
-            //      ,[water_color_r] =               @water_color_r
-            //      ,[water_color_g] =               @water_color_g
-            //      ,[water_color_b] =               @water_color_b
-            //      ,[water_fog_density_exponent] =  @water_fog_density_exponent
-            //      ,[underwater_fog_modifier] =     @underwater_fog_modifier
-            //      ,[reflection_wavelet_scale_1] =  @reflection_wavelet_scale_1
-            //      ,[reflection_wavelet_scale_2] =  @reflection_wavelet_scale_2
-            //      ,[reflection_wavelet_scale_3] =  @reflection_wavelet_scale_3
-            //      ,[fresnel_scale] =               @fresnel_scale
-            //      ,[fresnel_offset] =              @fresnel_offset
-            //      ,[refract_scale_above] =         @refract_scale_above
-            //      ,[refract_scale_below] =         @refract_scale_below
-            //      ,[blur_multiplier] =             @blur_multiplier
-            //      ,[big_wave_direction_x] =        @big_wave_direction_x
-            //      ,[big_wave_direction_y] =        @big_wave_direction_y
-            //      ,[little_wave_direction_x] =     @little_wave_direction_x
-            //      ,[little_wave_direction_y] =     @little_wave_direction_y
-            //      ,[normal_map_texture] =          @normal_map_texture
-            //      ,[horizon_r] =                   @horizon_r
-            //      ,[horizon_g] =                   @horizon_g
-            //      ,[horizon_b] =                   @horizon_b
-            //      ,[horizon_i] =                   @horizon_i
-            //      ,[haze_horizon] =                @haze_horizon
-            //      ,[blue_density_r] =              @blue_density_r
-            //      ,[blue_density_g] =              @blue_density_g
-            //      ,[blue_density_b] =              @blue_density_b
-            //      ,[blue_density_i] =              @blue_density_i
-            //      ,[haze_density] =                @haze_density
-            //      ,[density_multiplier] =          @density_multiplier
-            //      ,[distance_multiplier] =         @distance_multiplier
-            //      ,[max_altitude] =                @max_altitude
-            //      ,[sun_moon_color_r] =            @sun_moon_color_r
-            //      ,[sun_moon_color_g] =            @sun_moon_color_g
-            //      ,[sun_moon_color_b] =            @sun_moon_color_b
-            //      ,[sun_moon_color_i] =            @sun_moon_color_i
-            //      ,[sun_moon_position] =           @sun_moon_position
-            //      ,[ambient_r] =                   @ambient_r
-            //      ,[ambient_g] =                   @ambient_g
-            //      ,[ambient_b] =                   @ambient_b
-            //      ,[ambient_i] =                   @ambient_i
-            //      ,[east_angle] =                  @east_angle
-            //      ,[sun_glow_focus] =              @sun_glow_focus
-            //      ,[sun_glow_size] =               @sun_glow_size
-            //      ,[scene_gamma] =                 @scene_gamma
-            //      ,[star_brightness] =             @star_brightness
-            //      ,[cloud_color_r] =               @cloud_color_r
-            //      ,[cloud_color_g] =               @cloud_color_g
-            //      ,[cloud_color_b] =               @cloud_color_b
-            //      ,[cloud_color_i] =               @cloud_color_i
-            //      ,[cloud_x] =                     @cloud_x
-            //      ,[cloud_y] =                     @cloud_y
-            //      ,[cloud_density] =               @cloud_density
-            //      ,[cloud_coverage] =              @cloud_coverage
-            //      ,[cloud_scale] =                 @cloud_scale
-            //      ,[cloud_detail_x] =              @cloud_detail_x
-            //      ,[cloud_detail_y] =              @cloud_detail_y
-            //      ,[cloud_detail_density] =        @cloud_detail_density
-            //      ,[cloud_scroll_x] =              @cloud_scroll_x
-            //      ,[cloud_scroll_x_lock] =         @cloud_scroll_x_lock
-            //      ,[cloud_scroll_y] =              @cloud_scroll_y
-            //      ,[cloud_scroll_y_lock] =         @cloud_scroll_y_lock
-            //      ,[draw_classic_clouds] =         @draw_classic_clouds
-            // WHERE region_id = @region_id";
-            //                using (SqlConnection conn = new SqlConnection(m_connectionString))
-            //                {
-            //                    conn.Open();
-            //                    using (SqlCommand cmd = new SqlCommand(sql, conn))
-            //                    {
-            //                        cmd.Parameters.AddWithValue("region_id", wl.regionID);
-            //                        cmd.Parameters.AddWithValue("water_color_r", wl.waterColor.X);
-            //                        cmd.Parameters.AddWithValue("water_color_g", wl.waterColor.Y);
-            //                        cmd.Parameters.AddWithValue("water_color_b", wl.waterColor.Z);
-            //                        cmd.Parameters.AddWithValue("water_fog_density_exponent", wl.waterFogDensityExponent);
-            //                        cmd.Parameters.AddWithValue("underwater_fog_modifier", wl.underwaterFogModifier);
-            //                        cmd.Parameters.AddWithValue("reflection_wavelet_scale_1", wl.reflectionWaveletScale.X);
-            //                        cmd.Parameters.AddWithValue("reflection_wavelet_scale_2", wl.reflectionWaveletScale.Y);
-            //                        cmd.Parameters.AddWithValue("reflection_wavelet_scale_3", wl.reflectionWaveletScale.Z);
-            //                        cmd.Parameters.AddWithValue("fresnel_scale", wl.fresnelScale);
-            //                        cmd.Parameters.AddWithValue("fresnel_offset", wl.fresnelOffset);
-            //                        cmd.Parameters.AddWithValue("refract_scale_above", wl.refractScaleAbove);
-            //                        cmd.Parameters.AddWithValue("refract_scale_below", wl.refractScaleBelow);
-            //                        cmd.Parameters.AddWithValue("blur_multiplier", wl.blurMultiplier);
-            //                        cmd.Parameters.AddWithValue("big_wave_direction_x", wl.bigWaveDirection.X);
-            //                        cmd.Parameters.AddWithValue("big_wave_direction_y", wl.bigWaveDirection.Y);
-            //                        cmd.Parameters.AddWithValue("little_wave_direction_x", wl.littleWaveDirection.X);
-            //                        cmd.Parameters.AddWithValue("little_wave_direction_y", wl.littleWaveDirection.Y);
-            //                        cmd.Parameters.AddWithValue("normal_map_texture", wl.normalMapTexture);
-            //                        cmd.Parameters.AddWithValue("horizon_r", wl.horizon.X);
-            //                        cmd.Parameters.AddWithValue("horizon_g", wl.horizon.Y);
-            //                        cmd.Parameters.AddWithValue("horizon_b", wl.horizon.Z);
-            //                        cmd.Parameters.AddWithValue("horizon_i", wl.horizon.W);
-            //                        cmd.Parameters.AddWithValue("haze_horizon", wl.hazeHorizon);
-            //                        cmd.Parameters.AddWithValue("blue_density_r", wl.blueDensity.X);
-            //                        cmd.Parameters.AddWithValue("blue_density_g", wl.blueDensity.Y);
-            //                        cmd.Parameters.AddWithValue("blue_density_b", wl.blueDensity.Z);
-            //                        cmd.Parameters.AddWithValue("blue_density_i", wl.blueDensity.W);
-            //                        cmd.Parameters.AddWithValue("haze_density", wl.hazeDensity);
-            //                        cmd.Parameters.AddWithValue("density_multiplier", wl.densityMultiplier);
-            //                        cmd.Parameters.AddWithValue("distance_multiplier", wl.distanceMultiplier);
-            //                        cmd.Parameters.AddWithValue("max_altitude", wl.maxAltitude);
-            //                        cmd.Parameters.AddWithValue("sun_moon_color_r", wl.sunMoonColor.X);
-            //                        cmd.Parameters.AddWithValue("sun_moon_color_g", wl.sunMoonColor.Y);
-            //                        cmd.Parameters.AddWithValue("sun_moon_color_b", wl.sunMoonColor.Z);
-            //                        cmd.Parameters.AddWithValue("sun_moon_color_i", wl.sunMoonColor.W);
-            //                        cmd.Parameters.AddWithValue("sun_moon_position", wl.sunMoonPosition);
-            //                        cmd.Parameters.AddWithValue("ambient_r", wl.ambient.X);
-            //                        cmd.Parameters.AddWithValue("ambient_g", wl.ambient.Y);
-            //                        cmd.Parameters.AddWithValue("ambient_b", wl.ambient.Z);
-            //                        cmd.Parameters.AddWithValue("ambient_i", wl.ambient.W);
-            //                        cmd.Parameters.AddWithValue("east_angle", wl.eastAngle);
-            //                        cmd.Parameters.AddWithValue("sun_glow_focus", wl.sunGlowFocus);
-            //                        cmd.Parameters.AddWithValue("sun_glow_size", wl.sunGlowSize);
-            //                        cmd.Parameters.AddWithValue("scene_gamma", wl.sceneGamma);
-            //                        cmd.Parameters.AddWithValue("star_brightness", wl.starBrightness);
-            //                        cmd.Parameters.AddWithValue("cloud_color_r", wl.cloudColor.X);
-            //                        cmd.Parameters.AddWithValue("cloud_color_g", wl.cloudColor.Y);
-            //                        cmd.Parameters.AddWithValue("cloud_color_b", wl.cloudColor.Z);
-            //                        cmd.Parameters.AddWithValue("cloud_color_i", wl.cloudColor.W);
-            //                        cmd.Parameters.AddWithValue("cloud_x", wl.cloudXYDensity.X);
-            //                        cmd.Parameters.AddWithValue("cloud_y", wl.cloudXYDensity.Y);
-            //                        cmd.Parameters.AddWithValue("cloud_density", wl.cloudXYDensity.Z);
-            //                        cmd.Parameters.AddWithValue("cloud_coverage", wl.cloudCoverage);
-            //                        cmd.Parameters.AddWithValue("cloud_scale", wl.cloudScale);
-            //                        cmd.Parameters.AddWithValue("cloud_detail_x", wl.cloudDetailXYDensity.X);
-            //                        cmd.Parameters.AddWithValue("cloud_detail_y", wl.cloudDetailXYDensity.Y);
-            //                        cmd.Parameters.AddWithValue("cloud_detail_density", wl.cloudDetailXYDensity.Z);
-            //                        cmd.Parameters.AddWithValue("cloud_scroll_x", wl.cloudScrollX);
-            //                        cmd.Parameters.AddWithValue("cloud_scroll_x_lock", wl.cloudScrollXLock);
-            //                        cmd.Parameters.AddWithValue("cloud_scroll_y", wl.cloudScrollY);
-            //                        cmd.Parameters.AddWithValue("cloud_scroll_y_lock", wl.cloudScrollYLock);
-            //                        cmd.Parameters.AddWithValue("draw_classic_clouds", wl.drawClassicClouds);
-
-            //                        cmd.ExecuteNonQuery();
-            //                    }
-            //                }
-            //            }
-            #endregion
-        }
 
         #region Environment Settings
         public string LoadRegionEnvironmentSettings(UUID regionUUID)

+ 3 - 219
OpenSim/Data/SQLite/SQLiteSimulationData.cs

@@ -429,75 +429,6 @@ namespace OpenSim.Data.SQLite
             }
         }
 
-        /// <summary>
-        /// Load windlight settings from region storage
-        /// </summary>
-        /// <param name="regionUUID">RegionID</param>
-        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
-        {
-            RegionLightShareData wl = null;
-
-            lock (ds)
-            {
-                DataTable windlightTable = ds.Tables["regionwindlight"];
-                DataRow windlightRow = windlightTable.Rows.Find(regionUUID.ToString());
-                if (windlightRow == null)
-                {
-                    wl = new RegionLightShareData();
-                    wl.regionID = regionUUID;
-                    StoreRegionWindlightSettings(wl);
-                    return wl;
-                }
-                wl = buildRegionWindlight(windlightRow);
-                return wl;
-            }
-        }
-
-        /// <summary>
-        /// Remove windlight settings from region storage
-        /// </summary>
-        /// <param name="regionID">RegionID</param>
-        public void RemoveRegionWindlightSettings(UUID regionID)
-        {
-            lock (ds)
-            {
-                DataTable windlightTable = ds.Tables["regionwindlight"];
-                DataRow windlightRow = windlightTable.Rows.Find(regionID.ToString());
-
-                if (windlightRow != null)
-                {
-                    windlightRow.Delete();
-                }
-            }
-            Commit();
-        }
-
-        /// <summary>
-        /// Adds an windlight into region storage
-        /// </summary>
-        /// <param name="wl">RegionLightShareData</param>
-        public void StoreRegionWindlightSettings(RegionLightShareData wl)
-        {
-            lock (ds)
-            {
-                DataTable windlightTable = ds.Tables["regionwindlight"];
-                DataRow windlightRow = windlightTable.Rows.Find(wl.regionID.ToString());
-
-                if (windlightRow == null)
-                {
-                    windlightRow = windlightTable.NewRow();
-                    fillRegionWindlightRow(windlightRow, wl);
-                    windlightTable.Rows.Add(windlightRow);
-                }
-                else
-                {
-                    fillRegionWindlightRow(windlightRow, wl);
-                }
-
-                Commit();
-            }
-        }
-
         #region Region Environment Settings
         public string LoadRegionEnvironmentSettings(UUID regionUUID)
         {
@@ -2038,84 +1969,10 @@ namespace OpenSim.Data.SQLite
             newSettings.ParcelImageID = new UUID((String)row["parcel_tile_ID"]);
             newSettings.GodBlockSearch = Convert.ToBoolean(row["block_search"]);
             newSettings.Casino = Convert.ToBoolean(row["casino"]);
-            return newSettings;
-        }
+            if (!(row["cacheID"] is System.DBNull))
+                newSettings.CacheID = new UUID((String)row["cacheID"]);
 
-        /// <summary>
-        /// Build a windlight entry from the persisted data.
-        /// </summary>
-        /// <param name="row"></param>
-        /// <returns>RegionLightShareData</returns>
-        private RegionLightShareData buildRegionWindlight(DataRow row)
-        {
-            RegionLightShareData windlight = new RegionLightShareData();
-
-            windlight.regionID = new UUID((string)row["region_id"]);
-            windlight.waterColor.X = Convert.ToSingle(row["water_color_r"]);
-            windlight.waterColor.Y = Convert.ToSingle(row["water_color_g"]);
-            windlight.waterColor.Z = Convert.ToSingle(row["water_color_b"]);
-            //windlight.waterColor.W = Convert.ToSingle(row["water_color_i"]); //not implemented
-            windlight.waterFogDensityExponent = Convert.ToSingle(row["water_fog_density_exponent"]);
-            windlight.underwaterFogModifier = Convert.ToSingle(row["underwater_fog_modifier"]);
-            windlight.reflectionWaveletScale.X = Convert.ToSingle(row["reflection_wavelet_scale_1"]);
-            windlight.reflectionWaveletScale.Y = Convert.ToSingle(row["reflection_wavelet_scale_2"]);
-            windlight.reflectionWaveletScale.Z = Convert.ToSingle(row["reflection_wavelet_scale_3"]);
-            windlight.fresnelScale = Convert.ToSingle(row["fresnel_scale"]);
-            windlight.fresnelOffset = Convert.ToSingle(row["fresnel_offset"]);
-            windlight.refractScaleAbove = Convert.ToSingle(row["refract_scale_above"]);
-            windlight.refractScaleBelow = Convert.ToSingle(row["refract_scale_below"]);
-            windlight.blurMultiplier = Convert.ToSingle(row["blur_multiplier"]);
-            windlight.bigWaveDirection.X = Convert.ToSingle(row["big_wave_direction_x"]);
-            windlight.bigWaveDirection.Y = Convert.ToSingle(row["big_wave_direction_y"]);
-            windlight.littleWaveDirection.X = Convert.ToSingle(row["little_wave_direction_x"]);
-            windlight.littleWaveDirection.Y = Convert.ToSingle(row["little_wave_direction_y"]);
-            windlight.normalMapTexture = new UUID((string)row["normal_map_texture"]);
-            windlight.horizon.X = Convert.ToSingle(row["horizon_r"]);
-            windlight.horizon.Y = Convert.ToSingle(row["horizon_g"]);
-            windlight.horizon.Z = Convert.ToSingle(row["horizon_b"]);
-            windlight.horizon.W = Convert.ToSingle(row["horizon_i"]);
-            windlight.hazeHorizon = Convert.ToSingle(row["haze_horizon"]);
-            windlight.blueDensity.X = Convert.ToSingle(row["blue_density_r"]);
-            windlight.blueDensity.Y = Convert.ToSingle(row["blue_density_g"]);
-            windlight.blueDensity.Z = Convert.ToSingle(row["blue_density_b"]);
-            windlight.blueDensity.W = Convert.ToSingle(row["blue_density_i"]);
-            windlight.hazeDensity = Convert.ToSingle(row["haze_density"]);
-            windlight.densityMultiplier = Convert.ToSingle(row["density_multiplier"]);
-            windlight.distanceMultiplier = Convert.ToSingle(row["distance_multiplier"]);
-            windlight.maxAltitude = Convert.ToUInt16(row["max_altitude"]);
-            windlight.sunMoonColor.X = Convert.ToSingle(row["sun_moon_color_r"]);
-            windlight.sunMoonColor.Y = Convert.ToSingle(row["sun_moon_color_g"]);
-            windlight.sunMoonColor.Z = Convert.ToSingle(row["sun_moon_color_b"]);
-            windlight.sunMoonColor.W = Convert.ToSingle(row["sun_moon_color_i"]);
-            windlight.sunMoonPosition = Convert.ToSingle(row["sun_moon_position"]);
-            windlight.ambient.X = Convert.ToSingle(row["ambient_r"]);
-            windlight.ambient.Y = Convert.ToSingle(row["ambient_g"]);
-            windlight.ambient.Z = Convert.ToSingle(row["ambient_b"]);
-            windlight.ambient.W = Convert.ToSingle(row["ambient_i"]);
-            windlight.eastAngle = Convert.ToSingle(row["east_angle"]);
-            windlight.sunGlowFocus = Convert.ToSingle(row["sun_glow_focus"]);
-            windlight.sunGlowSize = Convert.ToSingle(row["sun_glow_size"]);
-            windlight.sceneGamma = Convert.ToSingle(row["scene_gamma"]);
-            windlight.starBrightness = Convert.ToSingle(row["star_brightness"]);
-            windlight.cloudColor.X = Convert.ToSingle(row["cloud_color_r"]);
-            windlight.cloudColor.Y = Convert.ToSingle(row["cloud_color_g"]);
-            windlight.cloudColor.Z = Convert.ToSingle(row["cloud_color_b"]);
-            windlight.cloudColor.W = Convert.ToSingle(row["cloud_color_i"]);
-            windlight.cloudXYDensity.X = Convert.ToSingle(row["cloud_x"]);
-            windlight.cloudXYDensity.Y = Convert.ToSingle(row["cloud_y"]);
-            windlight.cloudXYDensity.Z = Convert.ToSingle(row["cloud_density"]);
-            windlight.cloudCoverage = Convert.ToSingle(row["cloud_coverage"]);
-            windlight.cloudScale = Convert.ToSingle(row["cloud_scale"]);
-            windlight.cloudDetailXYDensity.X = Convert.ToSingle(row["cloud_detail_x"]);
-            windlight.cloudDetailXYDensity.Y = Convert.ToSingle(row["cloud_detail_y"]);
-            windlight.cloudDetailXYDensity.Z = Convert.ToSingle(row["cloud_detail_density"]);
-            windlight.cloudScrollX = Convert.ToSingle(row["cloud_scroll_x"]);
-            windlight.cloudScrollXLock = Convert.ToBoolean(row["cloud_scroll_x_lock"]);
-            windlight.cloudScrollY = Convert.ToSingle(row["cloud_scroll_y"]);
-            windlight.cloudScrollYLock = Convert.ToBoolean(row["cloud_scroll_y_lock"]);
-            windlight.drawClassicClouds = Convert.ToBoolean(row["draw_classic_clouds"]);
-
-            return windlight;
+            return newSettings;
         }
 
         /// <summary>
@@ -2461,79 +2318,6 @@ namespace OpenSim.Data.SQLite
             row["cacheID"] = settings.CacheID;
         }
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="row"></param>
-        /// <param name="windlight"></param>
-        private static void fillRegionWindlightRow(DataRow row, RegionLightShareData windlight)
-        {
-            row["region_id"] = windlight.regionID.ToString();
-            row["water_color_r"] = windlight.waterColor.X;
-            row["water_color_g"] = windlight.waterColor.Y;
-            row["water_color_b"] = windlight.waterColor.Z;
-            row["water_color_i"] = 1; //windlight.waterColor.W;  //not implemented
-            row["water_fog_density_exponent"] = windlight.waterFogDensityExponent;
-            row["underwater_fog_modifier"] = windlight.underwaterFogModifier;
-            row["reflection_wavelet_scale_1"] = windlight.reflectionWaveletScale.X;
-            row["reflection_wavelet_scale_2"] = windlight.reflectionWaveletScale.Y;
-            row["reflection_wavelet_scale_3"] = windlight.reflectionWaveletScale.Z;
-            row["fresnel_scale"] = windlight.fresnelScale;
-            row["fresnel_offset"] = windlight.fresnelOffset;
-            row["refract_scale_above"] = windlight.refractScaleAbove;
-            row["refract_scale_below"] = windlight.refractScaleBelow;
-            row["blur_multiplier"] = windlight.blurMultiplier;
-            row["big_wave_direction_x"] = windlight.bigWaveDirection.X;
-            row["big_wave_direction_y"] = windlight.bigWaveDirection.Y;
-            row["little_wave_direction_x"] = windlight.littleWaveDirection.X;
-            row["little_wave_direction_y"] = windlight.littleWaveDirection.Y;
-            row["normal_map_texture"] = windlight.normalMapTexture.ToString();
-            row["horizon_r"] = windlight.horizon.X;
-            row["horizon_g"] = windlight.horizon.Y;
-            row["horizon_b"] = windlight.horizon.Z;
-            row["horizon_i"] = windlight.horizon.W;
-            row["haze_horizon"] = windlight.hazeHorizon;
-            row["blue_density_r"] = windlight.blueDensity.X;
-            row["blue_density_g"] = windlight.blueDensity.Y;
-            row["blue_density_b"] = windlight.blueDensity.Z;
-            row["blue_density_i"] = windlight.blueDensity.W;
-            row["haze_density"] = windlight.hazeDensity;
-            row["density_multiplier"] = windlight.densityMultiplier;
-            row["distance_multiplier"] = windlight.distanceMultiplier;
-            row["max_altitude"] = windlight.maxAltitude;
-            row["sun_moon_color_r"] = windlight.sunMoonColor.X;
-            row["sun_moon_color_g"] = windlight.sunMoonColor.Y;
-            row["sun_moon_color_b"] = windlight.sunMoonColor.Z;
-            row["sun_moon_color_i"] = windlight.sunMoonColor.W;
-            row["sun_moon_position"] = windlight.sunMoonPosition;
-            row["ambient_r"] = windlight.ambient.X;
-            row["ambient_g"] = windlight.ambient.Y;
-            row["ambient_b"] = windlight.ambient.Z;
-            row["ambient_i"] = windlight.ambient.W;
-            row["east_angle"] = windlight.eastAngle;
-            row["sun_glow_focus"] = windlight.sunGlowFocus;
-            row["sun_glow_size"] = windlight.sunGlowSize;
-            row["scene_gamma"] = windlight.sceneGamma;
-            row["star_brightness"] = windlight.starBrightness;
-            row["cloud_color_r"] = windlight.cloudColor.X;
-            row["cloud_color_g"] = windlight.cloudColor.Y;
-            row["cloud_color_b"] = windlight.cloudColor.Z;
-            row["cloud_color_i"] = windlight.cloudColor.W;
-            row["cloud_x"] = windlight.cloudXYDensity.X;
-            row["cloud_y"] = windlight.cloudXYDensity.Y;
-            row["cloud_density"] = windlight.cloudXYDensity.Z;
-            row["cloud_coverage"] = windlight.cloudCoverage;
-            row["cloud_scale"] = windlight.cloudScale;
-            row["cloud_detail_x"] = windlight.cloudDetailXYDensity.X;
-            row["cloud_detail_y"] = windlight.cloudDetailXYDensity.Y;
-            row["cloud_detail_density"] = windlight.cloudDetailXYDensity.Z;
-            row["cloud_scroll_x"] = windlight.cloudScrollX;
-            row["cloud_scroll_x_lock"] = windlight.cloudScrollXLock;
-            row["cloud_scroll_y"] = windlight.cloudScrollY;
-            row["cloud_scroll_y_lock"] = windlight.cloudScrollYLock;
-            row["draw_classic_clouds"] = windlight.drawClassicClouds;
-        }
-
         /// <summary>
         ///
         /// </summary>

+ 0 - 74
OpenSim/Framework/RegionInfo.cs

@@ -40,69 +40,12 @@ using OpenMetaverse.StructuredData;
 
 namespace OpenSim.Framework
 {
-    [Serializable]
-    public class RegionLightShareData : ICloneable
-    {
-        public bool valid = false;
-        public UUID regionID = UUID.Zero;
-        public Vector3 waterColor = new Vector3(4.0f,38.0f,64.0f);
-        public float waterFogDensityExponent = 4.0f;
-        public float underwaterFogModifier = 0.25f;
-        public Vector3 reflectionWaveletScale = new Vector3(2.0f,2.0f,2.0f);
-        public float fresnelScale = 0.40f;
-        public float fresnelOffset = 0.50f;
-        public float refractScaleAbove = 0.03f;
-        public float refractScaleBelow = 0.20f;
-        public float blurMultiplier = 0.040f;
-        public Vector2 bigWaveDirection = new Vector2(1.05f,-0.42f);
-        public Vector2 littleWaveDirection = new Vector2(1.11f,-1.16f);
-        public UUID normalMapTexture = new UUID("822ded49-9a6c-f61c-cb89-6df54f42cdf4");
-        public Vector4 horizon = new Vector4(0.25f, 0.25f, 0.32f, 0.32f);
-        public float hazeHorizon = 0.19f;
-        public Vector4 blueDensity = new Vector4(0.12f, 0.22f, 0.38f, 0.38f);
-        public float hazeDensity = 0.70f;
-        public float densityMultiplier = 0.18f;
-        public float distanceMultiplier = 0.8f;
-        public UInt16 maxAltitude = 1605;
-        public Vector4 sunMoonColor = new Vector4(0.24f, 0.26f, 0.30f, 0.30f);
-        public float sunMoonPosition = 0.317f;
-        public Vector4 ambient = new Vector4(0.35f,0.35f,0.35f,0.35f);
-        public float eastAngle = 0.0f;
-        public float sunGlowFocus = 0.10f;
-        public float sunGlowSize = 1.75f;
-        public float sceneGamma = 1.0f;
-        public float starBrightness = 0.0f;
-        public Vector4 cloudColor = new Vector4(0.41f, 0.41f, 0.41f, 0.41f);
-        public Vector3 cloudXYDensity = new Vector3(1.00f, 0.53f, 1.00f);
-        public float cloudCoverage = 0.27f;
-        public float cloudScale = 0.42f;
-        public Vector3 cloudDetailXYDensity = new Vector3(1.00f, 0.53f, 0.12f);
-        public float cloudScrollX = 0.20f;
-        public bool cloudScrollXLock = false;
-        public float cloudScrollY = 0.01f;
-        public bool cloudScrollYLock = false;
-        public bool drawClassicClouds = true;
-
-        public delegate void SaveDelegate(RegionLightShareData wl);
-        public event SaveDelegate OnSave;
-        public void Save()
-        {
-            if (OnSave != null)
-                OnSave(this);
-        }
-        public object Clone()
-        {
-            return this.MemberwiseClone();      // call clone method
-        }
-
-    }
 
     public class RegionInfo
     {
         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
         private static readonly string LogHeader = "[REGION INFO]";
 
-
         public bool commFailTF = false;
         public ConfigurationMember configMember;
         public string DataStore = String.Empty;
@@ -134,7 +77,6 @@ namespace OpenSim.Framework
         private int m_maxPrimsPerUser = -1;
         private int m_linksetCapacity = 0;
         private string m_regionType = String.Empty;
-        private RegionLightShareData m_windlight = new RegionLightShareData();
         protected uint m_httpPort;
         protected string m_serverURI;
         protected string m_regionName = String.Empty;
@@ -222,7 +164,6 @@ namespace OpenSim.Framework
                     source.Save(filename);
 
                 RegionFile = filename;
-
                 return;
             }
 
@@ -302,21 +243,6 @@ namespace OpenSim.Framework
             set { m_regionSettings = value; }
         }
 
-        public RegionLightShareData WindlightSettings
-        {
-            get
-            {
-                if (m_windlight == null)
-                {
-                    m_windlight = new RegionLightShareData();
-                }
-
-                return m_windlight;
-            }
-
-            set { m_windlight = value; }
-        }
-
         public float NonphysPrimMin
         {
             get { return m_nonphysPrimMin; }

+ 1233 - 0
OpenSim/Framework/ViewerEnviroment.cs

@@ -0,0 +1,1233 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the OpenSimulator Project nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using OpenMetaverse;
+using OpenMetaverse.StructuredData;
+
+namespace OpenSim.Framework
+{
+    // legacy lightshare
+    public class RegionLightShareData
+    {
+        public Vector3 waterColor = new Vector3(4.0f, 38.0f, 64.0f);
+        public float waterFogDensityExponent = 4.0f;
+        public float underwaterFogModifier = 0.25f;
+        public Vector3 reflectionWaveletScale = new Vector3(2.0f, 2.0f, 2.0f);
+        public float fresnelScale = 0.40f;
+        public float fresnelOffset = 0.50f;
+        public float refractScaleAbove = 0.03f;
+        public float refractScaleBelow = 0.20f;
+        public float blurMultiplier = 0.040f;
+        public Vector2 bigWaveDirection = new Vector2(1.05f, -0.42f);
+        public Vector2 littleWaveDirection = new Vector2(1.11f, -1.16f);
+        public UUID normalMapTexture = new UUID("822ded49-9a6c-f61c-cb89-6df54f42cdf4");
+        public Vector4 horizon = new Vector4(0.25f, 0.25f, 0.32f, 0.32f);
+        public float hazeHorizon = 0.19f;
+        public Vector4 blueDensity = new Vector4(0.12f, 0.22f, 0.38f, 0.38f);
+        public float hazeDensity = 0.70f;
+        public float densityMultiplier = 0.18f;
+        public float distanceMultiplier = 0.8f;
+        public UInt16 maxAltitude = 1605;
+        public Vector4 sunMoonColor = new Vector4(0.24f, 0.26f, 0.30f, 0.30f);
+        public float sunMoonPosition = 0.317f;
+        public Vector4 ambient = new Vector4(0.35f, 0.35f, 0.35f, 0.35f);
+        public float eastAngle = 0.0f;
+        public float sunGlowFocus = 0.10f;
+        public float sunGlowSize = 1.75f;
+        public float sceneGamma = 1.0f;
+        public float starBrightness = 0.0f;
+        public Vector4 cloudColor = new Vector4(0.41f, 0.41f, 0.41f, 0.41f);
+        public Vector3 cloudXYDensity = new Vector3(1.00f, 0.53f, 1.00f);
+        public float cloudCoverage = 0.27f;
+        public float cloudScale = 0.42f;
+        public Vector3 cloudDetailXYDensity = new Vector3(1.00f, 0.53f, 0.12f);
+        public float cloudScrollX = 0.20f;
+        public bool cloudScrollXLock = false;
+        public float cloudScrollY = 0.01f;
+        public bool cloudScrollYLock = false;
+        public bool drawClassicClouds = true;
+    }
+
+    public class SkyData
+    {
+        public struct AbsCoefData
+        {
+            public float constant_term;
+            public float exp_scale;
+            public float exp_term;
+            public float linear_term;
+            public float width;
+
+            public AbsCoefData(float w, float expt, float exps, float lin, float cons)
+            {
+                constant_term = cons;
+                exp_scale = exps;
+                exp_term = expt;
+                linear_term = lin;
+                width = w;
+            }
+
+            public OSDMap ToOSD()
+            {
+                OSDMap map = new OSDMap();
+                map["constant_term"] = constant_term;
+                map["exp_scale"] = exp_scale;
+                map["exp_term"] = exp_term;
+                map["linear_term"] = linear_term;
+                map["width"] = width;
+                return map;
+            }
+
+            public void FromOSD(OSDMap map)
+            {
+                constant_term = map["constant_term"];
+                exp_scale = map["exp_scale"];
+                exp_term = map["exp_term"];
+                linear_term = map["linear_term"];
+                width = map["width"];
+            }
+        }
+
+        public struct mCoefData
+        {
+            public float anisotropy;
+            public float constant_term;
+            public float exp_scale;
+            public float exp_term;
+            public float linear_term;
+            public float width;
+
+            public mCoefData(float w, float expt, float exps, float lin, float cons, float ani)
+            {
+                anisotropy = ani;
+                constant_term = cons;
+                exp_scale = exps;
+                exp_term = expt;
+                linear_term = lin;
+                width = w;
+            }
+
+            public OSDMap ToOSD()
+            {
+                OSDMap map = new OSDMap();
+                map["anisotropy"] = anisotropy;
+                map["constant_term"] = constant_term;
+                map["exp_scale"] = exp_scale;
+                map["exp_term"] = exp_term;
+                map["linear_term"] = linear_term;
+                map["width"] = width;
+                return map;
+            }
+
+            public void FromOSD(OSDMap map)
+            {
+                anisotropy = map["anisotropy"];
+                constant_term = map["constant_term"];
+                exp_scale = map["exp_scale"];
+                exp_term = map["exp_term"];
+                linear_term = map["linear_term"];
+                width = map["width"];
+            }
+        }
+        //AbsCoefData(float w, float expt, float exps, float lin, float cons)
+        public AbsCoefData abscoefA = new AbsCoefData(25000f, 0, 0, 0, 0);
+        public AbsCoefData abscoefB = new AbsCoefData(0, 0, 0, -6.6666667e-5f, 1f);
+        public AbsCoefData rayleigh_config = new AbsCoefData(0,  1, -1.25e-4f, 0, 0);
+
+        //mCoefData(float w, float expt, float exps, float lin, float cons, float ani)
+        public mCoefData mieconf = new mCoefData(0, 1f, -8.333333e-4f, 0, 0, 0.8f);
+
+        UUID bloom_id = new UUID("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef");
+        UUID cloud_id = new UUID("1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b");
+        UUID halo_id = new UUID("12149143-f599-91a7-77ac-b52a3c0f59cd");
+        UUID moon_id = new UUID("ec4b9f0b-d008-45c6-96a4-01dd947ac621");
+        UUID rainbow_id = new UUID("11b4c57c-56b3-04ed-1f82-2004363882e4");
+        UUID sun_id = UUID.Zero;
+
+        public Vector3 ambient = new Vector3(0.25f, 0.25f, 0.25f); //?
+        public Vector3 blue_density = new Vector3(0.2447f, 0.4487f, 0.76f);
+        public Vector3 blue_horizon = new Vector3(0.4954f, 0.4954f, 0.64f);
+        public Vector3 cloud_color = new Vector3(0.41f, 0.41f, 0.41f);
+        public Vector3 cloud_pos_density1 = new Vector3(1, 0.5260f, 1);
+        public Vector3 cloud_pos_density2 = new Vector3(1, 0.5260f, 1);
+        public float cloud_scale = 0.42f;
+        public Vector2 cloud_scroll_rate = new Vector2(0.2f, 0.011f);
+        public float cloud_shadow = 0.27f;
+        public float density_multiplier = 0.00018f;
+        public float distance_multiplier = 0.8f;
+        public float gamma = 1;
+        public Vector3 glow = new Vector3(5, 0.0010f, -0.48f);
+        public float haze_density = 0.7f;
+        public float haze_horizon = 0.19f;
+        public float max_y = 1605;
+        public float star_brightness = 0f;
+
+        public Vector4 sunlight_color = new Vector4(0.7342f, 0.7815f, 0.9f, 0.3f);
+        public string Name = "Default";
+
+        public float cloud_variance = 0;
+        public float dome_offset = 0.96f;
+        public float dome_radius = 15000f;
+        public float droplet_radius = 800.0f;
+        public float ice_level = 0;
+
+        public float moisture_level = 0;
+        public float sky_bottom_radius = 6360;
+        public float sky_top_radius = 6420;
+
+        public float sun_arc_radians = 0.00045f;
+        public Quaternion sun_rotation = new Quaternion(0, -0.3824995f, 0, 0.9239557f);
+        public float sun_scale = 1;
+
+        public float moon_brightness = 0.5f;
+        public Quaternion moon_rotation = new Quaternion(0, 0.9239557f, 0, 0.3824995f);
+        public float moon_scale = 1;
+        public float planet_radius = 6360f;
+
+        public void FromWLOSD(string name, OSD osd)
+        {
+            Vector4 v4tmp;
+            OSDMap map = osd as OSDMap;
+
+            v4tmp = map["ambient"];
+            ambient = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["blue_density"];
+            blue_density = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["blue_horizon"];
+            blue_horizon = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["cloud_color"];
+            cloud_color = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["cloud_pos_density1"];
+            cloud_pos_density1 = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["cloud_pos_density2"];
+            cloud_pos_density2 = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["cloud_scale"];
+            cloud_scale = v4tmp.X;
+            cloud_scroll_rate = map["cloud_scroll_rate"];
+            cloud_scroll_rate.X -= 10f;
+            cloud_scroll_rate.Y -= 10f;
+            v4tmp = map["cloud_shadow"];
+            cloud_shadow = v4tmp.X;
+            v4tmp = map["density_multiplier"];
+            density_multiplier = v4tmp.X;
+            v4tmp = map["distance_multiplier"];
+            distance_multiplier = v4tmp.X;
+
+            Vector2 v2tmp = map["enable_cloud_scroll"];
+            if (v2tmp.X == 0)
+                cloud_scroll_rate.X = 0;
+            if (v2tmp.Y == 0)
+                cloud_scroll_rate.Y = 0;
+            v4tmp = map["gamma"];
+            gamma = v4tmp.X;
+            v4tmp = map["glow"];
+            glow = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            v4tmp = map["haze_density"];
+            haze_density = v4tmp.X;
+            v4tmp = map["haze_horizon"];
+            haze_horizon = v4tmp.X;
+            //lightnorm = map["lightnorm"];
+            v4tmp = map["max_y"];
+            max_y = v4tmp.X;
+            star_brightness = map["star_brightness"] * 250.0f;
+
+            sunlight_color = map["sunlight_color"];
+
+            ViewerEnviroment.convertFromAngles(this, map["sun_angle"], map["east_angle"]);
+            Name = name;
+        }
+
+        public OSD ToWLOSD()
+        {
+            OSDMap map = new OSDMap();
+
+            float sun_angle;
+            float east_angle;
+            Vector4 lightnorm;
+            ViewerEnviroment.convertToAngles(this, out sun_angle, out east_angle, out lightnorm);
+
+            map["ambient"] = new Vector4(ambient.X, ambient.Y, ambient.Z, 1);
+            map["blue_density"] = new Vector4(blue_density.X, blue_density.Y, blue_density.Z, 1);
+            map["blue_horizon"] = new Vector4(blue_horizon.X, blue_horizon.Y, blue_horizon.Z, 1);
+            map["cloud_color"] = new Vector4(cloud_color.X, cloud_color.Y, cloud_color.Z, 1);;
+            map["cloud_pos_density1"] = new Vector4(cloud_pos_density1.X, cloud_pos_density1.Y, cloud_pos_density1.Z, 1);
+            map["cloud_pos_density2"] = new Vector4(cloud_pos_density2.X, cloud_pos_density2.Y, cloud_pos_density2.Z, 1);
+            map["cloud_scale"] = new Vector4(cloud_scale, 0, 0, 1);
+            map["cloud_scroll_rate"] = new Vector2(cloud_scroll_rate.X + 10f, cloud_scroll_rate.Y + 10f);
+            map["cloud_shadow"] = new Vector4(cloud_shadow, 0, 0, 1);
+            map["density_multiplier"] = new Vector4(density_multiplier, 0, 0, 1);
+            map["distance_multiplier"] = new Vector4(distance_multiplier, 0, 0, 1);
+            map["east_angle"] = east_angle;
+            map["enable_cloud_scroll"] = new OSDArray { cloud_scroll_rate.X != 0, cloud_scroll_rate.Y != 0 };
+            map["gamma"] = new Vector4(gamma, 0, 0, 1);
+            map["glow"] = new Vector4(glow.X, glow.Y, glow.Z, 1);
+            map["haze_density"] = new Vector4(haze_density, 0, 0, 1);
+            map["haze_horizon"] = new Vector4(haze_horizon, 0, 0, 1);
+            map["lightnorm"] = lightnorm;
+            map["max_y"] = new Vector4(max_y, 0, 0, 1);
+            map["name"] = Name;
+            map["star_brightness"] = star_brightness / 250.0f;
+            map["sun_angle"] = sun_angle;
+            map["sunlight_color"] = sunlight_color;
+
+            return map;
+        }
+
+        public OSD ToOSD()
+        {
+            OSDMap map = new OSDMap(64);
+
+            OSDArray abscfg = new OSDArray(2);
+            abscfg.Add(abscoefA.ToOSD());
+            abscfg.Add(abscoefB.ToOSD());
+            map["absorption_config"] = abscfg;
+
+            map["bloom_id"] = bloom_id;
+            map["cloud_color"] = cloud_color;
+            map["cloud_id"] = cloud_id;
+            map["cloud_pos_density1"] = cloud_pos_density1;
+            map["cloud_pos_density2"] = cloud_pos_density2;
+            map["cloud_scale"] = cloud_scale;
+            map["cloud_scroll_rate"] = cloud_scroll_rate;
+            map["cloud_shadow"] = cloud_shadow;
+            map["cloud_variance"] = cloud_variance;
+            map["dome_offset"] = dome_offset;
+            map["dome_radius"] = dome_radius;
+            map["droplet_radius"] = droplet_radius;
+            map["gamma"] = gamma;
+            map["glow"] = glow;
+            map["halo_id"] = halo_id;
+            map["ice_level"] = ice_level;
+
+            OSDMap lhaze = new OSDMap();
+            lhaze["ambient"] = ambient;
+            lhaze["blue_density"] = blue_density;
+            lhaze["blue_horizon"] = blue_horizon;
+            lhaze["density_multiplier"] = density_multiplier;
+            lhaze["distance_multiplier"] = distance_multiplier;
+            lhaze["haze_density"] = haze_density;
+            lhaze["haze_horizon"] = haze_horizon;
+            map["legacy_haze"] = lhaze;
+
+            map["max_y"] = max_y;
+
+            OSDArray miecfg = new OSDArray();
+            miecfg.Add(mieconf.ToOSD());
+            map["mie_config"] = miecfg;
+
+            map["moisture_level"] = moisture_level;
+            map["moon_brightness"] = moon_brightness;
+            map["moon_id"] = moon_id;
+            map["moon_rotation"] = moon_rotation;
+            map["moon_scale"] = moon_scale;
+            map["planet_radius"] = planet_radius;
+            map["rainbow_id"] = rainbow_id;
+
+            OSDArray rayl = new OSDArray();
+            rayl.Add(rayleigh_config.ToOSD());
+            map["rayleigh_config"] = rayl;
+
+            map["sky_bottom_radius"] = sky_bottom_radius;
+            map["sky_top_radius"] = sky_top_radius;
+            map["star_brightness"] = star_brightness;
+
+            map["sun_arc_radians"] = sun_arc_radians;
+            map["sun_id"] = sun_id;
+            map["sun_rotation"] = sun_rotation;
+            map["sun_scale"] = sun_scale;
+            map["sunlight_color"] = sunlight_color;
+
+            map["type"] = "sky";
+            return map;
+        }
+
+        public void FromOSD(string name, OSDMap map)
+        {
+            OSDArray tmpArray;
+            OSD otmp;
+            if (map.TryGetValue("absorption_config",out otmp) && otmp is OSDArray)
+            {
+                tmpArray = otmp as OSDArray;
+                if (tmpArray.Count > 0)
+                {
+                    abscoefA.FromOSD(tmpArray[0] as OSDMap);
+                    if (tmpArray.Count > 1)
+                        abscoefA.FromOSD(tmpArray[1] as OSDMap);
+                }
+            }
+            if (map.TryGetValue("bloom_id", out otmp))
+                bloom_id = otmp;
+            if (map.TryGetValue("cloud_color", out otmp))
+                cloud_color = otmp;
+            if (map.TryGetValue("cloud_id", out otmp))
+                cloud_id = otmp;
+            if (map.TryGetValue("cloud_pos_density1", out otmp))
+                cloud_pos_density1 = otmp;
+            if (map.TryGetValue("cloud_pos_density2", out otmp))
+                cloud_pos_density2 = otmp;
+            if (map.TryGetValue("cloud_scale", out otmp))
+                cloud_scale = otmp;
+            if (map.TryGetValue("cloud_scroll_rate", out otmp))
+                cloud_scroll_rate = otmp;
+            if (map.TryGetValue("cloud_shadow", out otmp))
+                cloud_shadow = otmp;
+            if (map.TryGetValue("cloud_variance", out otmp))
+                cloud_variance = otmp;
+            if (map.TryGetValue("dome_offset", out otmp))
+                dome_offset = otmp;
+            if (map.TryGetValue("dome_radius", out otmp))
+                dome_radius = otmp;
+            if (map.TryGetValue("droplet_radius", out otmp))
+                droplet_radius = otmp;
+            if (map.TryGetValue("gamma", out otmp))
+                gamma = otmp;
+            if (map.TryGetValue("glow", out otmp))
+                glow = otmp;
+            if (map.TryGetValue("halo_id", out otmp))
+                halo_id = otmp;
+            if (map.TryGetValue("ice_level", out otmp))
+                halo_id = otmp;
+
+            if (map.TryGetValue("legacy_haze", out OSD tmp) && tmp is OSDMap)
+            {
+                OSDMap lHaze = tmp as OSDMap;
+                if (lHaze.TryGetValue("ambient", out otmp))
+                    ambient = otmp;
+                if (lHaze.TryGetValue("blue_density", out otmp))
+                    blue_density = otmp;
+                if (lHaze.TryGetValue("blue_horizon", out otmp))
+                    blue_horizon = otmp;
+                if (lHaze.TryGetValue("density_multiplier", out otmp))
+                    density_multiplier = otmp;
+                if (lHaze.TryGetValue("distance_multiplier", out otmp))
+                    distance_multiplier = otmp;
+                if (lHaze.TryGetValue("haze_density", out otmp))
+                    haze_density = otmp;
+                if (lHaze.TryGetValue("haze_horizon", out otmp))
+                    haze_horizon = otmp;
+            }
+
+            if (map.TryGetValue("max_y", out otmp))
+                max_y = otmp;
+
+            if (map.TryGetValue("mie_config", out otmp) && otmp is OSDArray)
+            {
+                tmpArray = otmp as OSDArray;
+                if (tmpArray.Count > 0)
+                    mieconf.FromOSD(tmpArray[0] as OSDMap);
+            }
+
+            if (map.TryGetValue("moisture_level", out otmp))
+                moisture_level = otmp;
+            if (map.TryGetValue("moon_brightness", out otmp))
+                moon_brightness = otmp;
+            if (map.TryGetValue("moon_id", out otmp))
+                moon_id = otmp;
+            if (map.TryGetValue("moon_rotation", out otmp))
+                moon_rotation = otmp;
+            if (map.TryGetValue("moon_scale", out otmp))
+                moon_scale = otmp;
+            if (map.TryGetValue("planet_radius", out otmp))
+                planet_radius = otmp;
+            if (map.TryGetValue("rainbow_id", out otmp))
+                rainbow_id = otmp;
+
+            if (map.TryGetValue("rayleigh_config", out otmp) && otmp is OSDArray)
+            {
+                tmpArray = otmp as OSDArray;
+                if (tmpArray.Count > 0)
+                    rayleigh_config.FromOSD(tmpArray[0] as OSDMap);
+            }
+
+            if (map.TryGetValue("sky_bottom_radius", out otmp))
+                sky_bottom_radius = otmp;
+            if (map.TryGetValue("sky_top_radius", out otmp))
+                sky_top_radius = otmp;
+            if (map.TryGetValue("star_brightness", out otmp))
+                star_brightness = otmp;
+
+            if (map.TryGetValue("sun_arc_radians", out otmp))
+                sun_arc_radians = otmp;
+            if (map.TryGetValue("sun_id", out otmp))
+                sun_id = otmp;
+            if (map.TryGetValue("sun_rotation", out otmp))
+                sun_rotation = otmp;
+            if (map.TryGetValue("sun_scale", out otmp))
+                sun_scale = otmp;
+            if (map.TryGetValue("sunlight_color", out otmp))
+                sunlight_color = otmp;
+            Name = name;
+        }
+    }
+
+    public class WaterData
+    {
+        public UUID normalMap = new UUID("822ded49-9a6c-f61c-cb89-6df54f42cdf4");
+        public UUID transpTexture = new UUID("2bfd3884-7e27-69b9-ba3a-3e673f680004");
+
+        public float blurMultiplier = 0.04f;
+        public float fresnelOffset = 0.5f;
+        public float fresnelScale = 0.4f;
+        public Vector3 normScale = new Vector3(2f, 2f, 2f);
+        public float scaleAbove = 0.03f;
+        public float scaleBelow = 0.2f;
+        public float underWaterFogMod = 0.25f;
+        public Vector3 waterFogColor = new Vector3(0.0156f, 0.149f, 0.2509f);
+        public float waterFogDensity = 2;
+        public Vector2 wave1Dir = new Vector2(1.05f, -0.42f);
+        public Vector2 wave2Dir = new Vector2(1.11f, -1.16f);
+        public string Name;
+
+        public void FromWLOSD(string name, OSD osd)
+        {
+            Vector4 v4tmp;
+            OSDMap map = osd as OSDMap;
+            blurMultiplier = map["blurMultiplier"];
+            fresnelOffset = map["fresnelOffset"];
+            fresnelScale = map["fresnelScale"];
+            normScale = map["normScale"];
+            normalMap = map["normalMap"];
+            scaleAbove = map["scaleAbove"];
+            scaleBelow = map["scaleBelow"];
+            underWaterFogMod = map["underWaterFogMod"];
+            v4tmp = map["waterFogColor"];
+            waterFogColor = new Vector3(v4tmp.X, v4tmp.Y, v4tmp.Z);
+            waterFogDensity = map["waterFogDensity"];
+            wave1Dir = map["wave1Dir"];
+            wave2Dir = map["wave2Dir"];
+            Name = name;
+        }
+
+        public OSDMap ToWLOSD()
+        {
+            OSDMap map = new OSDMap();
+
+            map["blurMultiplier"] = blurMultiplier;
+            map["fresnelOffset"] = fresnelOffset;
+            map["fresnelScale"] = fresnelScale;
+            map["normScale"] = normScale;
+            map["normalMap"] = normalMap;
+            map["scaleAbove"] = scaleAbove;
+            map["scaleBelow"] = scaleBelow;
+            map["underWaterFogMod"] = underWaterFogMod;
+            map["waterFogColor"] = new Vector4(waterFogColor.X, waterFogColor.Y, waterFogColor.Z, 1);
+            map["waterFogDensity"] = waterFogDensity;
+            //map["waterFogDensity"] = (float)Math.Pow(2.0f, waterFogDensity);
+            map["wave1Dir"] = wave1Dir;
+            map["wave2Dir"] = wave2Dir;
+
+            return map;
+        }
+
+        public void FromOSD(string name, OSDMap map)
+        {
+            OSD otmp;
+            if (map.TryGetValue("blur_multiplier", out otmp))
+                blurMultiplier = otmp;
+            if (map.TryGetValue("fresnel_offset", out otmp))
+                fresnelOffset = otmp;
+            if (map.TryGetValue("fresnel_scale", out otmp))
+                fresnelScale = otmp;
+            if (map.TryGetValue("normal_scale", out otmp))
+                normScale = otmp;
+            if (map.TryGetValue("normal_map", out otmp))
+                normalMap = otmp;
+            if (map.TryGetValue("scale_above", out otmp))
+                scaleAbove = otmp;
+            if (map.TryGetValue("scale_below", out otmp))
+                scaleBelow = otmp;
+            if (map.TryGetValue("underwater_fog_mod", out otmp))
+                underWaterFogMod = otmp;
+            if (map.TryGetValue("water_fog_color", out otmp))
+                waterFogColor = otmp;
+            if (map.TryGetValue("water_fog_density", out otmp))
+                waterFogDensity = otmp;
+            if (map.TryGetValue("wave1_direction", out otmp))
+                wave1Dir = otmp;
+            if (map.TryGetValue("wave2_direction", out otmp))
+                wave2Dir = otmp;
+            if (map.TryGetValue("transparent_texture", out otmp))
+                transpTexture = otmp;
+
+            Name = name;
+        }
+
+        public OSDMap ToOSD()
+        {
+            OSDMap map = new OSDMap();
+
+            map["blur_multiplier"] = blurMultiplier;
+            map["fresnel_offset"] = fresnelOffset;
+            map["fresnel_scale"] = fresnelScale;
+            map["normal_scale"] = normScale;
+            map["normal_map"] = normalMap;
+            map["scale_above"] = scaleAbove;
+            map["scale_below"] = scaleBelow;
+            map["underwater_fog_mod"] = underWaterFogMod;
+            map["water_fog_color"] = waterFogColor;
+            map["water_fog_density"] = waterFogDensity;
+            map["wave1_direction"] = wave1Dir;
+            map["wave2_direction"] = wave2Dir;
+            map["transparent_texture"] = transpTexture;
+            map["type"] ="water";
+
+            return map;
+        }
+    }
+
+    public class DayCycle
+    {
+        public struct TrackEntry
+        {
+            public float time;
+            public string frameName;
+
+            public TrackEntry(float t, string f)
+            {
+                time = t;
+                frameName = f;
+            }
+        }
+
+        public bool IsStaticDayCycle = false;
+        public List<TrackEntry> skyTrack0 = new List<TrackEntry>();
+        public List<TrackEntry> skyTrack1 = new List<TrackEntry>();
+        public List<TrackEntry> skyTrack2 = new List<TrackEntry>();
+        public List<TrackEntry> skyTrack3 = new List<TrackEntry>();
+        public List<TrackEntry> waterTrack = new List<TrackEntry>();
+
+        public Dictionary<string, SkyData> skyframes = new Dictionary<string, SkyData>();
+        public Dictionary<string, WaterData> waterframes = new Dictionary<string, WaterData>();
+
+        public string Name;
+
+        public void FromWLOSD(OSDArray array)
+        {
+            TrackEntry track;
+
+            OSDArray skytracksArray = null;
+            if (array.Count > 1)
+                skytracksArray = array[1] as OSDArray;
+            if(skytracksArray != null)
+            {
+                foreach (OSD setting in skytracksArray)
+                {
+                    OSDArray innerSetting = setting as OSDArray;
+                    if(innerSetting != null)
+                    {
+                        track = new TrackEntry((float)innerSetting[0].AsReal(), innerSetting[1].AsString());
+                        skyTrack0.Add(track);
+                    }
+                }
+            }
+
+            OSDMap skyFramesArray = null;
+            if (array.Count > 2)
+                skyFramesArray = array[2] as OSDMap;
+            if(skyFramesArray != null)
+            {
+                foreach (KeyValuePair<string, OSD> kvp in skyFramesArray)
+                {
+                    SkyData sky = new SkyData();
+                    sky.FromWLOSD(kvp.Key, kvp.Value);
+                    skyframes[kvp.Key] = sky;
+                }
+            }
+
+            WaterData water = new WaterData();
+            OSDMap watermap = null;
+            if(array.Count > 3)
+                watermap = array[3] as OSDMap;
+            if(watermap != null)
+                water.FromWLOSD("WLWater", watermap);
+
+            waterframes["WLWater"] = water;
+            track = new TrackEntry(-1f, "WLWater");
+            waterTrack.Add(track);
+
+            if (skyTrack0.Count == 1 && skyTrack0[0].time == -1f)
+                IsStaticDayCycle = true;
+        }
+
+        public void ToWLOSD(ref OSDArray array)
+        {
+            OSDArray track = new OSDArray();
+            foreach (TrackEntry te in skyTrack0)
+            {
+                track.Add(new OSDArray { te.time, te.frameName });
+            }
+
+            array[1] = track;
+
+            OSDMap frames = new OSDMap();
+            foreach (KeyValuePair<string, SkyData> kvp in skyframes)
+            {
+                frames[kvp.Key] = kvp.Value.ToWLOSD();
+            }
+            array[2] = frames;
+
+            if(waterTrack.Count > 0)
+            {
+                TrackEntry te = waterTrack[0];
+                if(waterframes.TryGetValue(te.frameName, out WaterData water))
+                {
+                    array[3] = water.ToWLOSD();
+                }
+            }
+            else
+                array[3] = new OSDMap();
+        }
+
+        public void FromOSD(OSDMap map)
+        {
+            OSD otmp;
+            if(map.TryGetValue("frames", out otmp) && otmp is OSDMap)
+            {
+                OSDMap mframes = otmp as OSDMap;
+                foreach(KeyValuePair<string, OSD> kvp in mframes)
+                {
+                    OSDMap v = kvp.Value as OSDMap;
+                    if(v.TryGetValue("type", out otmp))
+                    {
+                        string type = otmp;
+                        if (type.Equals("water"))
+                        {
+                            WaterData water = new WaterData();
+                            water.FromOSD(kvp.Key, v);
+                            waterframes[kvp.Key] = water;
+                        }
+                        else if (type.Equals("sky"))
+                        {
+                            SkyData sky = new SkyData();
+                            sky.FromOSD(kvp.Key, v);
+                            skyframes[kvp.Key] = sky;
+                        }
+                    }
+                }
+            }
+
+            if (map.TryGetValue("name", out otmp))
+                Name = otmp;
+            else
+                Name ="DayCycle";
+
+            OSDArray track;
+            if (map.TryGetValue("tracks", out otmp) && otmp is OSDArray)
+            {
+                OSDArray tracks = otmp as OSDArray;
+                if(tracks.Count > 0)
+                {
+                    track = tracks[0] as OSDArray;
+                    for(int i = 0; i < track.Count; ++i)
+                    {
+                        OSDMap d = track[i] as OSDMap;
+                        if (d.TryGetValue("key_keyframe", out OSD dtime))
+                        {
+                            if (d.TryGetValue("key_name", out OSD dname))
+                            {
+                                TrackEntry t = new TrackEntry();
+                                t.time = dtime;
+                                t.frameName = dname;
+                                waterTrack.Add(t);
+                            }
+                        }
+                    }
+                }
+                if (tracks.Count > 1)
+                {
+                    track = tracks[1] as OSDArray;
+                    for (int i = 0; i < track.Count; ++i)
+                    {
+                        OSDMap d = track[i] as OSDMap;
+                        if (d.TryGetValue("key_keyframe", out OSD dtime))
+                        {
+                            if (d.TryGetValue("key_name", out OSD dname))
+                            {
+                                TrackEntry t = new TrackEntry();
+                                t.time = dtime;
+                                t.frameName = dname;
+                                skyTrack0.Add(t);
+                            }
+                        }
+                    }
+                }
+                if (tracks.Count > 2)
+                {
+                    track = tracks[2] as OSDArray;
+                    for (int i = 0; i < track.Count; ++i)
+                    {
+                        OSDMap d = track[i] as OSDMap;
+                        if (d.TryGetValue("key_keyframe", out OSD dtime))
+                        {
+                            if (d.TryGetValue("key_name", out OSD dname))
+                            {
+                                TrackEntry t = new TrackEntry();
+                                t.time = dtime;
+                                t.frameName = dname;
+                                skyTrack1.Add(t);
+                            }
+                        }
+                    }
+                }
+                if (tracks.Count > 3)
+                {
+                    track = tracks[3] as OSDArray;
+                    for (int i = 0; i < track.Count; ++i)
+                    {
+                        OSDMap d = track[i] as OSDMap;
+                        if (d.TryGetValue("key_keyframe", out OSD dtime))
+                        {
+                            if (d.TryGetValue("key_name", out OSD dname))
+                            {
+                                TrackEntry t = new TrackEntry();
+                                t.time = dtime;
+                                t.frameName = dname;
+                                skyTrack2.Add(t);
+                            }
+                        }
+                    }
+                }
+                if (tracks.Count > 4)
+                {
+                    track = tracks[4] as OSDArray;
+                    for (int i = 0; i < track.Count; ++i)
+                    {
+                        OSDMap d = track[i] as OSDMap;
+                        if (d.TryGetValue("key_keyframe", out OSD dtime))
+                        {
+                            if (d.TryGetValue("key_name", out OSD dname))
+                            {
+                                TrackEntry t = new TrackEntry();
+                                t.time = dtime;
+                                t.frameName = dname;
+                                skyTrack3.Add(t);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        public OSDMap ToOSD()
+        {
+            OSDMap cycle = new OSDMap();
+
+            OSDMap frames = new OSDMap();
+            foreach (KeyValuePair<string, WaterData> kvp in waterframes)
+            {
+                frames[kvp.Key] = kvp.Value.ToOSD();
+            }
+            foreach (KeyValuePair<string, SkyData> kvp in skyframes)
+            {
+                frames[kvp.Key] = kvp.Value.ToOSD();
+            }
+            cycle["frames"] = frames;
+
+            cycle["name"] = Name;
+
+            OSDArray tracks = new OSDArray();
+
+            OSDArray track = new OSDArray();
+            OSDMap tmp;
+            foreach (TrackEntry te in waterTrack)
+            {
+                tmp = new OSDMap();
+                if (te.time < 0)
+                    tmp["key_keyframe"] = 0f;
+                else
+                    tmp["key_keyframe"] = te.time;
+                tmp["key_name"] = te.frameName;
+                track.Add(tmp);
+            }
+            tracks.Add(track);
+
+            track = new OSDArray();
+            foreach (TrackEntry te in skyTrack0)
+            {
+                tmp = new OSDMap();
+                if (te.time < 0)
+                    tmp["key_keyframe"] = 0f;
+                else
+                    tmp["key_keyframe"] = te.time;
+                tmp["key_name"] = te.frameName;
+                track.Add(tmp);
+            }
+            tracks.Add(track);
+
+            track = new OSDArray();
+            foreach (TrackEntry te in skyTrack1)
+            {
+                tmp = new OSDMap();
+                if (te.time < 0)
+                    tmp["key_keyframe"] = 0f;
+                else
+                    tmp["key_keyframe"] = te.time;
+                tmp["key_name"] = te.frameName;
+                track.Add(tmp);
+            }
+            tracks.Add(track);
+
+            track = new OSDArray();
+            foreach (TrackEntry te in skyTrack2)
+            {
+                tmp = new OSDMap();
+                if (te.time < 0)
+                    tmp["key_keyframe"] = 0f;
+                else
+                    tmp["key_keyframe"] = te.time;
+                tmp["key_name"] = te.frameName;
+                track.Add(tmp);
+            }
+            tracks.Add(track);
+
+            track = new OSDArray();
+            foreach (TrackEntry te in skyTrack3)
+            {
+                tmp = new OSDMap();
+                if (te.time < 0)
+                    tmp["key_keyframe"] = 0f;
+                else
+                    tmp["key_keyframe"] = te.time;
+                tmp["key_name"] = te.frameName;
+                track.Add(tmp);
+            }
+            tracks.Add(track);
+
+            cycle["tracks"] = tracks;
+            cycle["type"] = "daycycle";
+
+            return cycle;
+        }
+    }
+
+    public class ViewerEnviroment
+    {
+        DayCycle Cycle = new DayCycle();
+        public int DayLength = 14400;
+        public int DayOffset = 57600;
+        public int Flags = 0;
+ 
+        float[] Altitudes = new float[3] {1000f, 2000f, 3000f };
+
+        //DayHash;
+        public bool IsLegacy = false;
+        public string DayCycleName;
+
+        public int version = 0;
+
+        public void FromWLOSD(OSD osd)
+        {
+            OSDArray array = osd as OSDArray;
+            if(osd != null)
+            {
+                Cycle = new DayCycle();
+                Cycle.FromWLOSD(array);
+                IsLegacy = true;
+                Altitudes[0] = 3980f;
+                Altitudes[1] = 3990f;
+                Altitudes[2] = 4000f;
+            }
+        }
+
+        public OSD ToWLOSD(UUID message, UUID region)
+        {
+            OSDArray array = new OSDArray(4) { null, null, null, null };
+            array[0] = new OSDMap { {"messageID", message }, { "regionID", region } };
+            Cycle.ToWLOSD(ref array);
+            return array;
+        }
+
+        private static Quaternion AzAlToRot(float az, float al)
+        {
+            if (al == 0)
+            {
+                az *= 0.5f;
+                return new Quaternion(0, 0, (float)Math.Sin(az), (float)Math.Cos(az));
+            }
+
+            float sT = (float)Math.Sin(az);
+            float cT = (float)Math.Cos(az);
+            float sP = (float)Math.Sin(al);
+            float cP = (float)Math.Cos(al);
+
+            float angle = (float)Math.Acos(cT * cP);
+            Vector3 axis = new Vector3( 0, -sP, sT * cP);
+            axis.Normalize();
+
+            return Quaternion.CreateFromAxisAngle(axis, angle);
+        }
+
+        public static void convertFromAngles(SkyData sky, float sun_angle, float east_angle)
+        {
+            float az = -east_angle;
+            float al = sun_angle;
+
+            sky.sun_rotation = AzAlToRot(az, al);
+            sky.moon_rotation = AzAlToRot(az + (float)Math.PI, -al);
+        }
+
+        public static Vector3 Xrot(Quaternion rot)
+        {
+            Vector3 vec;
+            rot.Normalize(); // just in case
+            vec.X = 2 * (rot.X * rot.X + rot.W * rot.W) - 1;
+            vec.Y = 2 * (rot.X * rot.Y + rot.Z * rot.W);
+            vec.Z = 2 * (rot.X * rot.Z - rot.Y * rot.W);
+            return vec;
+        }
+
+        public static void convertToAngles(SkyData sky, out float sun_angle, out float east_angle, out Vector4 lightnorm)
+        {
+            Vector3 v = Xrot(sky.sun_rotation);
+            lightnorm = new Vector4(v.X, v.Y, v.Z,1);
+            sun_angle = (float)Math.Asin(v.Z);
+            east_angle = -(float)Math.Atan2(v.Y, v.X);
+
+            if (Math.Abs(sun_angle) < 1e-6)
+                sun_angle = 0;
+            if (Math.Abs(east_angle) < 1e-6)
+                east_angle = 0;
+            else if (east_angle < 0)
+                east_angle = 2f * (float)Math.PI + east_angle;
+        }
+
+        public void FromLightShare(RegionLightShareData ls)
+        {
+            WaterData water = new WaterData();
+
+            water.waterFogColor = ls.waterColor / 256f;
+            water.waterFogDensity = (float)Math.Pow(2.0f, ls.waterFogDensityExponent);
+            //water.waterFogDensity = ls.waterFogDensityExponent;
+            water.underWaterFogMod = ls.underwaterFogModifier;
+            water.normScale = ls.reflectionWaveletScale;
+            water.fresnelScale = ls.fresnelScale;
+            water.fresnelOffset = ls.fresnelOffset;
+            water.scaleAbove = ls.refractScaleAbove;
+            water.scaleBelow = ls.refractScaleBelow;
+            water.blurMultiplier = ls.blurMultiplier;
+            water.wave1Dir = ls.littleWaveDirection;
+            water.wave2Dir = ls.bigWaveDirection;
+            water.normalMap = ls.normalMapTexture;
+            water.Name = "LightshareWater";
+
+            SkyData sky = new SkyData();
+            convertFromAngles(sky, 2.0f * (float)Math.PI * ls.sunMoonPosition, 2.0f * (float)Math.PI * ls.eastAngle);
+            sky.sunlight_color = ls.sunMoonColor * 3.0f;
+            sky.ambient = new Vector3(ls.ambient.X * 3.0f, ls.ambient.Y * 3.0f, ls.ambient.Z * 3.0f);
+            sky.blue_horizon = new Vector3(ls.horizon.X * 2.0f, ls.horizon.Y * 2.0f, ls.horizon.Z * 2.0f);
+            sky.blue_density = new Vector3(ls.blueDensity.X * 2.0f, ls.blueDensity.Y * 2.0f, ls.blueDensity.Z * 2.0f);;
+            sky.haze_horizon = ls.hazeHorizon;
+            sky.haze_density = ls.hazeDensity;
+            sky.cloud_shadow = ls.cloudCoverage;
+            sky.density_multiplier = ls.densityMultiplier / 1000.0f;
+            sky.distance_multiplier = ls.distanceMultiplier;
+            sky.max_y = ls.maxAltitude;
+            sky.cloud_color = new Vector3(ls.cloudColor.X, ls.cloudColor.Y, ls.cloudColor.Z);
+            sky.cloud_pos_density1 = ls.cloudXYDensity;
+            sky.cloud_pos_density2 = ls.cloudDetailXYDensity;
+            sky.cloud_scale = ls.cloudScale;
+            sky.gamma=ls.sceneGamma;
+            sky.glow = new Vector3((2f - ls.sunGlowSize) * 20f, 0f, -ls.sunGlowFocus * 5f);
+            sky.cloud_scroll_rate = new Vector2(ls.cloudScrollX, ls.cloudScrollY);
+            if (ls.cloudScrollXLock)
+                sky.cloud_scroll_rate.X = 0;
+            if (ls.cloudScrollYLock)
+                sky.cloud_scroll_rate.Y = 0;
+            sky.star_brightness = ls.starBrightness * 250f;
+            sky.Name = "LightshareSky";
+
+            Cycle = new DayCycle();
+            Cycle.Name = "Lightshare";
+            Cycle.waterframes.Add(water.Name, water);
+            DayCycle.TrackEntry track = new DayCycle.TrackEntry(-1, water.Name);
+            Cycle.waterTrack.Add(track);
+
+            Cycle.skyframes.Add(sky.Name, sky);
+            track = new DayCycle.TrackEntry(-1, sky.Name);
+            Cycle.skyTrack0.Add(track);
+
+            Altitudes[0] = 3980f;
+            Altitudes[1] = 3990f;
+            Altitudes[2] = 4000f;
+        }
+
+        public RegionLightShareData ToLightShare()
+        {
+            RegionLightShareData ls = new RegionLightShareData();
+
+            DayCycle.TrackEntry te;
+            if (Cycle.waterTrack.Count > 0)
+            {
+                te = Cycle.waterTrack[0];
+                if (Cycle.waterframes.TryGetValue(te.frameName, out WaterData water))
+                {
+                    ls.waterColor = water.waterFogColor * 256f;
+                    ls.waterFogDensityExponent = (float)Math.Sqrt(water.waterFogDensity);
+                    //ls.waterFogDensityExponent = water.waterFogDensity;
+                    ls.underwaterFogModifier = water.underWaterFogMod;
+                    ls.reflectionWaveletScale = water.normScale;
+                    ls.fresnelScale = water.fresnelScale;
+                    ls.fresnelOffset = water.fresnelOffset;
+                    ls.refractScaleAbove = water.scaleAbove;
+                    ls.refractScaleBelow = water.scaleBelow;
+                    ls.blurMultiplier = water.blurMultiplier;
+                    ls.littleWaveDirection = water.wave1Dir;
+                    ls.bigWaveDirection = water.wave2Dir;
+                    ls.normalMapTexture = water.normalMap;
+                }
+            }
+
+            if (Cycle.skyTrack0.Count > 0)
+            {
+                te = Cycle.skyTrack0[0];
+                if (Cycle.skyframes.TryGetValue(te.frameName, out SkyData sky))
+                {
+                    Vector4 lightnorm;
+                    convertToAngles(sky, out ls.sunMoonPosition, out ls.eastAngle, out lightnorm);
+                    ls.sunMoonPosition *= 0.5f / (float)Math.PI;
+                    ls.eastAngle *= 0.5f / (float)Math.PI;
+                    ls.sunMoonColor = sky.sunlight_color / 3f;
+                    ls.ambient = new Vector4(sky.ambient.X / 3.0f, sky.ambient.Y / 3.0f, sky.ambient.Z / 3.0f, 1);
+                    ls.horizon = new Vector4(sky.blue_horizon.X / 2.0f, sky.blue_horizon.Y / 2.0f, sky.blue_horizon.Z / 2.0f, 1);
+                    ls.blueDensity = new Vector4(sky.blue_density.X / 2.0f, sky.blue_density.Y / 2.0f, sky.blue_density.Z / 2.0f, 1);
+                    ls.hazeHorizon = sky.haze_horizon;
+                    ls.hazeDensity = sky.haze_density;
+                    ls.cloudCoverage = sky.cloud_shadow;
+                    ls.densityMultiplier = 1000f * sky.density_multiplier;
+                    ls.distanceMultiplier = sky.distance_multiplier;
+                    ls.maxAltitude = (ushort)sky.max_y;
+                    ls.cloudColor = new Vector4(sky.cloud_color.X, sky.cloud_color.Y, sky.cloud_color.Z, 1);
+                    ls.cloudXYDensity = sky.cloud_pos_density1;
+                    ls.cloudDetailXYDensity = sky.cloud_pos_density2;
+                    ls.cloudScale = sky.cloud_scale;
+                    ls.sceneGamma = sky.gamma;
+                    ls.sunGlowSize = (2f - sky.glow.X) / 20f;
+                    ls.sunGlowFocus = -sky.glow.Z / 5f;
+                    ls.cloudScrollX = sky.cloud_scroll_rate.X;
+                    ls.cloudScrollY = sky.cloud_scroll_rate.Y;
+                    ls.cloudScrollXLock = ls.cloudScrollX == 0f;
+                    ls.cloudScrollYLock = ls.cloudScrollY == 0f;
+                    ls.starBrightness = sky.star_brightness / 250f;
+                }
+            }
+            return ls;
+        }
+
+        public void FromOSD(OSD osd)
+        {
+            OSDMap map = osd as OSDMap;
+            if (map == null)
+                return;
+
+            OSD otmp;
+
+            if (map.TryGetValue("day_cycle", out otmp) && otmp is OSDMap)
+            {
+                Cycle = new DayCycle();
+                Cycle.FromOSD(otmp as OSDMap);
+            }
+            if (Cycle == null)
+                Cycle = new DayCycle();
+
+            if (map.TryGetValue("day_length", out otmp))
+                DayLength = otmp;
+            if (map.TryGetValue("day_offset", out otmp))
+                DayOffset = otmp;
+            if (map.TryGetValue("flags", out otmp))
+                Flags = otmp;
+            if (map.TryGetValue("env_version", out otmp))
+                version = otmp;
+            else
+                ++version;
+
+            if (map.TryGetValue("track_altitudes", out otmp) && otmp is OSDArray)
+            {
+                OSDArray alt = otmp as OSDArray;
+
+                for(int i = 0; i < alt.Count && i < 3; ++i)
+                {
+                    Altitudes[i] = alt[i];
+                }
+            }
+
+            IsLegacy = false;
+        }
+
+        public void CycleFromOSD(OSD osd)
+        {
+            OSDMap map = osd as OSDMap;
+            if (map == null)
+                return;
+            if(!map.TryGetValue("type", out OSD tmp))
+                return;
+            string type = tmp.AsString();
+            if(type != "daycycle")
+                return;
+            Cycle = new DayCycle();
+            Cycle.FromOSD(map);
+        }
+
+        public OSD ToOSD()
+        {
+            OSDMap env = new OSDMap();
+            env["day_cycle"] = Cycle.ToOSD();
+            env["day_length"] = DayLength;
+            env["day_offset"] = DayOffset;
+            env["flags"] = Flags;
+            env["env_version"] = version;
+
+            OSDArray alt = new OSDArray();
+            alt.Add(Altitudes[0]);
+            alt.Add(Altitudes[1]);
+            alt.Add(Altitudes[2]);
+            env["track_altitudes"] = alt;
+            return env;
+        }
+
+        public static OSD DefaultToOSD(UUID regionID, int parcel)
+        {
+            OSDMap top = new OSDMap();
+            OSDMap env = new OSDMap();
+            env["is_default"] = true;
+            if (parcel >= 0)
+                env["parcel_id"] = parcel;
+            env["region_id"] = regionID;
+            OSDArray alt = new OSDArray();
+            alt.Add(1000f);
+            alt.Add(2000f);
+            alt.Add(3000f);
+            env["track_altitudes"] = alt;
+            top["environment"] = env;
+            if (parcel >= 0)
+                top["parcel_id"] = parcel;
+            top["success"] = true;
+            return top;
+        }
+    }
+}

+ 545 - 48
OpenSim/Region/CoreModules/World/LightShare/EnvironmentModule.cs

@@ -26,20 +26,25 @@
  */
 
 using System;
+using System.Collections.Generic;
+using System.Net;
 using System.Reflection;
 using System.Text;
 using OpenMetaverse;
+using OpenMetaverse.StructuredData;
 using OpenSim.Framework;
 using OpenSim.Framework.Capabilities;
 using OpenSim.Framework.Servers.HttpServer;
 using OpenSim.Region.Framework.Interfaces;
 using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
 using log4net;
 using Nini.Config;
 using Mono.Addins;
 
 using Caps = OpenSim.Framework.Capabilities.Caps;
-
+using OSDArray = OpenMetaverse.StructuredData.OSDArray;
+using OSDMap = OpenMetaverse.StructuredData.OSDMap;
 
 namespace OpenSim.Region.CoreModules.World.LightShare
 {
@@ -52,6 +57,14 @@ namespace OpenSim.Region.CoreModules.World.LightShare
         private Scene m_scene = null;
         private UUID regionID = UUID.Zero;
         private bool Enabled = false;
+        private IEstateModule m_estateModule;
+        private IEventQueue m_eventQueue;
+        private IAssetService m_assetService;
+
+        private static ViewerEnviroment m_DefaultEnv = null;
+        private static readonly string m_defaultDayAssetID = "5646d39e-d3d7-6aff-ed71-30fc87d64a91";
+
+        private int m_regionEnvVersion = -1;
 
         #region INonSharedRegionModule
         public void Initialise(IConfigSource source)
@@ -69,6 +82,7 @@ namespace OpenSim.Region.CoreModules.World.LightShare
 
             Enabled = true;
 
+
             m_log.InfoFormat("[{0}]: Module is enabled.", Name);
         }
 
@@ -101,12 +115,80 @@ namespace OpenSim.Region.CoreModules.World.LightShare
             if (!Enabled)
                 return;
 
+            m_estateModule = scene.RequestModuleInterface<IEstateModule>();
+            if (m_estateModule == null)
+            {
+                Enabled = false;
+                return;
+            }
+
+            m_eventQueue = m_scene.RequestModuleInterface<IEventQueue>();
+            if (m_eventQueue == null)
+            {
+                Enabled = false;
+                return;
+            }
+
+            m_assetService = m_scene.AssetService;
+            if (m_assetService == null)
+            {
+                Enabled = false;
+                return;
+            }
+
+            if(m_DefaultEnv == null)
+            {
+                AssetBase defEnv = m_assetService.Get(m_defaultDayAssetID);
+                if(defEnv != null)
+                {
+                    byte[] envData = defEnv.Data;
+                    try
+                    {
+                        OSD oenv = OSDParser.DeserializeLLSDXml(envData);
+                        m_DefaultEnv = new ViewerEnviroment();
+                        m_DefaultEnv.CycleFromOSD(oenv);
+                    }
+                    catch ( Exception e)
+                    {
+                        m_DefaultEnv = null;
+                        m_log.WarnFormat("[Enviroment {0}]: failed to decode default enviroment asset: {1}", m_scene.Name, e.Message);
+                    }
+                }
+            }
+
+            string senv = scene.SimulationDataService.LoadRegionEnvironmentSettings(scene.RegionInfo.RegionID);
+            if(!string.IsNullOrEmpty(senv))
+            {
+                try
+                {
+                    OSD oenv = OSDParser.DeserializeLLSDXml(senv);
+                    ViewerEnviroment VEnv = new ViewerEnviroment();
+                    if(oenv is OSDArray)
+                        VEnv.FromWLOSD(oenv);
+                    else
+                        VEnv.FromOSD(oenv);
+                    scene.RegionEnviroment = VEnv;
+                    m_regionEnvVersion = VEnv.version;
+                }
+                catch(Exception e)
+                {
+                    m_log.ErrorFormat("[Enviroment {0}] failed to load initial enviroment {1}", m_scene.Name, e.Message);
+                    scene.RegionEnviroment = null;
+                    m_regionEnvVersion = -1;
+                }
+            }
+            else
+            {
+                scene.RegionEnviroment = null;
+                m_regionEnvVersion = -1;
+            }
+
             scene.EventManager.OnRegisterCaps += OnRegisterCaps;
         }
 
         public void RemoveRegion(Scene scene)
         {
-            if (Enabled)
+            if (!Enabled)
                 return;
 
             scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
@@ -120,57 +202,339 @@ namespace OpenSim.Region.CoreModules.World.LightShare
             if (!Enabled)
                 return;
 
-            m_scene.SimulationDataService.RemoveRegionEnvironmentSettings(regionUUID);
+            StoreOnRegion(null);
+            WindlightRefresh(0);
+        }
+
+        public void WindlightRefresh(int interpolate)
+        {
+            List<byte[]> ls = null;
+            m_scene.ForEachClient(delegate (IClientAPI client)
+            {
+                if(!client.IsActive)
+                    return;
+
+                uint vflags = client.GetViewerCaps();
+
+                if ((vflags & 0x8000) != 0)
+                    m_estateModule.HandleRegionInfoRequest(client);
+
+                else if ((vflags & 0x4000) != 0)
+                    m_eventQueue.WindlightRefreshEvent(interpolate, client.AgentId);
+
+                else
+                {
+                    if(ls == null)
+                        ls = MakeLightShareData();
+                    SendLightShare(client, ls);
+                }
+            });
+        }
+
+        public void FromLightShare(RegionLightShareData ls)
+        {
+            if (!Enabled)
+                return;
+
+            ViewerEnviroment VEnv = new ViewerEnviroment();
+            VEnv.FromLightShare(ls);
+
+            StoreOnRegion(VEnv);
+            WindlightRefresh(0);
+        }
+
+        public RegionLightShareData ToLightShare()
+        {
+            if (!Enabled)
+                return new RegionLightShareData();
+
+            RegionLightShareData ls = null;
+            try
+            {
+                ViewerEnviroment VEnv = m_scene.RegionEnviroment;
+                if(VEnv == null)
+                    return new RegionLightShareData();
+                ls = VEnv.ToLightShare();
+            }
+            catch (Exception e)
+            {
+                m_log.ErrorFormat("[{0}]: Unable to convert environment to lightShare, Exception: {1} - {2}",
+                    Name, e.Message, e.StackTrace);
+            }
+            if(ls == null)
+                return new RegionLightShareData();
+            return ls;
         }
         #endregion
 
         #region Events
         private void OnRegisterCaps(UUID agentID, Caps caps)
         {
-            //            m_log.DebugFormat("[{0}]: Register capability for agentID {1} in region {2}",
-            //                Name, agentID, caps.RegionName);
-
-            string capsPath = "/CAPS/" + UUID.Random();
-
-            // Get handler
-            caps.RegisterHandler(
-                "EnvironmentSettings",
-                new RestStreamHandler(
-                    "GET",
-                    capsPath,
-                    (request, path, param, httpRequest, httpResponse)
-                     => GetEnvironmentSettings(request, path, param, agentID, caps),
-                     "EnvironmentSettings",
-                     agentID.ToString()));
-
-            // Set handler
-            caps.HttpListener.AddStreamHandler(
-                new RestStreamHandler(
-                "POST",
-                capsPath,
-                (request, path, param, httpRequest, httpResponse)
-                 => SetEnvironmentSettings(request, path, param, agentID, caps),
-                 "EnvironmentSettings",
-                 agentID.ToString()));
+            // m_log.DebugFormat("[{0}]: Register capability for agentID {1} in region {2}",
+            //       Name, agentID, caps.RegionName);
+
+            caps.RegisterSimpleHandler("EnvironmentSettings",
+                new SimpleStreamHandler("/" + UUID.Random(), delegate (IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+                {
+                    processEnv(httpRequest, httpResponse, agentID);
+                }));
+
+            //Extended
+            caps.RegisterSimpleHandler("ExtEnvironment",
+                new SimpleStreamHandler("/" + UUID.Random(), delegate (IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+                {
+                    processExtEnv(httpRequest, httpResponse, agentID, caps);
+                }));
         }
         #endregion
 
-        private string GetEnvironmentSettings(string request, string path, string param,
-              UUID agentID, Caps caps)
+        private void processEnv(IOSHttpRequest request, IOSHttpResponse response, UUID agentID)
+        {
+            switch (request.HttpMethod)
+            {
+                case "POST":
+                    SetEnvironmentSettings(request, response, agentID);
+                    return;
+                case "GET":
+                    GetEnvironmentSettings(response, agentID);
+                    return;
+                default:
+                {
+                    response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
+                    return;
+                }
+            }
+        }
+
+
+        private void processExtEnv(IOSHttpRequest request, IOSHttpResponse response, UUID agentID, Caps caps)
         {
-            //            m_log.DebugFormat("[{0}]: Environment GET handle for agentID {1} in region {2}",
-            //                Name, agentID, caps.RegionName);
+            switch(request.HttpMethod)
+            {
+                case "PUT":
+                case "POST":
+                    SetExtEnvironmentSettings(request, response, agentID, caps);
+                    return;
+                case "GET":
+                    GetExtEnvironmentSettings(request, response, agentID);
+                    return;
+                case "DELETE":
+                    DeleteExtEnvironmentSettings(request, response, agentID);
+                    return;
+                default:
+                {
+                    response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
+                    return;
+                }
+            }
+        }
 
-            string env = String.Empty;
+        private void DeleteExtEnvironmentSettings(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, UUID agentID)
+        {
+            int parcel = -1;
 
-            try
+            if (httpRequest.Query.Count > 0)
             {
-                env = m_scene.SimulationDataService.LoadRegionEnvironmentSettings(regionID);
+                if (httpRequest.Query.ContainsKey("parcelid"))
+                {
+                    Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel);
+                }
             }
-            catch (Exception e)
+
+            if(parcel == -1)
+                StoreOnRegion(null);
+
+            WindlightRefresh(0);
+
+            StringBuilder sb = LLSDxmlEncode.Start();
+            LLSDxmlEncode.AddMap(sb);
+            LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb);
+            LLSDxmlEncode.AddElem("regionID", regionID, sb);
+            LLSDxmlEncode.AddElem("success", true, sb);
+            LLSDxmlEncode.AddEndMap(sb);
+            httpResponse.RawBuffer = Util.UTF8.GetBytes(LLSDxmlEncode.End(sb));
+            httpResponse.StatusCode = (int)HttpStatusCode.OK;
+        }
+
+        private void GetExtEnvironmentSettings(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, UUID agentID)
+        {
+            if (httpRequest.Query.Count > 0)
+            {
+                int parcel = -1;
+                if (httpRequest.Query.ContainsKey("parcelid"))
+                {
+                    Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel);
+                }
+                OSD oenv = ViewerEnviroment.DefaultToOSD(regionID, parcel);
+                httpResponse.RawBuffer = Util.UTF8.GetBytes(OSDParser.SerializeLLSDXmlString(oenv));
+                httpResponse.StatusCode = (int)HttpStatusCode.OK;
+            }
+
+            ViewerEnviroment VEnv = m_scene.RegionEnviroment;
+            if (VEnv == null)
+                VEnv = m_DefaultEnv == null ? new ViewerEnviroment() : m_DefaultEnv;
+
+            OSDMap map = new OpenMetaverse.StructuredData.OSDMap();
+            map["environment"] = VEnv.ToOSD();
+            string env = OSDParser.SerializeLLSDXmlString(map);
+
+            // only the presence of enviroment seems to matter
+            if (String.IsNullOrEmpty(env))
+            {
+                StringBuilder sb = LLSDxmlEncode.Start();
+                LLSDxmlEncode.AddArray(sb);
+                LLSDxmlEncode.AddMap(sb);
+                LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb);
+                LLSDxmlEncode.AddElem("regionID", regionID, sb);
+                LLSDxmlEncode.AddEndMap(sb);
+                LLSDxmlEncode.AddEndArray(sb);
+                env = LLSDxmlEncode.End(sb);
+            }
+
+            httpResponse.RawBuffer = Util.UTF8NBGetbytes(env);
+            httpResponse.StatusCode = (int)HttpStatusCode.OK;
+        }
+
+        private void SetExtEnvironmentSettings(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, UUID agentID, Caps caps)
+        {
+            bool success = false;
+            string message = "Could not process request";
+            int parcel = -1;
+            int track = -1;
+
+            StringBuilder sb = LLSDxmlEncode.Start();
+
+            if (httpRequest.Query.Count > 0)
+            {
+                if (httpRequest.Query.ContainsKey("parcelid"))
+                {
+                    Int32.TryParse((string)httpRequest.Query["parcelid"], out parcel);
+                }
+                if (httpRequest.Query.ContainsKey("trackno"))
+                {
+                    Int32.TryParse((string)httpRequest.Query["trackno"], out track);
+                }
+
+                message = "Parcel Enviroment not supported";
+                goto skiped;
+            }
+
+            if(parcel == -1)
+            {
+                if (!m_scene.Permissions.CanIssueEstateCommand(agentID, false))
+                {
+                    message = "Insufficient estate permissions, settings has not been saved.";
+                    goto skiped;
+                }
+            }
+
+            if(track == -1)
+            {
+                try
+                {
+                    OSD req = OSDParser.DeserializeLLSDXml(httpRequest.InputStream);
+                    if(req is OpenMetaverse.StructuredData.OSDMap)
+                    {
+                        OpenMetaverse.StructuredData.OSDMap map = req as OpenMetaverse.StructuredData.OSDMap;
+                        if(map.TryGetValue("environment", out OSD env))
+                        {
+                            ViewerEnviroment VEnv = m_scene.RegionEnviroment;
+                            if (VEnv == null)
+                                VEnv = new ViewerEnviroment();
+                            OSDMap evmap = (OSDMap)env;
+                            if(evmap.TryGetValue("day_asset", out OSD tmp) && !evmap.ContainsKey("day_cycle"))
+                            {
+                                string id = tmp.AsString();
+                                AssetBase asset = m_assetService.Get(id);
+                                if(asset == null || asset.Data == null || asset.Data.Length == 0)
+                                {
+                                    httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
+                                    return;
+                                }
+                                try
+                                {
+                                    OSD oenv = OSDParser.DeserializeLLSDXml(asset.Data);
+                                    VEnv.CycleFromOSD(oenv);
+                                }
+                                catch (Exception e)
+                                {
+                                    httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
+                                    return;
+                                }
+                            }
+                            VEnv.FromOSD(env);
+                            StoreOnRegion(VEnv);
+
+                            WindlightRefresh(0);
+
+                            success = true;
+                            m_log.InfoFormat("[{0}]: ExtEnviromet settings saved from agentID {1} in region {2}",
+                                Name, agentID, caps.RegionName);
+                        }
+                    }
+                    else if (req is OSDArray)
+                    {
+                        ViewerEnviroment VEnv = m_scene.RegionEnviroment;
+                        if (VEnv == null)
+                            VEnv = new ViewerEnviroment();
+
+                        VEnv.FromWLOSD(req);
+                        StoreOnRegion(VEnv);
+                        success = true;
+
+                        WindlightRefresh(0);
+
+                        m_log.InfoFormat("[{0}]: New Environment settings has been saved from agentID {1} in region {2}",
+                            Name, agentID, caps.RegionName);
+
+                        LLSDxmlEncode.AddMap(sb);
+                        LLSDxmlEncode.AddElem("messageID", UUID.Zero, sb);
+                        LLSDxmlEncode.AddElem("regionID", regionID, sb);
+                        LLSDxmlEncode.AddElem("success", success, sb);
+                        LLSDxmlEncode.AddEndMap(sb);
+                        httpResponse.RawBuffer = Util.UTF8.GetBytes(LLSDxmlEncode.End(sb));
+                        httpResponse.StatusCode = (int)HttpStatusCode.OK;
+                        return;
+                    }
+                }
+                catch (Exception e)
+                {
+                    m_log.ErrorFormat("[{0}]: ExtEnvironment settings not saved for region {1}, Exception: {2} - {3}",
+                        Name, caps.RegionName, e.Message, e.StackTrace);
+
+                    success = false;
+                    message = String.Format("ExtEnvironment Set for region {0} has failed, settings not saved.", caps.RegionName);
+                }
+            }
+
+        skiped:
+            string response;
+
+            LLSDxmlEncode.AddMap(sb);
+                LLSDxmlEncode.AddElem("success", success, sb);
+                if(!success)
+                    LLSDxmlEncode.AddElem("message", message, sb);
+            LLSDxmlEncode.AddEndMap(sb);
+            response = LLSDxmlEncode.End(sb);
+
+            httpResponse.RawBuffer = Util.UTF8.GetBytes(response);
+            httpResponse.StatusCode = (int)HttpStatusCode.OK;
+        }
+
+        private void GetEnvironmentSettings(IOSHttpResponse response, UUID agentID)
+        {
+            // m_log.DebugFormat("[{0}]: Environment GET handle for agentID {1} in region {2}",
+            //      Name, agentID, caps.RegionName);
+
+            string env = String.Empty;
+            ViewerEnviroment VEnv = m_scene.RegionEnviroment;
+            if (VEnv == null)
+                VEnv = m_DefaultEnv;
+
+            if (VEnv != null)
             {
-                m_log.ErrorFormat("[{0}]: Unable to load environment settings for region {1}, Exception: {2} - {3}",
-                    Name, caps.RegionName, e.Message, e.StackTrace);
+                OSD d = VEnv.ToWLOSD(UUID.Zero, regionID);
+                env = OSDParser.SerializeLLSDXmlString(d);
             }
 
             if (String.IsNullOrEmpty(env))
@@ -185,15 +549,39 @@ namespace OpenSim.Region.CoreModules.World.LightShare
                 env = LLSDxmlEncode.End(sb);
             }
 
-            return env;
+            response.RawBuffer = Util.UTF8.GetBytes(env);
+            response.StatusCode = (int)HttpStatusCode.OK;
         }
 
-        private string SetEnvironmentSettings(string request, string path, string param,
-                              UUID agentID, Caps caps)
+        private void StoreOnRegion(ViewerEnviroment VEnv)
         {
+            try
+            {
+                if (VEnv == null)
+                {
+                    m_scene.SimulationDataService.RemoveRegionEnvironmentSettings(regionID);
+                    m_scene.RegionEnviroment = null;
+                    m_regionEnvVersion = -1;
+                }
+                else
+                {
+                    m_regionEnvVersion++;
+                    VEnv.version = m_regionEnvVersion;
+                    OSD env = VEnv.ToOSD();
+                    m_scene.SimulationDataService.StoreRegionEnvironmentSettings(regionID, OSDParser.SerializeLLSDXmlString(env));
+                    m_scene.RegionEnviroment = VEnv;
+                }
+            }
+            catch (Exception e)
+            {
+                m_log.ErrorFormat("[Enviroment {0}] failed to store enviroment {1}", m_scene.Name, e.Message);
+            }
+        }
 
-            //            m_log.DebugFormat("[{0}]: Environment SET handle from agentID {1} in region {2}",
-            //                Name, agentID, caps.RegionName);
+        private void SetEnvironmentSettings(IOSHttpRequest request, IOSHttpResponse response, UUID agentID)
+        {
+            // m_log.DebugFormat("[{0}]: Environment SET handle from agentID {1} in region {2}",
+            //       Name, agentID, caps.RegionName);
 
             bool success = false;
             string fail_reason = "";
@@ -206,19 +594,24 @@ namespace OpenSim.Region.CoreModules.World.LightShare
             {
                 try
                 {
-                    m_scene.SimulationDataService.StoreRegionEnvironmentSettings(regionID, request);
+                    ViewerEnviroment VEnv = new ViewerEnviroment();
+                    OSD env = OSDParser.DeserializeLLSDXml(request.InputStream);
+                    VEnv.FromWLOSD(env);
+                    StoreOnRegion(VEnv);
                     success = true;
 
+                    WindlightRefresh(0);
+
                     m_log.InfoFormat("[{0}]: New Environment settings has been saved from agentID {1} in region {2}",
-                        Name, agentID, caps.RegionName);
+                        Name, agentID, m_scene.Name);
                 }
                 catch (Exception e)
                 {
                     m_log.ErrorFormat("[{0}]: Environment settings has not been saved for region {1}, Exception: {2} - {3}",
-                        Name, caps.RegionName, e.Message, e.StackTrace);
+                        Name, m_scene.Name, e.Message, e.StackTrace);
 
                     success = false;
-                    fail_reason = String.Format("Environment Set for region {0} has failed, settings not saved.", caps.RegionName);
+                    fail_reason = String.Format("Environment Set for region {0} has failed, settings not saved.", m_scene.Name);
                 }
             }
 
@@ -230,7 +623,111 @@ namespace OpenSim.Region.CoreModules.World.LightShare
                     if(!success)
                         LLSDxmlEncode.AddElem("fail_reason", fail_reason, sb);
                 LLSDxmlEncode.AddEndMap(sb);
-            return LLSDxmlEncode.End(sb);
+            response.RawBuffer = Util.UTF8.GetBytes(LLSDxmlEncode.End(sb));
+            response.StatusCode = (int)HttpStatusCode.OK;
+        }
+
+        public byte[] GetDefaultAssetData(int type)
+        {
+            OSD osddata;
+            switch(type)
+            {
+                case 0:
+                    SkyData sky = new SkyData();
+                    sky.Name = "DefaultSky";
+                    osddata = sky.ToOSD();
+                    break;
+                case 1:
+                    WaterData water = new WaterData();
+                    water.Name = "DefaultWater";
+                    osddata = water.ToOSD();
+                    break;
+                case 2:
+                    DayCycle day = new DayCycle();
+                    day.Name="New Daycycle";
+                    DayCycle.TrackEntry te = new DayCycle.TrackEntry();
+
+                    WaterData dwater = new WaterData();
+                    dwater.Name = "DefaultWater";
+                    day.waterframes["DefaultWater"] = dwater;
+                    te.time = 0;
+                    te.frameName = "DefaultWater";
+                    day.waterTrack.Add(te);
+
+                    SkyData dsky = new SkyData();
+                    dsky.Name = "DefaultSky";
+                    day.skyframes["DefaultSky"] = dsky;
+                    te.time = 0;
+                    te.frameName = "DefaultSky";
+                    day.skyTrack0.Add(te);
+
+                    osddata = day.ToOSD();
+                    break;
+                default:
+                    return null;
+            }
+            string sdata = OSDParser.SerializeLLSDXmlString(osddata);
+            return Util.UTF8NBGetbytes(sdata);
+        }
+
+        public List<byte[]> MakeLightShareData()
+        {
+            if(m_scene.RegionEnviroment == null)
+                return null;
+
+            RegionLightShareData wl = ToLightShare();
+            byte[] mBlock = new Byte[249];
+            int pos = 0;
+
+            wl.waterColor.ToBytes(mBlock, 0); pos += 12;
+            Utils.FloatToBytes(wl.waterFogDensityExponent).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.underwaterFogModifier).CopyTo(mBlock, pos); pos += 4;
+            wl.reflectionWaveletScale.ToBytes(mBlock, pos); pos += 12;
+            Utils.FloatToBytes(wl.fresnelScale).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.fresnelOffset).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.refractScaleAbove).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.refractScaleBelow).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.blurMultiplier).CopyTo(mBlock, pos); pos += 4;
+            wl.bigWaveDirection.ToBytes(mBlock, pos); pos += 8;
+            wl.littleWaveDirection.ToBytes(mBlock, pos); pos += 8;
+            wl.normalMapTexture.ToBytes(mBlock, pos); pos += 16;
+            wl.horizon.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.hazeHorizon).CopyTo(mBlock, pos); pos += 4;
+            wl.blueDensity.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.hazeDensity).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.densityMultiplier).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.distanceMultiplier).CopyTo(mBlock, pos); pos += 4;
+            wl.sunMoonColor.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.sunMoonPosition).CopyTo(mBlock, pos); pos += 4;
+            wl.ambient.ToBytes(mBlock, pos); pos += 16;
+            Utils.FloatToBytes(wl.eastAngle).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.sunGlowFocus).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.sunGlowSize).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.sceneGamma).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.starBrightness).CopyTo(mBlock, pos); pos += 4;
+            wl.cloudColor.ToBytes(mBlock, pos); pos += 16;
+            wl.cloudXYDensity.ToBytes(mBlock, pos); pos += 12;
+            Utils.FloatToBytes(wl.cloudCoverage).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.cloudScale).CopyTo(mBlock, pos); pos += 4;
+            wl.cloudDetailXYDensity.ToBytes(mBlock, pos); pos += 12;
+            Utils.FloatToBytes(wl.cloudScrollX).CopyTo(mBlock, pos); pos += 4;
+            Utils.FloatToBytes(wl.cloudScrollY).CopyTo(mBlock, pos); pos += 4;
+            Utils.UInt16ToBytes(wl.maxAltitude).CopyTo(mBlock, pos); pos += 2;
+            mBlock[pos] = Convert.ToByte(wl.cloudScrollXLock); pos++;
+            mBlock[pos] = Convert.ToByte(wl.cloudScrollYLock); pos++;
+            mBlock[pos] = Convert.ToByte(wl.drawClassicClouds); pos++;
+
+            List<byte[]> param = new List<byte[]>();
+            param.Add(mBlock);
+            return param;
+        }
+
+        public void SendLightShare(IClientAPI client, List<byte[]> param)
+        {
+            if(param == null || param.Count == 0)
+                client.SendGenericMessage("WindlightReset", UUID.Random(), new List<byte[]>());
+            else
+                client.SendGenericMessage("Windlight", UUID.Random(), param);
         }
     }
 }

+ 0 - 301
OpenSim/Region/CoreModules/World/LightShare/LightShareModule.cs

@@ -1,301 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of the OpenSimulator Project nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using OpenMetaverse;
-using OpenSim.Framework;
-using OpenSim.Region.CoreModules.Framework.InterfaceCommander;
-using OpenSim.Region.Framework.Interfaces;
-using OpenSim.Region.Framework.Scenes;
-using log4net;
-using Nini.Config;
-using Mono.Addins;
-
-namespace OpenSim.Region.CoreModules.World.LightShare
-{
-    [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LightShareModule")]
-    public class LightShareModule : INonSharedRegionModule, ILightShareModule, ICommandableModule
-    {
-        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-        private readonly Commander m_commander = new Commander("windlight");
-        private Scene m_scene;
-        private static bool m_enableWindlight;
-
-        #region ICommandableModule Members
-
-        public ICommander CommandInterface
-        {
-            get { return m_commander; }
-        }
-
-        #endregion
-
-        #region INonSharedRegionModule Members
-
-        public void Initialise(IConfigSource config)
-        {
-            try
-            {
-                m_enableWindlight = config.Configs["LightShare"].GetBoolean("enable_windlight", false);
-            }
-            catch (Exception)
-            {
-                m_log.Debug("[WINDLIGHT]: ini failure for enable_windlight - using default");
-            }
-
-            m_log.DebugFormat("[WINDLIGHT]: windlight module {0}", (m_enableWindlight ? "enabled" : "disabled"));
-        }
-
-        public void AddRegion(Scene scene)
-        {
-            if (!m_enableWindlight)
-                return;
-
-            m_scene = scene;
-            m_scene.RegisterModuleInterface<ILightShareModule>(this);
-            m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
-
-            m_scene.EventManager.OnMakeRootAgent += EventManager_OnMakeRootAgent;
-            m_scene.EventManager.OnSaveNewWindlightProfile += EventManager_OnSaveNewWindlightProfile;
-            m_scene.EventManager.OnSendNewWindlightProfileTargeted += EventManager_OnSendNewWindlightProfileTargeted;
-            m_scene.LoadWindlightProfile();
-
-            InstallCommands();
-        }
-
-        public void RemoveRegion(Scene scene)
-        {
-            if (!m_enableWindlight)
-                return;
-
-            m_scene.EventManager.OnPluginConsole -= EventManager_OnPluginConsole;
-
-            m_scene.EventManager.OnMakeRootAgent -= EventManager_OnMakeRootAgent;
-            m_scene.EventManager.OnSaveNewWindlightProfile -= EventManager_OnSaveNewWindlightProfile;
-            m_scene.EventManager.OnSendNewWindlightProfileTargeted -= EventManager_OnSendNewWindlightProfileTargeted;
-
-            m_scene = null;
-        }
-
-        public void Close()
-        {
-        }
-
-        public string Name
-        {
-            get { return "LightShareModule"; }
-        }
-
-        public void RegionLoaded(Scene scene)
-        {
-        }
-
-        public Type ReplaceableInterface
-        {
-            get { return null; }
-        }
-
-        #endregion
-
-        public static bool EnableWindlight
-        {
-            get
-            {
-                return m_enableWindlight;
-            }
-            set
-            {
-            }
-        }
-
-        #region events
-
-        private List<byte[]> compileWindlightSettings(RegionLightShareData wl)
-        {
-            byte[] mBlock = new Byte[249];
-            int pos = 0;
-
-            wl.waterColor.ToBytes(mBlock, 0); pos += 12;
-            Utils.FloatToBytes(wl.waterFogDensityExponent).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.underwaterFogModifier).CopyTo(mBlock, pos); pos += 4;
-            wl.reflectionWaveletScale.ToBytes(mBlock, pos); pos += 12;
-            Utils.FloatToBytes(wl.fresnelScale).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.fresnelOffset).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.refractScaleAbove).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.refractScaleBelow).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.blurMultiplier).CopyTo(mBlock, pos); pos += 4;
-            wl.bigWaveDirection.ToBytes(mBlock, pos); pos += 8;
-            wl.littleWaveDirection.ToBytes(mBlock, pos); pos += 8;
-            wl.normalMapTexture.ToBytes(mBlock, pos); pos += 16;
-            wl.horizon.ToBytes(mBlock, pos); pos += 16;
-            Utils.FloatToBytes(wl.hazeHorizon).CopyTo(mBlock, pos); pos += 4;
-            wl.blueDensity.ToBytes(mBlock, pos); pos += 16;
-            Utils.FloatToBytes(wl.hazeDensity).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.densityMultiplier).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.distanceMultiplier).CopyTo(mBlock, pos); pos += 4;
-            wl.sunMoonColor.ToBytes(mBlock, pos); pos += 16;
-            Utils.FloatToBytes(wl.sunMoonPosition).CopyTo(mBlock, pos); pos += 4;
-            wl.ambient.ToBytes(mBlock, pos); pos += 16;
-            Utils.FloatToBytes(wl.eastAngle).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.sunGlowFocus).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.sunGlowSize).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.sceneGamma).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.starBrightness).CopyTo(mBlock, pos); pos += 4;
-            wl.cloudColor.ToBytes(mBlock, pos); pos += 16;
-            wl.cloudXYDensity.ToBytes(mBlock, pos); pos += 12;
-            Utils.FloatToBytes(wl.cloudCoverage).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.cloudScale).CopyTo(mBlock, pos); pos += 4;
-            wl.cloudDetailXYDensity.ToBytes(mBlock, pos); pos += 12;
-            Utils.FloatToBytes(wl.cloudScrollX).CopyTo(mBlock, pos); pos += 4;
-            Utils.FloatToBytes(wl.cloudScrollY).CopyTo(mBlock, pos); pos += 4;
-            Utils.UInt16ToBytes(wl.maxAltitude).CopyTo(mBlock, pos); pos += 2;
-            mBlock[pos] = Convert.ToByte(wl.cloudScrollXLock); pos++;
-            mBlock[pos] = Convert.ToByte(wl.cloudScrollYLock); pos++;
-            mBlock[pos] = Convert.ToByte(wl.drawClassicClouds); pos++;
-            List<byte[]> param = new List<byte[]>();
-            param.Add(mBlock);
-            return param;
-        }
-
-        public void SendProfileToClient(IClientAPI client)
-        {
-            SendProfileToClient(client, m_scene.RegionInfo.WindlightSettings);
-        }
-
-        public void SendProfileToClient(IClientAPI client, RegionLightShareData wl)
-        {
-            if (client == null)
-                return;
-
-            if (m_enableWindlight)
-            {
-                if (m_scene.RegionInfo.WindlightSettings.valid)
-                {
-                    List<byte[]> param = compileWindlightSettings(wl);
-                    client.SendGenericMessage("Windlight", UUID.Random(), param);
-                }
-                else
-                {
-                    List<byte[]> param = new List<byte[]>();
-                    client.SendGenericMessage("WindlightReset", UUID.Random(), param);
-                }
-            }
-        }
-
-        private void EventManager_OnMakeRootAgent(ScenePresence presence)
-        {
-            if (m_enableWindlight && m_scene.RegionInfo.WindlightSettings.valid)
-                m_log.Debug("[WINDLIGHT]: Sending windlight scene to new client");
-            SendProfileToClient(presence.ControllingClient);
-        }
-
-        private void EventManager_OnSendNewWindlightProfileTargeted(RegionLightShareData wl, UUID pUUID)
-        {
-            IClientAPI client;
-            m_scene.TryGetClient(pUUID, out client);
-            SendProfileToClient(client, wl);
-        }
-
-        private void EventManager_OnSaveNewWindlightProfile()
-        {
-            m_scene.ForEachRootClient(SendProfileToClient);
-        }
-
-        #endregion
-
-        #region ICommandableModule Members
-
-        private void InstallCommands()
-        {
-            Command wlload = new Command("load", CommandIntentions.COMMAND_NON_HAZARDOUS, HandleLoad, "Load windlight profile from the database and broadcast");
-            Command wlenable = new Command("enable", CommandIntentions.COMMAND_NON_HAZARDOUS, HandleEnable, "Enable the windlight plugin");
-            Command wldisable = new Command("disable", CommandIntentions.COMMAND_NON_HAZARDOUS, HandleDisable, "Disable the windlight plugin");
-
-            m_commander.RegisterCommand("load", wlload);
-            m_commander.RegisterCommand("enable", wlenable);
-            m_commander.RegisterCommand("disable", wldisable);
-
-            m_scene.RegisterModuleCommander(m_commander);
-        }
-
-        private void HandleLoad(Object[] args)
-        {
-            if (!m_enableWindlight)
-            {
-                m_log.InfoFormat("[WINDLIGHT]: Cannot load windlight profile, module disabled. Use 'windlight enable' first.");
-            }
-            else
-            {
-                m_log.InfoFormat("[WINDLIGHT]: Loading Windlight profile from database");
-                m_scene.LoadWindlightProfile();
-                m_log.InfoFormat("[WINDLIGHT]: Load complete");
-            }
-        }
-
-        private void HandleDisable(Object[] args)
-        {
-            m_log.InfoFormat("[WINDLIGHT]: Plugin now disabled");
-            m_enableWindlight = false;
-        }
-
-        private void HandleEnable(Object[] args)
-        {
-            m_log.InfoFormat("[WINDLIGHT]: Plugin now enabled");
-            m_enableWindlight = true;
-        }
-
-        /// <summary>
-        /// Processes commandline input. Do not call directly.
-        /// </summary>
-        /// <param name="args">Commandline arguments</param>
-        private void EventManager_OnPluginConsole(string[] args)
-        {
-            if (args[0] == "windlight")
-            {
-                if (args.Length == 1)
-                {
-                    m_commander.ProcessConsoleCommand("add", new string[0]);
-                    return;
-                }
-
-                string[] tmpArgs = new string[args.Length - 2];
-                int i;
-                for (i = 2; i < args.Length; i++)
-                {
-                    tmpArgs[i - 2] = args[i];
-                }
-
-                m_commander.ProcessConsoleCommand(args[1], tmpArgs);
-            }
-        }
-        #endregion
-
-    }
-}
-

+ 3 - 3
OpenSim/Region/Framework/Interfaces/IEnvironmentModule.cs

@@ -33,8 +33,8 @@ namespace OpenSim.Region.Framework.Interfaces
     public interface IEnvironmentModule
     {
         void ResetEnvironmentSettings(UUID regionUUID);
-        //void FromLightShare(RegionLightShareData wl);
-        //RegionLightShareData ToLightShare();
-        //byte[] GetDefaultAssetData(string name);
+        void FromLightShare(RegionLightShareData wl);
+        RegionLightShareData ToLightShare();
+        byte[] GetDefaultAssetData(int type);
     }
 }

+ 0 - 3
OpenSim/Region/Framework/Interfaces/ISimulationDataService.cs

@@ -109,9 +109,6 @@ namespace OpenSim.Region.Framework.Interfaces
 
         void StoreRegionSettings(RegionSettings rs);
         RegionSettings LoadRegionSettings(UUID regionUUID);
-        RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID);
-        void StoreRegionWindlightSettings(RegionLightShareData wl);
-        void RemoveRegionWindlightSettings(UUID regionID);
 
         /// <summary>
         /// Load Environment settings from region storage

+ 1 - 3
OpenSim/Region/Framework/Interfaces/ISimulationDataStore.cs

@@ -121,9 +121,7 @@ namespace OpenSim.Region.Framework.Interfaces
 
         void StoreRegionSettings(RegionSettings rs);
         RegionSettings LoadRegionSettings(UUID regionUUID);
-        RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID);
-        void StoreRegionWindlightSettings(RegionLightShareData wl);
-        void RemoveRegionWindlightSettings(UUID regionID);
+
         UUID[] GetObjectIDs(UUID regionID);
 
         /// <summary>

+ 0 - 24
OpenSim/Region/Framework/Scenes/EventManager.cs

@@ -720,9 +720,6 @@ namespace OpenSim.Region.Framework.Scenes
         /// </remarks>
         public event OnMakeChildAgentDelegate OnMakeChildAgent;
 
-        public delegate void OnSaveNewWindlightProfileDelegate();
-        public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user);
-
         /// <summary>
         /// Triggered after the grunt work for adding a root agent to a
         /// scene has been performed (resuming attachment scripts, physics,
@@ -739,9 +736,6 @@ namespace OpenSim.Region.Framework.Scenes
         /// </remarks>
         public event Action<ScenePresence> OnMakeRootAgent;
 
-        public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted;
-        public event OnSaveNewWindlightProfileDelegate OnSaveNewWindlightProfile;
-
         /// <summary>
         /// Triggered when an object or attachment enters a scene
         /// </summary>
@@ -2160,24 +2154,6 @@ namespace OpenSim.Region.Framework.Scenes
             }
         }
 
-        public void TriggerOnSendNewWindlightProfileTargeted(RegionLightShareData wl, UUID user)
-        {
-            OnSendNewWindlightProfileTargetedDelegate handlerSendNewWindlightProfileTargeted = OnSendNewWindlightProfileTargeted;
-            if (handlerSendNewWindlightProfileTargeted != null)
-            {
-                handlerSendNewWindlightProfileTargeted(wl, user);
-            }
-        }
-
-        public void TriggerOnSaveNewWindlightProfile()
-        {
-            OnSaveNewWindlightProfileDelegate handlerSaveNewWindlightProfile = OnSaveNewWindlightProfile;
-            if (handlerSaveNewWindlightProfile != null)
-            {
-                handlerSaveNewWindlightProfile();
-            }
-        }
-
         public void TriggerOnMakeRootAgent(ScenePresence presence)
         {
             Action<ScenePresence> handlerMakeRootAgent = OnMakeRootAgent;

+ 10 - 10
OpenSim/Region/Framework/Scenes/Scene.cs

@@ -2123,17 +2123,17 @@ namespace OpenSim.Region.Framework.Scenes
                 SimulationDataService.StoreBakedTerrain(Bakedmap.GetTerrainData(), RegionInfo.RegionID);
         }
 
-        public void StoreWindlightProfile(RegionLightShareData wl)
+        private ViewerEnviroment m_regionEnviroment;
+        public ViewerEnviroment RegionEnviroment
         {
-            RegionInfo.WindlightSettings = wl;
-            SimulationDataService.StoreRegionWindlightSettings(wl);
-            m_eventManager.TriggerOnSaveNewWindlightProfile();
-        }
-
-        public void LoadWindlightProfile()
-        {
-            RegionInfo.WindlightSettings = SimulationDataService.LoadRegionWindlightSettings(RegionInfo.RegionID);
-            m_eventManager.TriggerOnSaveNewWindlightProfile();
+            get
+            {
+                return m_regionEnviroment;
+            }
+            set
+            {
+                m_regionEnviroment = value;
+            }
         }
 
         /// <summary>

+ 30 - 36
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs

@@ -62,9 +62,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
         internal bool m_LSFunctionsEnabled = false;
         internal IScriptModuleComms m_comms = null;
         internal IConfig m_osslconfig;
+        internal IEnvironmentModule m_enviroment = null;
 
-        public void Initialize(
-            IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item)
+        public void Initialize(IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item)
         {
             m_ScriptEngine = scriptEngine;
             m_host = host;
@@ -79,6 +79,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             m_comms = m_ScriptEngine.World.RequestModuleInterface<IScriptModuleComms>();
             if (m_comms == null)
                 m_LSFunctionsEnabled = false;
+
+            m_enviroment = m_ScriptEngine.World.RequestModuleInterface<IEnvironmentModule>();
         }
 
         public override Object InitializeLifetimeService()
@@ -88,8 +90,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             if (lease.CurrentState == LeaseState.Initial)
             {
                 lease.InitialLeaseTime = TimeSpan.FromMinutes(0);
-                //                lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
-                //                lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
+                //lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
+                //lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
             }
             return lease;
         }
@@ -120,13 +122,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
         /// <returns>List of windlight parameters</returns>
         public LSL_List lsGetWindlightScene(LSL_List rules)
         {
-            if (!m_LSFunctionsEnabled)
+            if (!m_LSFunctionsEnabled || m_enviroment == null)
             {
                 LSShoutError("LightShare functions are not enabled.");
                 return new LSL_List();
             }
+
             m_host.AddScriptLPS(1);
-            RegionLightShareData wl = m_host.ParentGroup.Scene.RegionInfo.WindlightSettings;
+
+            RegionLightShareData wl = m_enviroment.ToLightShare();
 
             LSL_List values = new LSL_List();
             int idx = 0;
@@ -264,9 +268,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 
         private RegionLightShareData getWindlightProfileFromRules(LSL_List rules)
         {
-            RegionLightShareData wl = (RegionLightShareData)m_host.ParentGroup.Scene.RegionInfo.WindlightSettings.Clone();
+            RegionLightShareData wl = m_enviroment.ToLightShare();
 
-//            LSL_List values = new LSL_List();
             int idx = 0;
             while (idx < rules.Length)
             {
@@ -716,12 +719,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
         /// <returns>success: true or false</returns>
         public int lsSetWindlightScene(LSL_List rules)
         {
-            if (!m_LSFunctionsEnabled)
+            if (!m_LSFunctionsEnabled || m_enviroment == null)
             {
                 LSShoutError("LightShare functions are not enabled.");
                 return 0;
             }
 
+            m_host.AddScriptLPS(1);
+
             if (!World.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_host.OwnerID))
             {
                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID);
@@ -733,42 +738,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
                 }
             }
 
-            int success = 0;
-            m_host.AddScriptLPS(1);
-
-            if (LightShareModule.EnableWindlight)
+            try
             {
-                RegionLightShareData wl;
-                try
-                {
-                    wl = getWindlightProfileFromRules(rules);
-                }
-                catch(InvalidCastException e)
-                {
-                    LSShoutError(e.Message);
-                    return 0;
-                }
-                wl.valid = true;
-                m_host.ParentGroup.Scene.StoreWindlightProfile(wl);
-                success = 1;
+                RegionLightShareData wl = getWindlightProfileFromRules(rules);
+                m_enviroment.FromLightShare(wl);
             }
-            else
+            catch(InvalidCastException e)
             {
-                LSShoutError("Windlight module is disabled");
+                LSShoutError(e.Message);
                 return 0;
             }
 
-            return success;
+            return 1;
         }
 
         public void lsClearWindlightScene()
         {
-            if (!m_LSFunctionsEnabled)
+            if (!m_LSFunctionsEnabled || m_enviroment == null)
             {
                 LSShoutError("LightShare functions are not enabled.");
                 return;
             }
 
+            m_host.AddScriptLPS(1);
+
             if (!World.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_host.OwnerID))
             {
                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID);
@@ -780,11 +773,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
                 }
             }
 
-            m_host.ParentGroup.Scene.RegionInfo.WindlightSettings.valid = false;
-            if (m_host.ParentGroup.Scene.SimulationDataService != null)
-                m_host.ParentGroup.Scene.SimulationDataService.RemoveRegionWindlightSettings(m_host.ParentGroup.Scene.RegionInfo.RegionID);
-
-            m_host.ParentGroup.Scene.EventManager.TriggerOnSaveNewWindlightProfile();
+            m_enviroment.ResetEnvironmentSettings(m_host.ParentGroup.Scene.RegionInfo.RegionID);
         }
 
         /// <summary>
@@ -794,6 +783,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
         /// <returns>success: true or false</returns>
         public int lsSetWindlightSceneTargeted(LSL_List rules, LSL_Key target)
         {
+            LSShoutError("Function temporary not supported");
+            return 0;
+
+            /* disabled code until we add force a WL into a single user
             if (!m_LSFunctionsEnabled)
             {
                 LSShoutError("LightShare functions are not enabled.");
@@ -814,7 +807,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             int success = 0;
             m_host.AddScriptLPS(1);
 
-            if (LightShareModule.EnableWindlight)
+            if (m_enviroment != null)
             {
                 RegionLightShareData wl;
                 try
@@ -836,6 +829,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             }
 
             return success;
+            */
         }
     }
 }

+ 0 - 14
OpenSim/Services/SimulationService/SimulationDataService.cs

@@ -154,20 +154,6 @@ namespace OpenSim.Services.SimulationService
             return m_database.LoadRegionSettings(regionUUID);
         }
 
-        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
-        {
-            return m_database.LoadRegionWindlightSettings(regionUUID);
-        }
-
-        public void StoreRegionWindlightSettings(RegionLightShareData wl)
-        {
-            m_database.StoreRegionWindlightSettings(wl);
-        }
-        public void RemoveRegionWindlightSettings(UUID regionID)
-        {
-            m_database.RemoveRegionWindlightSettings(regionID);
-        }
-
         public string LoadRegionEnvironmentSettings(UUID regionUUID)
         {
             return m_database.LoadRegionEnvironmentSettings(regionUUID);

+ 0 - 30
OpenSim/Tests/Common/Mock/MockRegionDataPlugin.cs

@@ -119,20 +119,6 @@ namespace OpenSim.Data.Null
             return m_store.LoadRegionSettings(regionUUID);
         }
 
-        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
-        {
-            return m_store.LoadRegionWindlightSettings(regionUUID);
-        }
-
-        public void RemoveRegionWindlightSettings(UUID regionID)
-        {
-        }
-
-        public void StoreRegionWindlightSettings(RegionLightShareData wl)
-        {
-            m_store.StoreRegionWindlightSettings(wl);
-        }
-
         public string LoadRegionEnvironmentSettings(UUID regionUUID)
         {
             return m_store.LoadRegionEnvironmentSettings(regionUUID);
@@ -197,22 +183,6 @@ namespace OpenSim.Data.Null
             m_regionSettings[rs.RegionUUID] = rs;
         }
 
-        public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
-        {
-            //This connector doesn't support the windlight module yet
-            //Return default LL windlight settings
-            return new RegionLightShareData();
-        }
-
-        public void RemoveRegionWindlightSettings(UUID regionID)
-        {
-        }
-
-        public void StoreRegionWindlightSettings(RegionLightShareData wl)
-        {
-            //This connector doesn't support the windlight module yet
-        }
-
         #region Environment Settings
         public string LoadRegionEnvironmentSettings(UUID regionUUID)
         {

+ 4 - 0
bin/assets/AssetSets.xml

@@ -77,5 +77,9 @@
   <Section Name="Textures AssetSet">
     <Key Name="file" Value="TexturesAssetSet/TexturesAssetSet.xml"/>
   </Section>
+
+  <Section Name="Settings AssetSet">
+    <Key Name="file" Value="SettingsAssetSet/SettingsAssetSet.xml"/>
+  </Section>
   <!---->
 </Nini>

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
bin/assets/SettingsAssetSet/DefaultDaycycle.xml


+ 9 - 0
bin/assets/SettingsAssetSet/SettingsAssetSet.xml

@@ -0,0 +1,9 @@
+<Nini>
+  <Section Name="Default Daycycle">
+    <Key Name="assetID" Value="5646d39e-d3d7-6aff-ed71-30fc87d64a91" />
+    <Key Name="name" Value="Default Daycycle" />
+    <Key Name="assetType" Value="56" />
+    <Key Name="fileName" Value="DefaultDaycycle.xml" />
+  </Section>
+
+</Nini>

BIN
bin/assets/TexturesAssetSet/DefaultClouds.j2c


+ 7 - 0
bin/assets/TexturesAssetSet/TexturesAssetSet.xml

@@ -855,6 +855,13 @@
      <Key Name="assetType" Value="0" />
      <Key Name="fileName" Value="FALLBACK_BAKED_AUX3_32X32.j2k"/>
   </Section>
+  <Section Name="DefaultCloud">
+     <Key Name="assetID" Value="1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b"/>
+     <Key Name="name" Value="DefaultCloud"/>
+     <Key Name="assetType" Value="0" />
+     <Key Name="fileName" Value="DefaultClouds.j2c"/>
+  </Section>
+
 
 
 </Nini>

+ 4 - 0
bin/inventory/Libraries.xml

@@ -82,5 +82,9 @@
     <Key Name="foldersFile" Value="TexturesLibrary/TexturesLibraryFolders.xml"/>
     <Key Name="itemsFile" Value="TexturesLibrary/TexturesLibraryItems.xml"/>
   </Section>
+  <Section Name="Settings Library">
+    <Key Name="foldersFile" Value="SettingsLibrary/Folders.xml"/>
+    <Key Name="itemsFile" Value="SettingsLibrary/Items.xml"/>
+  </Section>
   <!---->
 </Nini>

+ 28 - 0
bin/inventory/SettingsLibrary/Folders.xml

@@ -0,0 +1,28 @@
+<Nini>
+
+  
+  <Section Name="Settings Library">
+    <Key Name="folderID" Value="00000112-000f-0000-0000-000100bba025"/>
+    <Key Name="parentFolderID" Value="00000112-000f-0000-0000-000100bba000"/>
+    <Key Name="name" Value="Settings Library"/>
+    <Key Name="type" Value="25"/>
+  </Section>
+  <Section Name="Water">
+    <Key Name="folderID" Value="25000112-000f-0000-0000-000100bba025"/>
+    <Key Name="parentFolderID" Value="00000112-000f-0000-0000-000100bba025"/>
+    <Key Name="name" Value="Water"/>
+    <Key Name="type" Value="25"/>
+  </Section>
+  <Section Name="Sky">
+    <Key Name="folderID" Value="25100112-000f-0000-0000-000100bba025"/>
+    <Key Name="parentFolderID" Value="00000112-000f-0000-0000-000100bba025"/>
+    <Key Name="name" Value="Sky"/>
+    <Key Name="type" Value="25"/>
+  </Section>
+  <Section Name="Daycycle">
+    <Key Name="folderID" Value="25200112-000f-0000-0000-000100bba025"/>
+    <Key Name="parentFolderID" Value="00000112-000f-0000-0000-000100bba025"/>
+    <Key Name="name" Value="Daycycle"/>
+    <Key Name="type" Value="25"/>
+  </Section>
+</Nini>

+ 40 - 0
bin/inventory/SettingsLibrary/Items.xml

@@ -0,0 +1,40 @@
+<!--
+  In Keys,
+    name is the name of the item.
+    description is the description of the item.
+    assetID is the ID of the asset data that is referenced by the item.
+    folderID is the ID of the folder containing this item.
+    inventoryID is the ID for the item.  It must be unique.
+    assetType is the asset type of the item.  See the OpenMetaverse.AssetType enum in libopenmetaverse
+    inventoryType is the inventory type of the item.  See the OpenMetaverse.InventoryType enum in libopenmetaverse
+    flags are only required for wearables.  See OpenMetaverse.WearableType enum in libopenmetaverse.
+-->
+
+<Nini>
+
+<!--
+  <Section Name="Example Library Item">
+    <Key Name="inventoryID" Value="30000000-0000-2222-4444-000000000001" />
+    <Key Name="assetID" Value="30000000-0000-2222-3333-000000000001" />
+    <Key Name="folderID" Value="30000112-000f-0000-0000-000100bba003"/>
+    <Key Name="description" Value="Example Library Item" />
+    <Key Name="name" Value="Example Library Item" />
+    <Key Name="assetType" Value="7" />
+    <Key Name="inventoryType" Value="7" />
+  </Section>
+--> 
+
+
+  <Section Name="Default Daycycle">
+    <Key Name="inventoryID" Value="25210112-000f-0000-0000-000100bba025" />
+    <Key Name="assetID" Value="5646d39e-d3d7-6aff-ed71-30fc87d64a91" />
+    <Key Name="folderID" Value="25200112-000f-0000-0000-000100bba025"/>
+    <Key Name="description" Value="Default Daycycle" />
+    <Key Name="name" Value="Default Daycycle" />
+    <Key Name="assetType" Value="56" />
+    <Key Name="inventoryType" Value="25" />
+	<Key Name="flags" Value="2" />
+  </Section>
+
+
+</Nini>

Деякі файли не було показано, через те що забагато файлів було змінено