// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using osu.Framework.Configuration; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Rulesets.Objects.Drawables { /// /// A basic class that overrides and implements . /// public abstract class DrawableScrollingHitObject : DrawableHitObject, IScrollingHitObject where TObject : HitObject where TJudgement : Judgement { public BindableDouble LifetimeOffset { get; } = new BindableDouble(); protected DrawableScrollingHitObject(TObject hitObject) : base(hitObject) { } private double? lifetimeStart; public override double LifetimeStart { get { return lifetimeStart ?? HitObject.StartTime - LifetimeOffset; } set { lifetimeStart = value; } } private double? lifetimeEnd; public override double LifetimeEnd { get { var endTime = (HitObject as IHasEndTime)?.EndTime ?? HitObject.StartTime; return lifetimeEnd ?? endTime + LifetimeOffset; } set { lifetimeEnd = value; } } protected override void AddNested(DrawableHitObject h) { var scrollingHitObject = h as IScrollingHitObject; scrollingHitObject?.LifetimeOffset.BindTo(LifetimeOffset); base.AddNested(h); } } }