254 lines
6.8 KiB
C#
254 lines
6.8 KiB
C#
using UnityEngine;
|
|
|
|
namespace IdleSpectator;
|
|
|
|
/// <summary>
|
|
/// Loads WorldBox ui/Icons sprites for HUD chrome.
|
|
/// </summary>
|
|
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");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Live unit sprite as shown in inspect UI (phenotype/kingdom tint), not the species icon.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|