private void PauseGroupOverlaps(bool force) { if (!force && this.GameState.Loading || (!FezMath.IsOrthographic(this.CameraManager.Viewpoint) || this.LevelManager.PickupGroups.Count == 0)) { return; } Vector3 b1 = FezMath.ForwardVector(this.CameraManager.Viewpoint); Vector3 b2 = FezMath.SideMask(this.CameraManager.Viewpoint); Vector3 vector3 = FezMath.ScreenSpaceMask(this.CameraManager.Viewpoint); foreach (TrileGroup trileGroup in Enumerable.Distinct <TrileGroup>((IEnumerable <TrileGroup>) this.LevelManager.PickupGroups.Values)) { float num = float.MaxValue; float?nullable = new float?(); foreach (TrileInstance trileInstance in trileGroup.Triles) { num = Math.Min(num, FezMath.Dot(trileInstance.Center, b1)); if (!trileInstance.PhysicsState.Puppet) { nullable = new float?(FezMath.Dot(trileInstance.Center, b2)); } } foreach (PickupState pickupState1 in this.PickupStates) { if (pickupState1.Group == trileGroup) { TrileInstance trileInstance = pickupState1.Instance; bool flag = !FezMath.AlmostEqual(FezMath.Dot(trileInstance.Center, b1), num); trileInstance.PhysicsState.Paused = flag; if (flag) { trileInstance.PhysicsState.Puppet = true; pickupState1.LastMovement = Vector3.Zero; } else { pickupState1.VisibleOverlapper = (PickupState)null; foreach (PickupState pickupState2 in this.PickupStates) { if (FezMath.AlmostEqual(pickupState2.Instance.Center * vector3, pickupState1.Instance.Center * vector3)) { pickupState2.VisibleOverlapper = pickupState1; } } if (nullable.HasValue && FezMath.AlmostEqual(FezMath.Dot(trileInstance.Center, b2), nullable.Value)) { trileInstance.PhysicsState.Puppet = false; } } } } } }
private void SpawnDust(TrileInstance instance, float opacity, AnimatedTexture animation, bool onRight, bool onLeft) { float num1 = (float)((double)instance.Center.Y - (double)instance.TransformedSize.Y / 2.0 * (double)Math.Sign(this.CollisionManager.GravityFactor) + (double)animation.FrameHeight / 32.0 * (double)Math.Sign(this.CollisionManager.GravityFactor)); float num2 = (float)((double)FezMath.Dot(instance.TransformedSize, FezMath.SideMask(this.CameraManager.Viewpoint)) / 2.0 + (double)animation.FrameWidth / 32.0 * 2.0 / 3.0); if (ActorTypeExtensions.IsBomb(instance.Trile.ActorSettings.Type)) { num2 -= 0.25f; } opacity = 1f; Vector3 vector3_1 = FezMath.RightVector(this.CameraManager.Viewpoint); Vector3 vector3_2 = FezMath.ForwardVector(this.CameraManager.Viewpoint); bool b = (double)this.CollisionManager.GravityFactor < 0.0; if (onRight) { BackgroundPlane backgroundPlane; this.LevelManager.AddPlane(backgroundPlane = new BackgroundPlane(this.LevelMaterializer.AnimatedPlanesMesh, animation) { OriginalRotation = Quaternion.CreateFromAxisAngle(Vector3.UnitX, (float)FezMath.AsNumeric(b) * 3.141593f), Doublesided = true, Loop = false, Opacity = opacity, Timing = { Step = 0.0f } }); backgroundPlane.Position = instance.Center * FezMath.XZMask + vector3_1 * num2 + num1 * Vector3.UnitY - vector3_2; backgroundPlane.Billboard = true; } if (!onLeft) { return; } BackgroundPlane backgroundPlane1; this.LevelManager.AddPlane(backgroundPlane1 = new BackgroundPlane(this.LevelMaterializer.AnimatedPlanesMesh, animation) { OriginalRotation = Quaternion.CreateFromAxisAngle(Vector3.Up, 3.141593f) * Quaternion.CreateFromAxisAngle(Vector3.UnitX, (float)FezMath.AsNumeric(b) * 3.141593f), Doublesided = true, Loop = false, Opacity = opacity, Timing = { Step = 0.0f } }); backgroundPlane1.Position = instance.Center * FezMath.XZMask - vector3_1 * num2 + num1 * Vector3.UnitY - vector3_2; backgroundPlane1.Billboard = true; }