using System; using UnityEngine; namespace Jovian.PopupSystem { /// /// Value type identifying a popup channel. Each category gets its own popup view instance. /// Compared by string ID using ordinal comparison. Define custom categories as static fields. /// [Serializable] public struct PopupCategory : IEquatable { [SerializeField] string id; public string Id => id; public PopupCategory(string id) { this.id = id; } public static readonly PopupCategory Character = new("Character"); public static readonly PopupCategory Item = new("Item"); public static readonly PopupCategory Skill = new("Skill"); public static readonly PopupCategory General = new("General"); public bool Equals(PopupCategory other) { return string.Equals(id, other.id, StringComparison.Ordinal); } public override bool Equals(object obj) { return obj is PopupCategory other && Equals(other); } public override int GetHashCode() { return id != null ? id.GetHashCode() : 0; } public override string ToString() { return id ?? string.Empty; } public static bool operator ==(PopupCategory left, PopupCategory right) { return left.Equals(right); } public static bool operator !=(PopupCategory left, PopupCategory right) { return !left.Equals(right); } } }