public override void Draw(GameTime gameTime) { if (this.GameState.Loading || this.GameState.StereoMode || this.GameState.InMap) { return; } GraphicsDevice graphicsDevice = this.GraphicsDevice; GraphicsDeviceExtensions.GetDssCombiner(graphicsDevice).StencilPass = StencilOperation.Keep; GraphicsDeviceExtensions.GetDssCombiner(graphicsDevice).StencilFunction = CompareFunction.Always; GraphicsDeviceExtensions.GetDssCombiner(graphicsDevice).DepthBufferEnable = true; GraphicsDeviceExtensions.GetDssCombiner(graphicsDevice).DepthBufferFunction = CompareFunction.LessEqual; GraphicsDeviceExtensions.GetDssCombiner(graphicsDevice).DepthBufferWriteEnable = false; GraphicsDeviceExtensions.GetRasterCombiner(graphicsDevice).CullMode = CullMode.CullCounterClockwiseFace; this.GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp; bool flag = this.LevelManager.Name == "ELDERS"; GraphicsDeviceExtensions.SetBlendingMode(this.GraphicsDevice, BlendingMode.Alphablending); for (int index = 0; index < this.ActiveParticleSystems.Count; ++index) { PlaneParticleSystem planeParticleSystem = this.ActiveParticleSystems[index]; planeParticleSystem.InScreen = flag || this.CameraManager.Frustum.Contains(planeParticleSystem.Settings.SpawnVolume) != ContainmentType.Disjoint; if (planeParticleSystem.InScreen && planeParticleSystem.DrawOrder == 0) { planeParticleSystem.Draw(); } } }
protected override void Begin() { base.Begin(); this.SinceStarted = TimeSpan.Zero; this.PlayerManager.LookingDirection = HorizontalDirection.Left; this.SinceRisen = TimeSpan.Zero; this.Phase = GateWarp.Phases.Rise; foreach (SoundEmitter soundEmitter in this.SoundManager.Emitters) { soundEmitter.FadeOutAndDie(2f); } this.SoundManager.FadeFrequencies(true, 2f); this.SoundManager.FadeVolume(this.SoundManager.MusicVolumeFactor, 0.0f, 3f); SoundEffectExtensions.EmitAt(this.WarpSound, this.PlayerManager.Position); this.rgbPlanes = (Mesh)null; this.particles = (PlaneParticleSystem)null; this.sinceInitialized = 0.0f; this.originalCenter = this.CameraManager.Center; this.CameraManager.Constrained = true; this.GateAo = Enumerable.FirstOrDefault <ArtObjectInstance>((IEnumerable <ArtObjectInstance>) this.LevelManager.ArtObjects.Values, (Func <ArtObjectInstance, bool>)(x => x.ArtObject.ActorType == ActorType.WarpGate)); if (this.GateAo == null || this.GameState.SaveData.UnlockedWarpDestinations.Count <= 1) { return; } this.InitializeRgbGate(); }
public void Add(PlaneParticleSystem system) { if (!system.Initialized) { ServiceHelper.AddComponent((IGameComponent)system); } system.Revive(); this.ActiveParticleSystems.Add(system); }
public void Remove(PlaneParticleSystem system, bool returnToPool) { this.ActiveParticleSystems.Remove(system); if (!returnToPool) { return; } system.Clear(); this.PooledParticleSystems.Return(system); }
private void TryInitialize() { if (this.eIdleSpin != null && this.eIdleSpin.Cue != null && (!this.eIdleSpin.Cue.IsDisposed && this.eIdleSpin.Cue.State != SoundState.Stopped)) { this.eIdleSpin.Cue.Stop(false); } this.eIdleSpin = (SoundEmitter)null; this.rgbPlanes = (Mesh)null; this.particles = (PlaneParticleSystem)null; this.Phase = LesserWarp.Phases.None; this.sinceInitialized = 0.0f; this.GateAo = Enumerable.FirstOrDefault <ArtObjectInstance>((IEnumerable <ArtObjectInstance>) this.LevelManager.ArtObjects.Values, (Func <ArtObjectInstance, bool>)(x => x.ArtObject.ActorType == ActorType.LesserGate)); if (this.GateAo == null) { return; } this.InitializeRgbGate(); LesserWarp lesserWarp = this; Mesh mesh1 = new Mesh(); Mesh mesh2 = mesh1; DefaultEffect.Textured textured1 = new DefaultEffect.Textured(); textured1.Fullbright = true; DefaultEffect.Textured textured2 = textured1; mesh2.Effect = (BaseEffect)textured2; mesh1.DepthWrites = false; mesh1.Texture = (Dirtyable <Texture>)((Texture)this.WhiteTexture); mesh1.Rotation = Quaternion.CreateFromAxisAngle(Vector3.Right, -1.570796f); Mesh mesh3 = mesh1; lesserWarp.MaskMesh = mesh3; this.MaskMesh.AddFace(new Vector3(2f), Vector3.Zero, FaceOrientation.Front, true, true); this.MaskMesh.BakeTransformWithNormal <FezVertexPositionNormalTexture>(); this.MaskMesh.Position = this.GateAo.Position - Vector3.UnitY * 1.25f; this.HasCubeShard = Enumerable.Any <TrileInstance>((IEnumerable <TrileInstance>) this.LevelManager.Triles.Values, (Func <TrileInstance, bool>)(x => { if (ActorTypeExtensions.IsCubeShard(x.Trile.ActorSettings.Type)) { return((double)Vector3.Distance(x.Center, this.GateAo.Position) < 3.0); } else { return(false); } })); this.OriginalPosition = this.GateAo.Position; this.sRise = this.CMProvider.CurrentLevel.Load <SoundEffect>("Sounds/Zu/LesserWarpRise"); this.sLower = this.CMProvider.CurrentLevel.Load <SoundEffect>("Sounds/Zu/LesserWarpLower"); this.sActivate = this.CMProvider.CurrentLevel.Load <SoundEffect>("Sounds/Zu/WarpGateActivate"); this.eIdleSpin = SoundEffectExtensions.EmitAt(this.CMProvider.CurrentLevel.Load <SoundEffect>("Sounds/Zu/LesserWarpIdleSpin"), this.GateAo.Position, true, true); }
private void DoLoad(bool dummy) { this.LevelManager.ChangeLevel(this.PlayerManager.WarpPanel.Destination); this.Phase = GateWarp.Phases.FadeIn; this.GameState.SaveData.View = this.PlayerManager.OriginWarpViewpoint; this.GameState.SaveData.Ground = Enumerable.First <ArtObjectInstance>((IEnumerable <ArtObjectInstance>) this.LevelManager.ArtObjects.Values, (Func <ArtObjectInstance, bool>)(x => x.ArtObject.ActorType == ActorType.WarpGate)).Position - Vector3.UnitY + FezMath.AsVector(FezMath.VisibleOrientation(this.GameState.SaveData.View)) * 2f; this.PlayerManager.CheckpointGround = (TrileInstance)null; this.PlayerManager.RespawnAtCheckpoint(); this.CameraManager.Center = this.PlayerManager.Position + Vector3.Up * this.PlayerManager.Size.Y / 2f + Vector3.UnitY; this.CameraManager.SnapInterpolation(); this.LevelMaterializer.CullInstances(); this.PlayerManager.Hidden = false; this.GameState.ScheduleLoadEnd = true; this.SinceStarted = TimeSpan.Zero; this.PlayerManager.WarpPanel = (WarpPanel)null; this.particles = (PlaneParticleSystem)null; }
public override void Update(GameTime gameTime) { if (this.GameState.Loading) { return; } if (this.Transition != null) { if (!this.GameState.FarawaySettings.InTransition) { this.RainPS = this.Transition.RainPS; this.PlaneSystems.Add(this.RainPS); this.RainPS.MoveActiveParticles(this.transitionCenter - this.CameraManager.Center); this.RainPS.SetViewProjectionSticky(false); ServiceHelper.RemoveComponent <RainHost.RainTransition>(this.Transition); this.Transition = (RainHost.RainTransition)null; } else { if (this.GameState.Paused || (double)this.GameState.FarawaySettings.DestinationCrossfadeStep <= 0.0) { return; } this.SpawnSplashes(); return; } } Vector3 center = this.CameraManager.Center; int num = 60; Vector3 vector3 = new Vector3((float)num, (float)num / this.CameraManager.AspectRatio, (float)num) / 2f; this.RainPS.Settings.SpawnVolume = new BoundingBox() { Min = center - vector3 * FezMath.XZMask, Max = center + vector3 * new Vector3(1f, 2f, 1f) }; if (this.GameState.Paused || !this.CameraManager.ActionRunning || (this.GameState.InMenuCube || this.GameState.InMap) || this.GameState.InFpsMode) { return; } this.SpawnSplashes(); }
public PlaneParticleSystem RainSplash(Vector3 center) { Vector3 vector3 = center; PlaneParticleSystem system = this.PooledParticleSystems.Take(); system.MaximumCount = 3; if (system.Settings == null) { system.Settings = new PlaneParticleSystemSettings(); } system.Settings.NoLightDraw = true; system.Settings.SpawnVolume = new BoundingBox() { Min = vector3 - FezMath.XZMask * 0.15f, Max = vector3 + FezMath.XZMask * 0.15f }; system.Settings.Velocity.Function = (Func <Vector3, Vector3, Vector3>)null; system.Settings.Velocity.Base = new Vector3(0.0f, 3.5f, 0.0f); system.Settings.Velocity.Variation = new Vector3(2f, 1.5f, 2f); system.Settings.Gravity = new Vector3(0.0f, -0.4f, 0.0f); system.Settings.SpawningSpeed = 60f; system.Settings.ParticleLifetime = 0.275f; system.Settings.SystemLifetime = 0.275f; system.Settings.FadeInDuration = 0.0f; system.Settings.FadeOutDuration = 0.5f; system.Settings.SpawnBatchSize = 3; system.Settings.SizeBirth.Function = (Func <Vector3, Vector3, Vector3>)null; system.Settings.SizeBirth.Variation = Vector3.Zero; system.Settings.SizeBirth.Base = new Vector3(1.0 / 16.0); system.Settings.ColorLife.Base = new Color(145, 182, (int)byte.MaxValue, 96); system.Settings.ColorLife.Variation = new Color(0, 0, 0, 32); system.Settings.ColorLife.Function = (Func <Color, Color, Color>)null; system.Settings.Texture = this.WhiteSquare; system.Settings.BlendingMode = BlendingMode.Alphablending; system.Settings.Billboarding = true; this.Add(system); return(system); }
public WaterfallState(BackgroundPlane plane, PlaneParticleSystem ps, WaterfallsHost host) { WaterfallsHost.WaterfallState waterfallState = this; ServiceHelper.InjectServices((object)this); this.Host = host; this.Plane = plane; this.ParticleSystem = ps; bool flag = plane.ActorType == ActorType.Trickle; this.Splash = new BackgroundPlane(this.LevelMaterializer.AnimatedPlanesMesh, this.LevelManager.WaterType != LiquidType.Sewer ? (this.LevelManager.WaterType != LiquidType.Purple ? this.CMProvider.CurrentLevel.Load <AnimatedTexture>("Background Planes/water/" + (flag ? "water_small_splash" : "water_large_splash")) : this.CMProvider.CurrentLevel.Load <AnimatedTexture>("Background Planes/waterPink/" + (flag ? "water_small_splash" : "water_large_splash"))) : this.CMProvider.CurrentLevel.Load <AnimatedTexture>("Background Planes/sewer/" + (flag ? "sewer_small_splash" : "sewer_large_splash"))) { Doublesided = true, Crosshatch = true }; this.LevelManager.AddPlane(this.Splash); this.Top = FezMath.Dot(this.Plane.Position + this.Plane.Scale * this.Plane.Size / 2f, Vector3.UnitY); this.TerminalPosition = this.Plane.Position - this.Plane.Scale * this.Plane.Size / 2f * Vector3.UnitY + Vector3.Transform(Vector3.UnitZ, plane.Rotation) / 16f; foreach (BackgroundPlane backgroundPlane in Enumerable.Where <BackgroundPlane>((IEnumerable <BackgroundPlane>) this.LevelManager.BackgroundPlanes.Values, (Func <BackgroundPlane, bool>)(x => { int?local_0 = x.AttachedPlane; int local_1 = plane.Id; if ((local_0.GetValueOrDefault() != local_1 ? 0 : (local_0.HasValue ? 1 : 0)) != 0) { return(FezMath.AlmostEqual(Vector3.Transform(Vector3.UnitZ, plane.Rotation).Y, 0.0f)); } else { return(false); } }))) { this.AttachedPlanes.Add(backgroundPlane); } Vector3 position = this.LevelManager.WaterType == LiquidType.None ? this.Top * Vector3.UnitY + this.Plane.Position * FezMath.XZMask : this.TerminalPosition * FezMath.XZMask + this.LevelManager.WaterHeight * Vector3.UnitY; Waiters.Wait((double)RandomHelper.Between(0.0, 1.0), (Action)(() => waterfallState.BubblingEmitter = SoundEffectExtensions.EmitAt(waterfallState.Host.SewageFallSound, position, true, RandomHelper.Centered(0.025), 0.0f))); }
private void InitializeRgbGate() { IPlaneParticleSystems planeParticleSystems = this.PlaneParticleSystems; GateWarp gateWarp = this; Game game = this.Game; int maximumCount = 400; PlaneParticleSystemSettings particleSystemSettings = new PlaneParticleSystemSettings(); particleSystemSettings.SpawnVolume = new BoundingBox() { Min = this.GateAo.Position + new Vector3(-3.25f, -6f, -3.25f), Max = this.GateAo.Position + new Vector3(3.25f, -2f, 3.25f) }; particleSystemSettings.Velocity.Base = new Vector3(0.0f, 0.6f, 0.0f); particleSystemSettings.Velocity.Variation = new Vector3(0.0f, 0.1f, 0.1f); particleSystemSettings.SpawningSpeed = 7f; particleSystemSettings.ParticleLifetime = 6f; particleSystemSettings.Acceleration = 0.375f; particleSystemSettings.SizeBirth = (VaryingVector3) new Vector3(0.25f, 0.25f, 0.25f); particleSystemSettings.ColorBirth = (VaryingColor)Color.Black; particleSystemSettings.ColorLife.Base = new Color(0.5f, 0.5f, 0.5f, 1f); particleSystemSettings.ColorLife.Variation = new Color(0.5f, 0.5f, 0.5f, 1f); particleSystemSettings.ColorDeath = (VaryingColor)Color.Black; particleSystemSettings.FullBright = true; particleSystemSettings.RandomizeSpawnTime = true; particleSystemSettings.Billboarding = true; particleSystemSettings.Texture = this.CMProvider.Global.Load <Texture2D>("Background Planes/dust_particle"); particleSystemSettings.BlendingMode = BlendingMode.Additive; PlaneParticleSystemSettings settings = particleSystemSettings; PlaneParticleSystem planeParticleSystem1; PlaneParticleSystem planeParticleSystem2 = planeParticleSystem1 = new PlaneParticleSystem(game, maximumCount, settings); gateWarp.particles = planeParticleSystem1; PlaneParticleSystem system = planeParticleSystem2; planeParticleSystems.Add(system); this.rgbPlanes = new Mesh() { Effect = (BaseEffect) new DefaultEffect.Textured(), DepthWrites = false, AlwaysOnTop = true, SamplerState = SamplerState.LinearClamp, Blending = new BlendingMode?(BlendingMode.Additive), Texture = (Dirtyable <Texture>)((Texture)this.CMProvider.CurrentLevel.Load <Texture2D>("Other Textures/rgb_gradient")) }; this.rgbPlanes.AddFace(new Vector3(1f, 4.5f, 1f), new Vector3(0.0f, 3f, 0.0f), FaceOrientation.Front, true).Material = new Material() { Diffuse = Vector3.Zero, Opacity = 0.0f }; this.rgbPlanes.AddFace(new Vector3(1f, 4.5f, 1f), new Vector3(0.0f, 3f, 0.0f), FaceOrientation.Front, true).Material = new Material() { Diffuse = Vector3.Zero, Opacity = 0.0f }; this.rgbPlanes.AddFace(new Vector3(1f, 4.5f, 1f), new Vector3(0.0f, 3f, 0.0f), FaceOrientation.Front, true).Material = new Material() { Diffuse = Vector3.Zero, Opacity = 0.0f }; }
private void TryInitialize() { foreach (WaterfallsHost.WaterfallState waterfallState in this.Waterfalls) { waterfallState.Dispose(); } this.Waterfalls.Clear(); foreach (BackgroundPlane plane in Enumerable.ToArray <BackgroundPlane>((IEnumerable <BackgroundPlane>) this.LevelManager.BackgroundPlanes.Values)) { if (plane.ActorType == ActorType.Waterfall || plane.ActorType == ActorType.Trickle) { Vector3 vector3_1 = Vector3.Transform(plane.Size * plane.Scale * Vector3.UnitX / 2f, plane.Rotation); Vector3 vector = Vector3.Transform(Vector3.UnitZ, plane.Rotation); Vector3 vector3_2 = FezMath.XZMask - FezMath.Abs(vector); Vector3 vector3_3 = plane.Position + plane.Size * plane.Scale * Vector3.UnitY / 2f - new Vector3(0.0f, 1.0 / 32.0, 0.0f) - vector * 2f / 16f; Game game = this.Game; int maximumCount = 25; PlaneParticleSystemSettings particleSystemSettings1 = new PlaneParticleSystemSettings(); particleSystemSettings1.SpawnVolume = new BoundingBox() { Min = vector3_3 - vector3_1, Max = vector3_3 + vector3_1 }; PlaneParticleSystemSettings particleSystemSettings2 = particleSystemSettings1; VaryingVector3 varyingVector3_1 = new VaryingVector3(); varyingVector3_1.Base = Vector3.Up * 1.6f + vector / 4f; varyingVector3_1.Variation = Vector3.Up * 0.8f + vector / 4f + vector3_2 / 2f; VaryingVector3 varyingVector3_2 = varyingVector3_1; particleSystemSettings2.Velocity = varyingVector3_2; particleSystemSettings1.Gravity = new Vector3(0.0f, -0.15f, 0.0f); particleSystemSettings1.SpawningSpeed = 5f; particleSystemSettings1.RandomizeSpawnTime = true; particleSystemSettings1.ParticleLifetime = 2f; particleSystemSettings1.FadeInDuration = 0.0f; particleSystemSettings1.FadeOutDuration = 0.1f; particleSystemSettings1.SizeBirth = (VaryingVector3) new Vector3(1.0 / 16.0); particleSystemSettings1.ColorLife = (VaryingColor)(this.LevelManager.WaterType == LiquidType.Sewer ? new Color(215, 232, 148) : new Color(1f, 1f, 1f, 0.75f)); particleSystemSettings1.Texture = this.CMProvider.Global.Load <Texture2D>("Background Planes/white_square"); particleSystemSettings1.BlendingMode = BlendingMode.Alphablending; particleSystemSettings1.ClampToTrixels = true; particleSystemSettings1.Billboarding = true; particleSystemSettings1.FullBright = this.LevelManager.WaterType == LiquidType.Sewer; particleSystemSettings1.UseCallback = true; PlaneParticleSystemSettings settings = particleSystemSettings1; PlaneParticleSystem planeParticleSystem = new PlaneParticleSystem(game, maximumCount, settings); if (this.LevelManager.WaterType == LiquidType.Sewer) { planeParticleSystem.DrawOrder = 20; planeParticleSystem.Settings.StencilMask = new StencilMask?(StencilMask.Level); } this.PlaneParticleSystems.Add(planeParticleSystem); this.Waterfalls.Add(new WaterfallsHost.WaterfallState(plane, planeParticleSystem, this)); } else if (plane.ActorType == ActorType.Drips) { Vector3 vector3_1 = new Vector3(plane.Size.X, 0.0f, plane.Size.X) / 2f; Vector3 vector3_2 = Vector3.Transform(Vector3.UnitZ, plane.Rotation); Vector3 vector3_3 = FezMath.XZMask - FezMath.Abs(vector3_2); Vector3 vector3_4 = plane.Position - new Vector3(0.0f, 0.125f, 0.0f); bool flag = plane.Crosshatch || plane.Billboard; Game game = this.Game; int maximumCount = 25; PlaneParticleSystemSettings particleSystemSettings1 = new PlaneParticleSystemSettings(); particleSystemSettings1.SpawnVolume = new BoundingBox() { Min = vector3_4 - vector3_1, Max = vector3_4 + vector3_1 }; PlaneParticleSystemSettings particleSystemSettings2 = particleSystemSettings1; VaryingVector3 varyingVector3_1 = new VaryingVector3(); varyingVector3_1.Base = Vector3.Zero; varyingVector3_1.Variation = Vector3.Zero; VaryingVector3 varyingVector3_2 = varyingVector3_1; particleSystemSettings2.Velocity = varyingVector3_2; particleSystemSettings1.Gravity = new Vector3(0.0f, -0.15f, 0.0f); particleSystemSettings1.SpawningSpeed = 2f; particleSystemSettings1.RandomizeSpawnTime = true; particleSystemSettings1.ParticleLifetime = 2f; particleSystemSettings1.FadeInDuration = 0.0f; particleSystemSettings1.FadeOutDuration = 0.0f; particleSystemSettings1.SizeBirth = (VaryingVector3) new Vector3(1.0 / 16.0); particleSystemSettings1.ColorLife = (VaryingColor)(this.LevelManager.WaterType == LiquidType.Sewer ? new Color(215, 232, 148) : Color.White); particleSystemSettings1.Texture = this.CMProvider.Global.Load <Texture2D>("Background Planes/white_square"); particleSystemSettings1.BlendingMode = BlendingMode.Alphablending; particleSystemSettings1.ClampToTrixels = true; particleSystemSettings1.FullBright = true; PlaneParticleSystemSettings settings = particleSystemSettings1; PlaneParticleSystem system = new PlaneParticleSystem(game, maximumCount, settings); if (this.LevelManager.WaterType == LiquidType.Sewer) { system.DrawOrder = 20; system.Settings.StencilMask = new StencilMask?(StencilMask.Level); } if (flag) { system.Settings.Billboarding = true; system.Settings.SpawnVolume = new BoundingBox() { Min = vector3_4 - vector3_1, Max = vector3_4 + vector3_1 }; } else { system.Settings.Doublesided = plane.Doublesided; system.Settings.SpawnVolume = new BoundingBox() { Min = vector3_4 - vector3_1 * vector3_3, Max = vector3_4 + vector3_1 * vector3_3 }; system.Settings.Orientation = new FaceOrientation?(FezMath.OrientationFromDirection(vector3_2)); } this.PlaneParticleSystems.Add(system); } } }
public RainTransition(Game game, PlaneParticleSystem rainPS) : base(game) { this.RainPS = rainPS; }
private void TryInitialize() { this.RainPS = (PlaneParticleSystem)null; this.ePreThunder = (SoundEmitter)null; if (this.lightning != null) { this.lightning.Dispose(); } this.lightning = (Mesh)null; this.trileTops = (TrileInstance[])null; this.Visible = this.Enabled = this.LevelManager.Rainy; if (!this.Enabled) { return; } this.doThunder = this.LevelManager.Name != "INDUSTRIAL_CITY"; if (this.Transition == null) { Vector3 vector3 = this.RainColor.ToVector3(); PlaneParticleSystemSettings settings = new PlaneParticleSystemSettings(); settings.Velocity = (VaryingVector3) new Vector3(0.0f, -50f, 0.0f); settings.SpawningSpeed = 60f; settings.ParticleLifetime = 0.6f; settings.SpawnBatchSize = 10; PlaneParticleSystemSettings particleSystemSettings1 = settings; VaryingVector3 varyingVector3_1 = new VaryingVector3(); varyingVector3_1.Function = RainHost.RainScaling; VaryingVector3 varyingVector3_2 = varyingVector3_1; particleSystemSettings1.SizeBirth = varyingVector3_2; settings.FadeOutDuration = 0.1f; PlaneParticleSystemSettings particleSystemSettings2 = settings; VaryingColor varyingColor1 = new VaryingColor(); varyingColor1.Base = this.RainColor; varyingColor1.Variation = new Color(0, 0, 0, 24); VaryingColor varyingColor2 = varyingColor1; particleSystemSettings2.ColorLife = varyingColor2; settings.ColorDeath = (VaryingColor) new Color(vector3.X, vector3.Y, vector3.Z, 0.0f); settings.ColorBirth = (VaryingColor) new Color(vector3.X, vector3.Y, vector3.Z, 0.0f); settings.Texture = this.CMProvider.Global.Load <Texture2D>("Other Textures/rain/rain"); settings.BlendingMode = BlendingMode.Alphablending; settings.Billboarding = true; settings.NoLightDraw = true; this.PlaneSystems.Add(this.RainPS = new PlaneParticleSystem(this.Game, 500, settings)); for (int index = 0; index < 75; ++index) { this.PlaneSystems.RainSplash(Vector3.Zero).FadeOutAndDie(0.0f); } } ContentManager contentManager = this.LevelManager.Name == null ? this.CMProvider.Global : this.CMProvider.CurrentLevel; this.lightning = new Mesh() { Effect = (BaseEffect) new DefaultEffect.Textured(), Texture = (Dirtyable <Texture>)((Texture)this.CMProvider.Global.Load <Texture2D>("Other Textures/rain/lightning_a")) }; this.lightning.AddFace(Vector3.One * new Vector3(16f, 32f, 16f), Vector3.Zero, FaceOrientation.Front, true, true); if (this.lightningSounds == null) { this.lightningSounds = new SoundEffect[4] { contentManager.Load <SoundEffect>("Sounds/Graveyard/Thunder1"), contentManager.Load <SoundEffect>("Sounds/Graveyard/Thunder2"), contentManager.Load <SoundEffect>("Sounds/Graveyard/Thunder3"), contentManager.Load <SoundEffect>("Sounds/Graveyard/Thunder4") } } ; if (this.thunderDistant == null) { this.thunderDistant = new SoundEffect[3] { contentManager.Load <SoundEffect>("Sounds/Graveyard/ThunderDistant01"), contentManager.Load <SoundEffect>("Sounds/Graveyard/ThunderDistant02"), contentManager.Load <SoundEffect>("Sounds/Graveyard/ThunderDistant03") } } ; if (this.sPreThunder == null) { this.sPreThunder = contentManager.Load <SoundEffect>("Sounds/Graveyard/ThunderRumble"); } this.trileTops = Enumerable.ToArray <TrileInstance>(Enumerable.Where <TrileInstance>((IEnumerable <TrileInstance>) this.LevelManager.Triles.Values, (Func <TrileInstance, bool>)(x => { if (x.Enabled && !x.Trile.Immaterial && !ActorTypeExtensions.IsClimbable(x.Trile.ActorSettings.Type) && (x.Trile.Geometry == null || !x.Trile.Geometry.Empty || x.Trile.Faces[FaceOrientation.Front] != CollisionType.None)) { return(this.NoTop(x)); } else { return(false); } }))); this.flashIn = TimeSpan.FromSeconds((double)RandomHelper.Between(4.0, 6.0)); this.distantIn = TimeSpan.FromSeconds((double)RandomHelper.Between(3.0, 6.0)); }