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; } }
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)); }