protected override void LoadComplete()
        {
            base.LoadComplete();
            proxiedHitCircleOverlay = HitCircleOverlay.CreateProxy();

            if (drawableHitObject != null)
            {
                drawableHitObject.HitObjectApplied += onHitObjectApplied;
                onHitObjectApplied(drawableHitObject);
            }
        }
        private void updateStateTransforms(DrawableHitObject drawableHitObject, ArmedState state)
        {
            const double legacy_fade_duration = 240;

            using (BeginAbsoluteSequence(drawableObject.HitStateUpdateTime))
            {
                switch (state)
                {
                case ArmedState.Hit:
                    hitCircleSprite.FadeOut(legacy_fade_duration, Easing.Out);
                    hitCircleSprite.ScaleTo(1.4f, legacy_fade_duration, Easing.Out);

                    HitCircleOverlay.FadeOut(legacy_fade_duration, Easing.Out);
                    HitCircleOverlay.ScaleTo(1.4f, legacy_fade_duration, Easing.Out);

                    if (hasNumber)
                    {
                        var legacyVersion = skin.GetConfig <LegacySetting, decimal>(LegacySetting.Version)?.Value;

                        if (legacyVersion >= 2.0m)
                        {
                            // legacy skins of version 2.0 and newer only apply very short fade out to the number piece.
                            hitCircleText.FadeOut(legacy_fade_duration / 4, Easing.Out);
                        }
                        else
                        {
                            // old skins scale and fade it normally along other pieces.
                            hitCircleText.FadeOut(legacy_fade_duration, Easing.Out);
                            hitCircleText.ScaleTo(1.4f, legacy_fade_duration, Easing.Out);
                        }
                    }

                    break;
                }
            }
        }