2023-02-16 10:58:04 +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 ;
using System.Collections.Generic ;
using System.Diagnostics.CodeAnalysis ;
2023-02-17 07:22:41 +00:00
using System.Linq ;
2023-02-16 10:58:04 +00:00
using Newtonsoft.Json ;
using osu.Game.Rulesets ;
namespace osu.Game.Skinning
{
/// <summary>
/// A serialisable model describing layout of a <see cref="SkinComponentsContainer"/>.
/// May contain multiple configurations for different rulesets, each of which should manifest their own <see cref="SkinComponentsContainer"/> as required.
/// </summary>
[Serializable]
public class SkinLayoutInfo
{
2023-02-20 10:48:39 +00:00
private const string global_identifier = @"global" ;
2023-02-16 10:58:04 +00:00
2023-02-20 19:33:54 +00:00
[JsonIgnore]
2023-02-17 07:22:41 +00:00
public IEnumerable < SerialisedDrawableInfo > AllDrawables = > DrawableInfo . Values . SelectMany ( v = > v ) ;
2023-02-16 10:58:04 +00:00
[JsonProperty]
public Dictionary < string , SerialisedDrawableInfo [ ] > DrawableInfo { get ; set ; } = new Dictionary < string , SerialisedDrawableInfo [ ] > ( ) ;
2023-02-17 06:00:57 +00:00
public bool TryGetDrawableInfo ( RulesetInfo ? ruleset , [ NotNullWhen ( true ) ] out SerialisedDrawableInfo [ ] ? components ) = >
2023-02-16 10:58:04 +00:00
DrawableInfo . TryGetValue ( ruleset ? . ShortName ? ? global_identifier , out components ) ;
2023-02-17 06:00:57 +00:00
public void Reset ( RulesetInfo ? ruleset ) = >
2023-02-16 10:58:04 +00:00
DrawableInfo . Remove ( ruleset ? . ShortName ? ? global_identifier ) ;
2023-02-17 06:00:57 +00:00
public void Update ( RulesetInfo ? ruleset , SerialisedDrawableInfo [ ] components ) = >
2023-02-16 10:58:04 +00:00
DrawableInfo [ ruleset ? . ShortName ? ? global_identifier ] = components ;
}
}