Beispiel #1
0
 protected override void TestConditions()
 {
     switch (this.PlayerManager.Action)
     {
     case ActionType.Jumping:
     case ActionType.Falling:
         if (!FezButtonStateExtensions.IsDown(this.InputManager.Up))
         {
             break;
         }
         FaceOrientation face           = FezMath.VisibleOrientation(this.CameraManager.Viewpoint);
         TrileInstance   trileInstance1 = this.PlayerManager.AxisCollision[VerticalDirection.Up].Deep;
         TrileInstance   trileInstance2 = this.PlayerManager.AxisCollision[VerticalDirection.Down].Deep;
         if (trileInstance1 != null && trileInstance1.GetRotatedFace(face) == CollisionType.AllSides || (trileInstance2 == null || trileInstance2.GetRotatedFace(face) != CollisionType.TopOnly) || BoxCollisionResultExtensions.AnyHit(this.CollisionManager.CollideEdge(trileInstance2.Center, Vector3.Down * (float)Math.Sign(this.CollisionManager.GravityFactor), this.PlayerManager.Size * FezMath.XZMask / 2f, Direction2D.Vertical)))
         {
             break;
         }
         TrileInstance trileInstance3 = this.PlayerManager.AxisCollision[VerticalDirection.Down].Surface;
         if (trileInstance3 != null && ActorTypeExtensions.IsClimbable(trileInstance3.Trile.ActorSettings.Type) || !trileInstance2.Enabled || this.PlayerManager.Action == ActionType.Jumping && (double)((trileInstance2.Center - this.PlayerManager.LeaveGroundPosition) * FezMath.ScreenSpaceMask(this.CameraManager.Viewpoint)).Length() < 1.25)
         {
             break;
         }
         this.PlayerManager.Action = ActionType.GrabLedgeBack;
         Vector3 vector3_1 = FezMath.DepthMask(this.CameraManager.Viewpoint);
         Vector3 vector3_2 = FezMath.SideMask(this.CameraManager.Viewpoint);
         Vector3 vector3_3 = FezMath.ForwardVector(this.CameraManager.Viewpoint);
         this.PlayerManager.HeldInstance = trileInstance2;
         IPlayerManager playerManager = this.PlayerManager;
         Vector3        vector3_4     = playerManager.Velocity * vector3_2 * 0.5f;
         playerManager.Velocity      = vector3_4;
         this.PlayerManager.Position = this.PlayerManager.Position * vector3_2 + trileInstance2.Center * (Vector3.UnitY + vector3_1) + vector3_3 * -(this.PlayerManager.HeldInstance.TransformedSize / 2f + this.PlayerManager.Size.X * vector3_1 / 4f) + this.PlayerManager.HeldInstance.Trile.Size.Y / 2f * Vector3.UnitY * (float)Math.Sign(this.CollisionManager.GravityFactor);
         Waiters.Wait(0.1, (Action)(() =>
         {
             SoundEffectExtensions.EmitAt(this.sound, this.PlayerManager.Position);
             this.PlayerManager.Velocity = Vector3.Zero;
         }));
         break;
     }
 }
Beispiel #2
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));
        }