コード例 #1
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);
         }
     }
 }
コード例 #2
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
            };
        }
コード例 #3
0
ファイル: RainHost.cs プロジェクト: conankzhang/fez
        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));
        }