// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using osu.Framework.Extensions; using osu.Game.Rulesets; namespace osu.Game.Skinning { /// /// Represents a lookup of a collection of elements that make up a particular skinnable of the game. /// public class GlobalSkinnableContainerLookup : ISkinComponentLookup, IEquatable { /// /// The target area / layer of the game for which skin components will be returned. /// public readonly GlobalSkinnableContainers Lookup; /// /// The ruleset for which skin components should be returned. /// A value means that returned components are global and should be applied for all rulesets. /// public readonly RulesetInfo? Ruleset; public GlobalSkinnableContainerLookup(GlobalSkinnableContainers lookup, RulesetInfo? ruleset = null) { Lookup = lookup; Ruleset = ruleset; } public override string ToString() { if (Ruleset == null) return Lookup.GetDescription(); return $"{Lookup.GetDescription()} (\"{Ruleset.Name}\" only)"; } public bool Equals(GlobalSkinnableContainerLookup? other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Lookup == other.Lookup && (ReferenceEquals(Ruleset, other.Ruleset) || Ruleset?.Equals(other.Ruleset) == true); } public override bool Equals(object? obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != GetType()) return false; return Equals((GlobalSkinnableContainerLookup)obj); } public override int GetHashCode() { return HashCode.Combine((int)Lookup, Ruleset); } } }