Game/Shop/PetVisuals.cs

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
}