2021-04-28 14:14:48 +08: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.
using System.Linq ;
using osu.Framework.Graphics ;
using osu.Framework.Testing ;
using osu.Game.Rulesets.Edit ;
using osu.Game.Screens.Edit.Compose.Components ;
namespace osu.Game.Skinning.Editor
{
2021-04-28 17:34:34 +08:00
public class SkinBlueprintContainer : BlueprintContainer < ISkinnableComponent >
2021-04-28 14:14:48 +08:00
{
private readonly Drawable target ;
public SkinBlueprintContainer ( Drawable target )
{
this . target = target ;
}
protected override void LoadComplete ( )
{
base . LoadComplete ( ) ;
2021-04-28 17:59:55 +08:00
checkForComponents ( ) ;
}
private void checkForComponents ( )
{
foreach ( var c in target . ChildrenOfType < ISkinnableComponent > ( ) . ToArray ( ) ) AddBlueprintFor ( c ) ;
2021-04-28 14:14:48 +08:00
2021-05-03 14:20:00 +08:00
// We'd hope to eventually be running this in a more sensible way, but this handles situations where new drawables become present (ie. during ongoing gameplay)
// or when drawables in the target are loaded asynchronously and may not be immediately available when this BlueprintContainer is loaded.
2021-04-28 17:59:55 +08:00
Scheduler . AddDelayed ( checkForComponents , 1000 ) ;
2021-04-28 14:14:48 +08:00
}
2021-04-28 17:34:34 +08:00
protected override SelectionHandler < ISkinnableComponent > CreateSelectionHandler ( ) = > new SkinSelectionHandler ( ) ;
2021-04-28 14:14:48 +08:00
2021-04-28 17:34:34 +08:00
protected override SelectionBlueprint < ISkinnableComponent > CreateBlueprintFor ( ISkinnableComponent component )
2021-04-28 14:14:48 +08:00
= > new SkinBlueprint ( component ) ;
}
}