public override void Update() { if (RockWeather.alwaysRainbow) { RockWeather.rainbowFade = 1f; RockWeather.rainbowTime = 1f; } RockWeather.rainbowFade = Lerp.Float(RockWeather.rainbowFade, (double)RockWeather.rainbowTime > 0.0 ? 1f : 0.0f, 1f / 1000f); RockWeather.rainbowTime -= Maths.IncFrameTimer(); if (RockWeather._weather != Weather.Sunny) { RockWeather.rainbowTime -= Maths.IncFrameTimer() * 8f; } if ((double)RockWeather.rainbowTime < 0.0) { RockWeather.rainbowTime = 0.0f; } if (RockWeather.neverRainbow) { RockWeather.rainbowFade = 0.0f; } RockWeatherState weatherState = this.GetWeatherState(RockWeather._timeOfDay); this.rainbowLight = weatherState.rainbowLight * RockWeather.rainbowFade; this.rainbowLight2 = weatherState.rainbowLight2 * RockWeather.rainbowFade; this.ApplyWeatherState(weatherState); RockWeather._prevWeatherLerp = Lerp.Float(RockWeather._prevWeatherLerp, 0.0f, 0.05f); if (Network.isServer) { this.wait += 3f / 1000f; if ((double)this.wait > 1.0) { this.wait = 0.0f; if ((double)RockWeather._weatherTime > 0.100000001490116) { if ((double)RockWeather.snowChance > 0.0 && RockWeather._weather != Weather.Snowing && (double)Rando.Float(1f) > 1.0 - (double)RockWeather.snowChance) { RockWeather._prevWeatherLerp = 1f; RockWeather.sunshowers = 0.0f; RockWeather._prevWeather = RockWeather._weather; RockWeather._weather = Weather.Snowing; if (Network.isActive) { Send.Message((NetMessage) new NMChangeWeather((byte)RockWeather._weather)); } RockWeather._weatherTime = 0.0f; } if ((double)RockWeather.rainChance > 0.0 && RockWeather._weather != Weather.Raining && (double)Rando.Float(1f) > 1.0 - (double)RockWeather.rainChance) { RockWeather._prevWeatherLerp = 1f; RockWeather.sunshowers = 0.0f; RockWeather._prevWeather = RockWeather._weather; RockWeather._weather = Weather.Raining; if (Network.isActive) { Send.Message((NetMessage) new NMChangeWeather((byte)RockWeather._weather)); } RockWeather._weatherTime = 0.0f; } if (RockWeather._weather != Weather.Sunny && (double)Rando.Float(1f) > 0.980000019073486) { RockWeather._prevWeatherLerp = 1f; if (RockWeather._weather == Weather.Raining) { if ((double)RockWeather._timeRaining > 900.0 && (double)Rando.Float(1f) > 0.850000023841858 || (double)Rando.Float(1f) > 0.949999988079071) { RockWeather.rainbowTime = Rando.Float(30f, 240f); } if ((double)Rando.Float(1f) > 0.300000011920929) { RockWeather.sunshowers = Rando.Float(0.1f, 60f); } } RockWeather._timeRaining = 0.0f; RockWeather._prevWeather = RockWeather._weather; RockWeather._weather = Weather.Sunny; if (Network.isActive) { Send.Message((NetMessage) new NMChangeWeather((byte)RockWeather._weather)); } RockWeather._weatherTime = 0.0f; } } } } RockWeather.sunshowers -= Maths.IncFrameTimer(); if ((double)RockWeather.sunshowers <= 0.0) { RockWeather.sunshowers = 0.0f; } switch (RockWeather._weather) { case Weather.Snowing: while ((double)this._particleWait <= 0.0) { ++this._particleWait; SnowParticle snowParticle = new SnowParticle(new Vec2(Rando.Float(-100f, 400f), Rando.Float(-500f, -550f))); snowParticle.z = Rando.Float(0.0f, 200f); this._particles.Add((WeatherParticle)snowParticle); } this._particleWait -= 0.5f; break; case Weather.Raining: while ((double)this._particleWait <= 0.0) { ++this._particleWait; RainParticle rainParticle = new RainParticle(new Vec2(Rando.Float(-100f, 900f), Rando.Float(-500f, -550f))); rainParticle.z = Rando.Float(0.0f, 200f); this._particles.Add((WeatherParticle)rainParticle); } --this._particleWait; break; default: if ((double)RockWeather.sunshowers <= 0.0) { break; } goto case Weather.Raining; } List <WeatherParticle> weatherParticleList = new List <WeatherParticle>(); foreach (WeatherParticle particle in this._particles) { particle.Update(); if ((double)particle.position.y > 0.0) { particle.die = true; } switch (particle) { case RainParticle _ when(double) particle.z <70.0 && (double)particle.position.y> -62.0: particle.die = true; particle.position.y = -58f; break; case RainParticle _ when(double) particle.z <40.0 && (double)particle.position.y> -98.0: particle.die = true; particle.position.y = -98f; break; case RainParticle _ when(double) particle.z < 25.0 && ((double)particle.position.x > 175.0 && (double)particle.position.x < 430.0) && ((double)particle.position.y > -362.0 && (double)particle.position.y < -352.0): particle.die = true; particle.position.y = -362f; break; } if ((double)particle.alpha < 0.00999999977648258) { weatherParticleList.Add(particle); } } foreach (WeatherParticle weatherParticle in weatherParticleList) { this._particles.Remove(weatherParticle); } }