Exemplo n.º 1
0
        public void Draw(IDrawing drawing, IDistortionStage stage)
        {
            if (_numActive == 0)
            {
                return;
            }

            var quadIndices = new int[] { 0, 1, 2, 2, 1, 3 };

            for (var n = 0; n < _collectionSize; n++)
            {
                if (_collection[n].Active)
                {
                    var item = _collection[n];

                    var fraction = item.TimeCount / item.Duration;
                    if (!item.CurrentCountDirectionIsForward)
                    {
                        fraction = 1.0f - fraction;
                    }

                    var halfSize  = 0.5f * Utility.Interpolator.Interpolate(item.InitSize, item.FinalSize, ref fraction);
                    var position  = Utility.Interpolator.Interpolate(item.InitPosition, item.FinalPosition, ref fraction);
                    var intensity = Utility.Interpolator.Interpolate(item.InitIntensity, item.FinalIntensity, ref fraction);
                    var rotation  = Utility.Interpolator.Interpolate(item.InitRotation, item.FinalRotation, ref fraction);

                    drawing.DrawDistortion(stage, item.CoordinateSpace,
                                           FillType.Textured,
                                           new Vertex2D[]
                    {
                        new Vertex2D {
                            Position = RotateDegressClockwise(new Vector2(-halfSize.X, halfSize.Y), rotation) + position, TexCoord0 = new Vector2(0.0f, 0.0f), TexCoord1 = new Vector2(0.0f, 0.0f), TexWeighting = 0.0f, Colour = new Colour(1.0f, 1.0f, 1.0f, 1.0f)
                        },
                        new Vertex2D {
                            Position = RotateDegressClockwise(new Vector2(halfSize.X, halfSize.Y), rotation) + position, TexCoord0 = new Vector2(1.0f, 0.0f), TexCoord1 = new Vector2(1.0f, 0.0f), TexWeighting = 1.0f, Colour = new Colour(1.0f, 1.0f, 1.0f, 1.0f)
                        },
                        new Vertex2D {
                            Position = RotateDegressClockwise(new Vector2(-halfSize.X, -halfSize.Y), rotation) + position, TexCoord0 = new Vector2(0.0f, 1.0f), TexCoord1 = new Vector2(0.0f, 1.0f), TexWeighting = 0.0f, Colour = new Colour(1.0f, 1.0f, 1.0f, 1.0f)
                        },
                        new Vertex2D {
                            Position = RotateDegressClockwise(new Vector2(halfSize.X, -halfSize.Y), rotation) + position, TexCoord0 = new Vector2(1.0f, 1.0f), TexCoord1 = new Vector2(1.0f, 1.0f), TexWeighting = 1.0f, Colour = new Colour(1.0f, 1.0f, 1.0f, 1.0f)
                        },
                    },
                                           quadIndices,
                                           Colour.White,
                                           item.Texture,
                                           null,
                                           TextureCoordinateMode.Wrap,
                                           TextureCoordinateMode.Wrap,
                                           intensity
                                           );
                }
            }
        }