Utility class that maps pet levels and state to UI image paths. It returns the default image, reaction sprite arrays, and evolution image paths based on level, an unlockShown flag, a frame toggle, and an optional reaction override.
using Sandbox;
using System;
public static class PetVisuals
{
public static string GetImagePath(int level, bool unlockShown, bool catFrameToggle, string reactionOverride = null)
{
if (!unlockShown) return null;
if (level >= 2 && !string.IsNullOrEmpty(reactionOverride))
return reactionOverride;
return level switch
{
1 => "ui/icons/egg/egg_1.png",
2 => catFrameToggle ? "ui/icons/cat/Cat_Normal_Pose2.png" : "ui/icons/cat/Cat_Normal_Pose1.png",
3 => catFrameToggle ? "ui/icons/wolf/Wolf_Normal_Pos2.png" : "ui/icons/wolf/Wolf_Normal_Pos1.png",
4 => catFrameToggle ? "ui/icons/tiger/Tiger_NormalPose_2.png" : "ui/icons/tiger/Tiger_NormalPose_1.png",
5 => catFrameToggle ? "ui/icons/babydrake/Baby_Drake_Normal_2.png" : "ui/icons/babydrake/Baby_Drake_Normal_1.png",
6 => catFrameToggle ? "ui/icons/dragon/Dragon_NormalPose_2.png" : "ui/icons/dragon/Dragon_NormalPose_1.png",
_ => null
};
}
public static string[] GetReactionSprites(int level) => level switch
{
2 => new[] { "ui/icons/cat/Cat_Shocked_Pose1.png", "ui/icons/cat/Cat_Shocked_Pose2.png" },
3 => new[] { "ui/icons/wolf/Wolf_Shocked_Pos1.png", "ui/icons/wolf/Wolf_Shocked_Pos2.png" },
4 => new[] { "ui/icons/tiger/Tiger_Shocked_Pos1.png", "ui/icons/tiger/Tiger_Shocked_Pos2.png" },
5 => new[] { "ui/icons/babydrake/Baby_Drake_Shocked_Pos1.png", "ui/icons/babydrake/Baby_Drake_Shocked_Pos2.png" },
6 => new[] { "ui/icons/dragon/Dragon_NormalPose_1.png", "ui/icons/dragon/Dragon_NormalPose_2.png" },
_ => Array.Empty<string>()
};
public static string GetEvolutionImage(int level, bool catFrameToggle) =>
GetImagePath(level, true, catFrameToggle); // reuse same table, unlockShown forced true since evo cinematic always shows the pet
}