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 Dictionary variants; public Graphic getGraphicVariant(int variant) { if (!variants.ContainsKey(variant)) { Log.ErrorOnce("[Anims] Error: tried to get key from variants that doesn't exist; key = " + variant, 2043428111); return null; } return variants[variant]; } public PawnRenderNode_GraphicVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree) { this.props = (PawnRenderNodeProperties_GraphicVariants)props; } protected override void EnsureMaterialsInitialized() { if (variants == null) { variants = GraphicVariantsFor(this.tree.pawn); } base.EnsureMaterialsInitialized(); } protected virtual Dictionary GraphicVariantsFor(Pawn pawn) { return GenerateVariants(pawn, props.texPathVariantsDef); } protected Dictionary GenerateVariants(Pawn pawn, TexPathVariantsDef texPathVariants) { Dictionary variantGraphics = new Dictionary(); if (texPathVariants == null) return variantGraphics; //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; } } }