Artemis.Engine.Graphics.ResolutionRelativeRenderLayer.RecalculateTargetTransform C# (CSharp) Method

RecalculateTargetTransform() protected method

Recalculate the TargetToScreenTransform matrix (required when resolution changes).
protected RecalculateTargetTransform ( ) : void
return void
        protected internal override void RecalculateTargetTransform()
        {
            if (LayerScaleType == GlobalLayerScaleType.Dynamic)
            {
                TargetToScreenTransform = Matrix.Identity;
            }
            else if (ArtemisEngine.DisplayManager.IsBaseResolution)
            {
                TargetToScreenTransform = Matrix.Identity;
            }
            else
            {
                var baseRes = GameConstants.BaseResolution;
                var scale = ArtemisEngine.DisplayManager.ResolutionScale;

                Matrix transform;
                switch (UniformScaleType)
                {
                    case UniformLayerScaleType.Stretch:
                        transform = Matrix.CreateScale(scale.X, scale.Y, 1);
                        break;
                    case UniformLayerScaleType.Fit:
                        if (scale.X == scale.Y)
                            transform = Matrix.CreateScale(scale.X, scale.X, 1);
                        else if (scale.X > scale.Y)
                            transform = Matrix.CreateScale(scale.Y, scale.Y, 1) *
                                        Matrix.CreateTranslation(baseRes.Width * (1 - scale.X) / 2f, 0, 0);
                        transform = Matrix.CreateScale(scale.X, scale.X, 1) *
                                    Matrix.CreateTranslation(0, baseRes.Height * (1 - scale.Y) / 2f, 0);
                        break;
                    case UniformLayerScaleType.Fill:
                        if (scale.X == scale.Y)
                            transform = Matrix.CreateScale(scale.X, scale.X, 1);
                        else if (scale.X > scale.Y)
                            transform = Matrix.CreateScale(scale.X, scale.X, 1) *
                                        Matrix.CreateTranslation(0, baseRes.Height / 2f * (scale.Y - scale.X), 0);
                        transform = Matrix.CreateScale(scale.Y, scale.Y, 1) *
                                    Matrix.CreateTranslation(baseRes.Width / 2f * (scale.X - scale.Y), 0, 0);
                        break;
                    default:
                        throw new RenderLayerException(
                            String.Format(
                                "Invalid UniformLayerScaleType value '{0}' supplied.", UniformScaleType));
                }
                TargetToScreenTransform = transform;
            }
            RequiresTargetTransformRecalc = false;
        }