Artemis.Engine.Graphics.ResolutionRelativeRenderLayer.ProcessDynamicallyScaledRenderable C# (CSharp) Метод

ProcessDynamicallyScaledRenderable() защищенный Метод

Process a RenderableObject when the GlobalLayerScaleType is set to Dynamic.
protected ProcessDynamicallyScaledRenderable ( RenderableObject obj, bool isBaseRes, Resolution crntRes, Vector2 resScale ) : void
obj RenderableObject
isBaseRes bool
crntRes Resolution
resScale Vector2
Результат void
        protected void ProcessDynamicallyScaledRenderable(
            RenderableObject obj, bool isBaseRes, Resolution crntRes, Vector2 resScale)
        {
            var maintainAspectRatio = obj.MaintainAspectRatio;
            var scaleType = obj.ScaleType;

            Vector2 scale;
            if (!isBaseRes)
            {
                switch (scaleType)
                {
                    case ResolutionScaleType.Min:
                        var min = MathHelper.Min(resScale.X, resScale.Y);
                        if (maintainAspectRatio)
                            scale = new Vector2(min, min);
                        else if (min == resScale.X)
                            scale = new Vector2(min, 1f);
                        else
                            scale = new Vector2(1f, min);
                        break;
                    case ResolutionScaleType.Max:
                        var max = MathHelper.Max(resScale.X, resScale.Y);
                        if (maintainAspectRatio)
                            scale = new Vector2(max, max);
                        else if (max == resScale.X)
                            scale = new Vector2(max, 1f);
                        else
                            scale = new Vector2(1f, max);
                        break;
                    case ResolutionScaleType.Width:
                        if (maintainAspectRatio)
                            scale = new Vector2(resScale.X, resScale.X);
                        else
                            scale = new Vector2(resScale.X, 1f);
                        break;
                    case ResolutionScaleType.Height:
                        if (maintainAspectRatio)
                            scale = new Vector2(resScale.Y, resScale.Y);
                        else
                            scale = new Vector2(1f, resScale.Y);
                        break;
                    case ResolutionScaleType.WithRes:
                        /*
                        if (maintainAspectRatio && resScale.X != resScale.Y)
                            // throw an error or log a warning or something...
                         */
                        scale = new Vector2(resScale.X, resScale.Y);
                        break;
                    default:
                        throw new RenderLayerException(
                            String.Format(
                                "Unknown ResolutionScaleType '{0}' received on object '{1}'.", scaleType, obj));
                }
            }
            else
            {
                scale = Vector2.One;
            }

            bool hasOriginalScale = obj.SpriteProperties.Scale.HasValue;
            Vector2 originalScale = hasOriginalScale ? obj.SpriteProperties.Scale.Value : Vector2.One;

            var resultingScale = VectorUtils.ComponentwiseProduct(originalScale, scale);

            // Swap out the original scale for the newly calculated scale.
            obj.SpriteProperties.Scale = resultingScale;

            obj.InternalRender(SeenRenderables);

            obj.SpriteProperties.Scale = hasOriginalScale ? (Vector2?)originalScale : null;
        }