using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using Verse; namespace Rimworld_Animations { public class PawnRenderNode_GraphicVariants : PawnRenderNode { protected new PawnRenderNodeProperties_GraphicVariants props; protected Graphic missingTextureGraphic; protected Dictionary variants; public Graphic getGraphicVariant(int variant) { if (variants == null || !variants.ContainsKey(variant)) { return missingTextureGraphic; } return variants[variant]; } public PawnRenderNode_GraphicVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree) { this.props = (PawnRenderNodeProperties_GraphicVariants)props; } protected virtual Dictionary GraphicVariantsFor(Pawn pawn) { if (props.texPathVariantsDef == null) { return null; } return GenerateVariants(pawn, props.texPathVariantsDef); } protected override void EnsureMaterialsInitialized() { if (variants == null) { variants = GraphicVariantsFor(this.tree.pawn); } if (missingTextureGraphic == null) { missingTextureGraphic = GenerateMissingTextureGraphic(); } base.EnsureMaterialsInitialized(); } //used by all, including base classes, to create texPathVariants for pawn protected Dictionary GenerateVariants(Pawn pawn, TexPathVariantsDef texPathVariants) { Dictionary variantGraphics = new Dictionary(); //for each graphic variant for (int i = 0; i < texPathVariants.variants.Count; i++) { //get new graphic Graphic variant = GraphicDatabase.Get(texPathVariants.variants[i], this.ShaderFor(pawn), Vector2.one, this.ColorFor(pawn)); //add it to the variants dictionary; i + 1 for easier readability in logs variantGraphics.Add(i + 1, variant); } return variantGraphics; } protected Graphic GenerateMissingTextureGraphic() { return GraphicDatabase.Get("AnimationProps/MissingTexture"); } } }