public void FadeColour(SRGBColour newColour, int duration = 0, EasingTypes easing = EasingTypes.None)
        {
            UpdateTransformsOfType(typeof(TransformColour));

            Color4 startValue = Colour.Linear;

            if (transformationDelay == 0)
            {
                Transforms.RemoveAll(t => t is TransformColour);

                if (startValue == newColour)
                {
                    return;
                }
            }
            else
            {
                startValue = (Transforms.FindLast(t => t is TransformColour) as TransformColour)?.EndValue ?? startValue;
            }

            double startTime = Clock != null ? Time.Current + transformationDelay : 0;

            TransformColour transform = new TransformColour
            {
                StartTime  = startTime,
                EndTime    = startTime + duration,
                StartValue = startValue,
                EndValue   = newColour.Linear,
                Easing     = easing
            };

            if (Clock == null)
            {
                transform.UpdateTime(new FrameTimeInfo {
                    Current = transform.EndTime
                });
                transform.Apply(this);
            }
            else if (duration == 0 && transformationDelay == 0)
            {
                transform.UpdateTime(Time);
                transform.Apply(this);
            }
            else
            {
                Transforms.Add(transform);
            }
        }
        public void FlashColour(SRGBColour flashColour, int duration, EasingTypes easing = EasingTypes.None)
        {
            Debug.Assert(transformationDelay == 0, @"FlashColour doesn't support Delay() currently");

            Color4 startValue = (Transforms.FindLast(t => t is TransformColour) as TransformColour)?.EndValue ?? Colour.Linear;

            Transforms.RemoveAll(t => t is TransformColour);

            double startTime = Clock != null ? (Time.Current + transformationDelay) : 0;

            TransformColour transform = new TransformColour
            {
                StartTime  = startTime,
                EndTime    = startTime + duration,
                StartValue = flashColour.Linear,
                EndValue   = startValue,
                Easing     = easing
            };

            if (Clock == null)
            {
                transform.UpdateTime(new FrameTimeInfo {
                    Current = transform.EndTime
                });
                transform.Apply(this);
            }
            else if (duration == 0 && transformationDelay == 0)
            {
                transform.UpdateTime(Time);
                transform.Apply(this);
            }
            else
            {
                Transforms.Add(transform);
            }
        }