// 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 Component; /// /// 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 component, RulesetInfo? ruleset = null) { Component = component; Ruleset = ruleset; } public override string ToString() { if (Ruleset == null) return Component.GetDescription(); return $"{Component.GetDescription()} (\"{Ruleset.Name}\" only)"; } public bool Equals(GlobalSkinnableContainerLookup? other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Component == other.Component && (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)Component, Ruleset); } } }