using UnityEngine; namespace IdleSpectator; /// /// Loads WorldBox ui/Icons sprites for HUD chrome. /// public static class HudIcons { public static Sprite FromUiIcon(string iconName) { if (string.IsNullOrEmpty(iconName)) { return null; } try { Sprite sprite = SpriteTextureLoader.getSprite("ui/Icons/" + iconName); if (sprite != null) { return sprite; } // Some paths are lower-case in older content. return SpriteTextureLoader.getSprite("ui/icons/" + iconName); } catch { return null; } } public static Sprite FromAsset(ActorAsset asset) { if (asset == null) { return FromUiIcon("iconQuestionMark"); } try { Sprite sprite = asset.getSpriteIcon(); if (sprite != null) { return sprite; } } catch { // fall through } try { if (!string.IsNullOrEmpty(asset.icon)) { return FromUiIcon(asset.icon); } } catch { // ignore } return FromUiIcon("iconQuestionMark"); } public static Sprite FromActor(Actor actor) { if (actor == null) { return FromUiIcon("iconQuestionMark"); } return FromAsset(actor.asset); } public static Sprite FromSpeciesId(string speciesId) { if (string.IsNullOrEmpty(speciesId)) { return FromUiIcon("iconQuestionMark"); } try { ActorAsset asset = AssetManager.actor_library?.get(speciesId); if (asset != null) { return FromAsset(asset); } } catch { // fall through } return FromUiIcon("iconQuestionMark"); } /// /// Live unit sprite as shown in inspect UI (phenotype/kingdom tint), not the species icon. /// public static Sprite FromActorLive(Actor actor) { if (actor == null || !actor.isAlive()) { return null; } try { Sprite main = actor.calculateMainSprite(); if (main == null) { return FromActor(actor); } Sprite ui = DynamicActorSpriteCreatorUI.getUnitSpriteForUI(actor, main); if (ui != null) { return ui; } if (actor.hasColoredSprite()) { Sprite colored = actor.calculateColoredSprite(main); if (colored != null) { return colored; } } return main; } catch { return FromActor(actor); } } public static Sprite ForChronicleKind(ChronicleKind kind) { switch (kind) { case ChronicleKind.Death: return FromUiIcon("iconDead") ?? FromUiIcon("iconSkulls"); case ChronicleKind.Kill: return FromUiIcon("iconKills") ?? FromUiIcon("iconAttack"); case ChronicleKind.Lover: return FromUiIcon("iconArrowLover"); case ChronicleKind.Friend: return FromUiIcon("iconFavoriteStar"); case ChronicleKind.World: return FromUiIcon("iconWar") ?? FromUiIcon("iconBooks"); case ChronicleKind.AgeChapter: return FromUiIcon("iconAge") ?? FromUiIcon("iconClock"); default: return FromUiIcon("iconClock"); } } public static Sprite ForDeathManner(DeathManner manner) { switch (manner) { case DeathManner.Slain: return FromUiIcon("iconKills") ?? FromUiIcon("iconAttack") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.OldAge: return FromUiIcon("iconAge") ?? FromUiIcon("iconClock") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.Starvation: return FromUiIcon("iconHunger") ?? FromUiIcon("iconFood") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.Drowned: return FromUiIcon("iconRain") ?? FromUiIcon("iconWater") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.Burned: return FromUiIcon("iconFire") ?? FromUiIcon("iconLava") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.Plague: return FromUiIcon("iconPlague") ?? FromUiIcon("iconDisease") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.Divine: return FromUiIcon("iconDivineLight") ?? FromUiIcon("iconGodFinger") ?? ForChronicleKind(ChronicleKind.Death); case DeathManner.Accident: return FromUiIcon("iconBomb") ?? FromUiIcon("iconExplosion") ?? ForChronicleKind(ChronicleKind.Death); default: return ForChronicleKind(ChronicleKind.Death); } } public static Sprite Favorite() => FromUiIcon("iconFavorite") ?? FromUiIcon("iconFavoriteStar") ?? FromUiIcon("iconStar"); public static Sprite ExpandHistory() => FromUiIcon("iconBooks") ?? FromUiIcon("iconList") ?? FromUiIcon("iconClock"); public static Sprite Age() => FromUiIcon("iconAge"); public static Sprite Level() => FromUiIcon("iconLevels"); public static Sprite Kills() => FromUiIcon("iconKills") ?? FromUiIcon("iconAttack"); public static Sprite Task() => FromUiIcon("iconShowTasks") ?? FromUiIcon("iconWalker"); public static Sprite SexMale() => FromUiIcon("IconMale"); public static Sprite SexFemale() => FromUiIcon("IconFemale"); public static Sprite FromTrait(ActorTrait trait) { if (trait == null) { return null; } try { Sprite sprite = trait.getSprite(); if (sprite != null) { return sprite; } } catch { // fall through } try { if (!string.IsNullOrEmpty(trait.path_icon)) { return SpriteTextureLoader.getSprite(trait.path_icon); } } catch { // ignore } return null; } public static void Apply(UnityEngine.UI.Image image, Sprite sprite, bool preserveAspect = true) { if (image == null) { return; } image.sprite = sprite; image.enabled = sprite != null; image.preserveAspect = preserveAspect; image.color = Color.white; } }