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();
                }
            }
        }
Exemple #2
0
 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);
 }
Exemple #5
0
        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);
        }
Exemple #6
0
 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;
 }
Exemple #7
0
        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);
        }
Exemple #9
0
            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)));
            }
Exemple #10
0
        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
            };
        }
Exemple #11
0
 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);
         }
     }
 }
Exemple #12
0
 public RainTransition(Game game, PlaneParticleSystem rainPS)
     : base(game)
 {
     this.RainPS = rainPS;
 }
Exemple #13
0
        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));
        }