public Packet_50_GroundColor(Colors.XRGBColor _Color) { base.Type = 50; base.Data = new byte[0]; Red = _Color.Red; Green = _Color.Green; Blue = _Color.Blue; }
public Packet_48_FogColor(Colors.XRGBColor _Color) { base.Type = 48; base.Data = new byte[0]; Red = _Color.Red; Green = _Color.Green; Blue = _Color.Blue; }
public static bool UpdateTimeOfDay() { while ((DateTime.Now - AdvancedWeatherOptions._LastDayNightCycleRestart).TotalMinutes > AdvancedWeatherOptions._DayNightCycleLength & AdvancedWeatherOptions._DayNightCycleLength > 0) { AdvancedWeatherOptions._LastDayNightCycleRestart += new TimeSpan(0, AdvancedWeatherOptions._DayNightCycleLength, 0); } CurrentTick = GetServerTimeTicks(); if (AdvancedWeatherOptions._DayNightCycleLength <= 0) { CurrentTick = PreviousTick; //return false; } //These packets ultimately sent to the clients. Packets.Packet_49_SkyColor SkyColorUpdate = new Packets.Packet_49_SkyColor(Settings.Weather.Advanced.SkyColor); Packets.Packet_48_FogColor FogColorUpdate = new Packets.Packet_48_FogColor(Settings.Weather.Advanced.FogColor); Colors.XRGBColor BlendedSkyColor = Settings.Weather.Advanced.SkyColor; Colors.XRGBColor BlendedFogColor = Settings.Weather.Advanced.FogColor; #region TimeOfDayBlending //Night 1 if (CurrentTick < 6000) { BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.NightSkyColor; SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor; FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor); } //Dawn 1 if (CurrentTick >= 6000 && CurrentTick < 7000) { BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.NightSkyColor; BlendedSkyColor = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DawnSkyColor, (CurrentTick - 6000) / 1000d); SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor; BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DawnHorizonColor, (CurrentTick - 6000) / 1000d); FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor); } //Dawn 2 if (CurrentTick >= 7000 && CurrentTick < 8000) { if (PreviousTick < 7000) { Weather = new Packets.Packet_33_Weather(_Weather) { Lighting = 0 }; //Set To Day Clients.AllClients.SendPacket(Weather); } BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.DawnSkyColor; BlendedSkyColor = BlendedSkyColor.AlphaBlend(new Colors.XRGBColor(255, 255, 255), (CurrentTick - 7000) / 1000d); BlendedSkyColor = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DaySkyColor, (CurrentTick - 7000) / 1000d); SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.DawnHorizonColor; BlendedFogColor = BlendedFogColor.AlphaBlend(new Colors.XRGBColor(255, 255, 255), (CurrentTick - 7000) / 1000d); BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DayHorizonColor, (CurrentTick - 7000) / 1000d); FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); } //Day if (CurrentTick >= 8000 && CurrentTick < 18000) { BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.DaySkyColor; SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.DayHorizonColor; FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); } //Dusk 1 if (CurrentTick >= 18000 && CurrentTick < 19000) { BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.DaySkyColor; BlendedSkyColor = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DuskSkyColor, (CurrentTick - 18000) / 1000d); SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.DayHorizonColor; BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.DuskHorizonColor, (CurrentTick - 18000) / 1000d); FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); } //Dusk 2 if (CurrentTick >= 19000 && CurrentTick < 20000) { if (PreviousTick < 19000) { Weather = new Packets.Packet_33_Weather(_Weather) { Lighting = 65537 }; //Set To Night Clients.AllClients.SendPacket(Weather); } BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.DuskSkyColor; BlendedSkyColor = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NightSkyColor, (CurrentTick - 19000) / 1000d); SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.DuskHorizonColor; BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor, (CurrentTick - 19000) / 1000d); FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor); } //Night 2 if (CurrentTick >= 20000) { BlendedSkyColor = Settings.Weather.Advanced.EnvironmentColors.NightSkyColor; SkyColorUpdate.Color = SkyColorUpdate.Color.AlphaBlend(BlendedSkyColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); BlendedFogColor = Settings.Weather.Advanced.EnvironmentColors.NightHorizonColor; FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(BlendedFogColor, Settings.Weather.Advanced.EnvironmentColors.OverallBlendFactor); //FogColorUpdate.Color = FogColorUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightHorizonColorChangeFactor); } #endregion #region Fog Distance Blending BlendedFogColor = FogColorUpdate.Color; BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.WhiteFogColor, 1 - (OpenYS.Weather.Fog / 20000)); FogColorUpdate.Color = BlendedFogColor; #endregion foreach (Client ThisClient in Clients.LoggedIn) { #region Altitude Blending //Now filter the sky and fog based on altitude. Packets.Packet_48_FogColor ThisClientFogUpdate = FogColorUpdate; Packets.Packet_49_SkyColor ThisClientSkyUpdate = SkyColorUpdate; Vehicle ThisVehicle = ThisClient.Vehicle; if (ThisVehicle != Vehicles.NoVehicle) { if (ThisVehicle.PosY >= Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters) //Above 100,000ft { ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereSkyColor, 1.0); ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereHorizonColor, 1.0); //ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - NightFogFilter); } if (ThisVehicle.PosY >= Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters && ThisVehicle.PosY < Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters) //Roughly 40,000ft to 100,000ft { BlendedSkyColor = ThisClientSkyUpdate.Color; BlendedSkyColor = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.MaxAltitudeSkyColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters)); //fade to the sky color. BlendedSkyColor = BlendedSkyColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereSkyColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters)); //fade to the noatmosphere color. ThisClientSkyUpdate.Color = BlendedSkyColor; BlendedFogColor = ThisClientFogUpdate.Color; BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.MaxAltitudeHorizonColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters)); //fade to the Fog color. BlendedFogColor = BlendedFogColor.AlphaBlend(Settings.Weather.Advanced.EnvironmentColors.NoAtmosphereHorizonColor, (ThisVehicle.PosY - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) / (Settings.Weather.Advanced.AtmosphericFading.MaximumAltitudeInMeters - Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters)); //fade to the noatmosphere color. ThisClientFogUpdate.Color = BlendedFogColor; //ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Utilities.RGBColor(0, 0, 0), 1 - NightFogFilter); } if (ThisVehicle.PosY < Settings.Weather.Advanced.AtmosphericFading.MinimumAltitudeInMeters) //Less then 40,000 ft. { //Do nothing. } #region SetNightColors if (CurrentTick < 6000 | CurrentTick >= 20000) { ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor); //7000 = 0, 6000 = 1 } if (CurrentTick >= 6000 & CurrentTick < 7000) { ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 6000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } if (CurrentTick >= 7000 & CurrentTick < 8000) { ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 7000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } if (CurrentTick >= 18000 & CurrentTick < 19000) { ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 18000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } if (CurrentTick >= 19000 & CurrentTick < 20000) { ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 19000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } #endregion } else { #region SetNightColors if (CurrentTick < 6000 | CurrentTick >= 20000) { ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), 1 - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor); //7000 = 0, 6000 = 1 } if (CurrentTick >= 6000 & CurrentTick < 7000) { ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 6000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } if (CurrentTick >= 7000 & CurrentTick < 8000) { ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (1.0d - ((CurrentTick - 7000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } if (CurrentTick >= 18000 & CurrentTick < 19000) { ThisClientSkyUpdate.Color = ThisClientSkyUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 18000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } if (CurrentTick >= 19000 & CurrentTick < 20000) { ThisClientFogUpdate.Color = ThisClientFogUpdate.Color.AlphaBlend(new Colors.XRGBColor(0, 0, 0), (((CurrentTick - 19000d) / 1000d)) * (1.0d - Settings.Weather.Advanced.EnvironmentColors.NightColorFactor)); } #endregion } #endregion #region Set Definied Colors if (ThisClient.Version > 20110207) { if (!Settings.Weather.Advanced.EnableSkyColor) { ThisClient.SendPacket(ThisClientSkyUpdate); } if (!Settings.Weather.Advanced.EnableFogColor) { ThisClient.SendPacket(ThisClientFogUpdate); } } #endregion } PreviousTick = CurrentTick; return(true); }