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 ); } } }