Exemple #1
0
        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;
                            }
                        }
                    }
                }
            }
        }
Exemple #2
0
        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;
        }