2019-01-24 17:43:03 +09:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2018-10-03 15:36:14 +09:00
2018-10-18 16:36:06 +09:00
using System.Linq ;
2019-08-15 18:25:31 +09:00
using osu.Framework.Allocation ;
2018-10-03 15:36:14 +09:00
using osu.Framework.Graphics ;
using osu.Framework.Graphics.Containers ;
using osu.Game.Rulesets.Objects ;
using osu.Game.Rulesets.UI ;
2019-08-29 16:06:40 +09:00
using osu.Game.Screens.Edit ;
2018-10-03 15:36:14 +09:00
namespace osu.Game.Rulesets.Edit
{
2019-08-29 18:20:43 +09:00
/// <summary>
/// A wrapper for a <see cref="DrawableRuleset{TObject}"/>. Handles adding visual representations of <see cref="HitObject"/>s to the underlying <see cref="DrawableRuleset{TObject}"/>.
/// </summary>
internal class DrawableEditRulesetWrapper < TObject > : CompositeDrawable
2018-10-03 15:36:14 +09:00
where TObject : HitObject
{
2019-08-29 18:12:29 +09:00
public Playfield Playfield = > drawableRuleset . Playfield ;
2019-03-31 01:29:37 +09:00
2019-03-20 11:22:34 +09:00
private readonly DrawableRuleset < TObject > drawableRuleset ;
2018-10-17 18:01:38 +09:00
2019-08-29 16:06:40 +09:00
[Resolved]
2019-08-29 16:26:39 +09:00
private IEditorBeatmap < TObject > beatmap { get ; set ; }
2019-08-29 16:06:40 +09:00
2019-08-29 18:20:43 +09:00
public DrawableEditRulesetWrapper ( DrawableRuleset < TObject > drawableRuleset )
2018-10-03 15:36:14 +09:00
{
2019-03-20 11:22:34 +09:00
this . drawableRuleset = drawableRuleset ;
2018-10-17 18:01:38 +09:00
2019-08-29 18:12:29 +09:00
RelativeSizeAxes = Axes . Both ;
2019-03-20 11:22:34 +09:00
InternalChild = drawableRuleset ;
2019-08-15 18:25:31 +09:00
}
2018-10-03 15:36:14 +09:00
2019-08-15 18:25:31 +09:00
[BackgroundDependencyLoader]
private void load ( )
{
drawableRuleset . FrameStablePlayback = false ;
2018-10-17 18:01:38 +09:00
Playfield . DisplayJudgements . Value = false ;
2018-10-03 15:36:14 +09:00
}
2019-08-29 16:06:40 +09:00
protected override void LoadComplete ( )
2018-10-03 15:36:14 +09:00
{
2019-08-29 16:06:40 +09:00
base . LoadComplete ( ) ;
2018-10-03 15:36:14 +09:00
2019-08-29 16:06:40 +09:00
beatmap . HitObjectAdded + = addHitObject ;
beatmap . HitObjectRemoved + = removeHitObject ;
}
2018-10-03 15:36:14 +09:00
2019-08-29 16:06:40 +09:00
private void addHitObject ( HitObject hitObject )
{
var drawableObject = drawableRuleset . CreateDrawableRepresentation ( ( TObject ) hitObject ) ;
2018-10-03 16:49:59 +09:00
2019-03-20 11:22:34 +09:00
drawableRuleset . Playfield . Add ( drawableObject ) ;
drawableRuleset . Playfield . PostProcess ( ) ;
2018-10-03 15:36:14 +09:00
}
2018-10-18 16:36:06 +09:00
2019-08-29 16:06:40 +09:00
private void removeHitObject ( HitObject hitObject )
2018-10-18 16:36:06 +09:00
{
var drawableObject = Playfield . AllHitObjects . Single ( d = > d . HitObject = = hitObject ) ;
2019-03-20 11:22:34 +09:00
drawableRuleset . Playfield . Remove ( drawableObject ) ;
drawableRuleset . Playfield . PostProcess ( ) ;
2018-10-18 16:36:06 +09:00
}
2019-08-29 16:31:40 +09:00
2019-08-29 18:12:29 +09:00
public PlayfieldAdjustmentContainer CreatePlayfieldAdjustmentContainer ( ) = > drawableRuleset . CreatePlayfieldAdjustmentContainer ( ) ;
2019-08-29 16:31:40 +09:00
protected override void Dispose ( bool isDisposing )
{
base . Dispose ( isDisposing ) ;
if ( beatmap ! = null )
{
beatmap . HitObjectAdded - = addHitObject ;
beatmap . HitObjectRemoved - = removeHitObject ;
}
}
2018-10-03 15:36:14 +09:00
}
}