2021-04-28 06:14:48 +00: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 09:34:34 +00:00
public class SkinBlueprintContainer : BlueprintContainer < ISkinnableComponent >
2021-04-28 06:14:48 +00:00
{
private readonly Drawable target ;
public SkinBlueprintContainer ( Drawable target )
{
this . target = target ;
}
protected override void LoadComplete ( )
{
base . LoadComplete ( ) ;
2021-04-28 09:59:55 +00:00
checkForComponents ( ) ;
}
private void checkForComponents ( )
{
2021-05-06 06:16:16 +00:00
ISkinnableComponent [ ] skinnableComponents = target . ChildrenOfType < ISkinnableComponent > ( ) . ToArray ( ) ;
foreach ( var c in skinnableComponents )
AddBlueprintFor ( c ) ;
2021-04-28 06:14:48 +00:00
2021-05-03 06:20:00 +00: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 09:59:55 +00:00
Scheduler . AddDelayed ( checkForComponents , 1000 ) ;
2021-04-28 06:14:48 +00:00
}
2021-04-28 09:34:34 +00:00
protected override SelectionHandler < ISkinnableComponent > CreateSelectionHandler ( ) = > new SkinSelectionHandler ( ) ;
2021-04-28 06:14:48 +00:00
2021-04-28 09:34:34 +00:00
protected override SelectionBlueprint < ISkinnableComponent > CreateBlueprintFor ( ISkinnableComponent component )
2021-04-28 06:14:48 +00:00
= > new SkinBlueprint ( component ) ;
}
}