Fixing texture path issues

This commit is contained in:
c0ffee 2024-04-25 11:58:34 -07:00
parent 3cc7985515
commit bbc5effe88
5 changed files with 34 additions and 22 deletions

View File

@ -41,7 +41,9 @@ namespace Rimworld_Animations
} }
} }
/*
* no longer needed; taken care of by graphic variants
*
// For changing texture path of thing to variant // For changing texture path of thing to variant
[HarmonyPatch(typeof(PawnRenderNode), "TexPathFor")] [HarmonyPatch(typeof(PawnRenderNode), "TexPathFor")]
public static class HarmonyPatch_PawnRenderNode2 public static class HarmonyPatch_PawnRenderNode2
@ -54,4 +56,6 @@ namespace Rimworld_Animations
} }
} }
} }
*/
} }

View File

@ -11,6 +11,7 @@ namespace Rimworld_Animations
public class PawnRenderNode_BodyTypeVariants : PawnRenderNode_GraphicVariants public class PawnRenderNode_BodyTypeVariants : PawnRenderNode_GraphicVariants
{ {
private BodyTypeDef bodyType;
protected new PawnRenderNodeProperties_BodyTypeVariants props; protected new PawnRenderNodeProperties_BodyTypeVariants props;
public PawnRenderNode_BodyTypeVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree) public PawnRenderNode_BodyTypeVariants(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree)
@ -25,30 +26,35 @@ namespace Rimworld_Animations
if (props.bodyTypeVariantsDef == null) if (props.bodyTypeVariantsDef == null)
{ {
Log.ErrorOnce("[Anims] Error: Tried to use BodyTypeVariants node, but bodyTypeVariants weren't given", 211341349); Log.Error("[Anims] Error: Tried to use BodyTypeVariants node, but bodyTypeVariants weren't given");
return null; return null;
} }
//for each different hediff-based texpathvariants, //for each different hediff-based texpathvariants,
foreach (TexPathVariants_BodyType texPathVariant_BodyType in props.bodyTypeVariantsDef) foreach (TexPathVariants_BodyType texPathVariant_BodyType in props.bodyTypeVariantsDef)
{ {
if (pawn.story.bodyType == texPathVariant_BodyType.bodyType) if (pawn.story?.bodyType == texPathVariant_BodyType.bodyType)
{ {
//return that specific variant //return that specific variant
bodyType = texPathVariant_BodyType.bodyType;
return GenerateVariants(pawn, texPathVariant_BodyType.texPathVariantsDef); return GenerateVariants(pawn, texPathVariant_BodyType.texPathVariantsDef);
} }
} }
//otherwise just use default return null;
return base.GraphicVariantsFor(pawn);
} }
protected override void EnsureMaterialsInitialized() protected override void EnsureMaterialsInitialized()
{ {
if (variants == null
|| this.tree.pawn.story?.bodyType != bodyType)
variants = GraphicVariantsFor(this.tree.pawn); variants = GraphicVariantsFor(this.tree.pawn);
//call this in case variants wasn't set, and there is no graphic bodytype variants appropriate; it'll set variants based on default
base.EnsureMaterialsInitialized();
} }

View File

@ -25,7 +25,7 @@ namespace Rimworld_Animations
if (props.hediffVariants == null) if (props.hediffVariants == null)
{ {
Log.ErrorOnce("[Anims] Error: Tried to use GraphicHediffVariants node, but hediffVariants weren't given", 231321349); Log.Error("[Anims] Error: Tried to use GraphicHediffVariants node, but hediffVariants weren't given");
return null; return null;
} }
@ -47,9 +47,9 @@ namespace Rimworld_Animations
} }
//otherwise just use default //there is no graphic hediff variants appropriate
curHediff = null; curHediff = null;
return base.GraphicVariantsFor(pawn); return null;
} }
@ -60,9 +60,12 @@ namespace Rimworld_Animations
(this.tree.pawn.health?.hediffSet?.hediffs is List<Hediff> hediffs (this.tree.pawn.health?.hediffSet?.hediffs is List<Hediff> hediffs
&& hediffs.Any((Hediff hediff) => hediff.def == curHediff))) && hediffs.Any((Hediff hediff) => hediff.def == curHediff)))
{ {
//redo graphicvariantsfor //do graphicvariantsfor
variants = GraphicVariantsFor(this.tree.pawn); variants = GraphicVariantsFor(this.tree.pawn);
} }
//call this in case variants wasn't set, and there is no graphic hediff variants appropriate; it'll set variants based on default
base.EnsureMaterialsInitialized();
} }
} }
} }

View File

@ -30,17 +30,6 @@ namespace Rimworld_Animations
} }
protected override void EnsureMaterialsInitialized()
{
if (variants == null)
{
variants = GraphicVariantsFor(this.tree.pawn);
}
base.EnsureMaterialsInitialized();
}
protected virtual Dictionary<int, Graphic> GraphicVariantsFor(Pawn pawn) protected virtual Dictionary<int, Graphic> GraphicVariantsFor(Pawn pawn)
{ {
@ -53,6 +42,18 @@ namespace Rimworld_Animations
} }
protected override void EnsureMaterialsInitialized()
{
if (variants == null)
{
variants = GraphicVariantsFor(this.tree.pawn);
}
base.EnsureMaterialsInitialized();
}
//used by all, including base classes, to create texPathVariants for pawn //used by all, including base classes, to create texPathVariants for pawn
protected Dictionary<int, Graphic> GenerateVariants(Pawn pawn, TexPathVariantsDef texPathVariants) protected Dictionary<int, Graphic> GenerateVariants(Pawn pawn, TexPathVariantsDef texPathVariants)
{ {
@ -74,7 +75,5 @@ namespace Rimworld_Animations
return variantGraphics; return variantGraphics;
} }
} }
} }