mirror of
https://gitgud.io/AbstractConcept/rimworld-animations-patch.git
synced 2024-08-15 00:43:27 +00:00
v 1.2.3
This commit is contained in:
parent
3e8476ce8a
commit
d18d422a94
15 changed files with 68 additions and 39 deletions
|
@ -21,6 +21,7 @@ namespace Rimworld_Animations_Patch
|
|||
private string bodyType;
|
||||
private PawnRenderFlags renderFlags;
|
||||
private bool canDraw = false;
|
||||
private bool bodyPartMissing = false;
|
||||
|
||||
public BodyAddonData(Pawn pawn, AlienPartGenerator.BodyAddon bodyAddon, bool isPortrait = false)
|
||||
{
|
||||
|
@ -107,42 +108,53 @@ namespace Rimworld_Animations_Patch
|
|||
|
||||
public bool CanDraw()
|
||||
{
|
||||
return pawn.Drawer.renderer.graphics.apparelGraphics.Any() == false || canDraw;
|
||||
return bodyPartMissing == false && SitutationalVisibiltyCheck() && (pawn.Drawer.renderer.graphics.apparelGraphics.Any() == false || canDraw);
|
||||
}
|
||||
|
||||
public bool SitutationalVisibiltyCheck()
|
||||
{
|
||||
if (pawn == null || bodyAddon == null) return false;
|
||||
|
||||
if (pawn.CurrentBed()?.def.building.bed_showSleeperBody == false && bodyAddon.drawnInBed == false)
|
||||
{ return false; }
|
||||
|
||||
if (bodyAddon.backstoryRequirement.NullOrEmpty() == false && pawn.story?.AllBackstories?.Any((Backstory x) => x.identifier == bodyAddon.backstoryRequirement) == false)
|
||||
{ return false; }
|
||||
|
||||
if (bodyAddon.drawnDesiccated == false && pawn.Corpse?.GetRotStage() == RotStage.Dessicated)
|
||||
{ return false; }
|
||||
|
||||
if (pawn.gender == Gender.Female && bodyAddon.drawForFemale == false || pawn.gender == Gender.Male && bodyAddon.drawForMale == false)
|
||||
{ return false; }
|
||||
|
||||
if (bodyAddon.bodyTypeRequirement.NullOrEmpty() == false && pawn.story?.bodyType.ToString() != bodyAddon.bodyTypeRequirement)
|
||||
{ return false; }
|
||||
|
||||
if ((pawn.GetPosture() == PawnPosture.LayingOnGroundNormal || pawn.GetPosture() == PawnPosture.LayingOnGroundFaceUp) && bodyAddon.drawnOnGround == false)
|
||||
{ return false; }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void UpdateVisibility()
|
||||
{
|
||||
{
|
||||
if (pawn == null || bodyAddon == null) return;
|
||||
|
||||
canDraw = true;
|
||||
|
||||
if (pawn.CurrentBed()?.def.building.bed_showSleeperBody == false && bodyAddon.drawnInBed == false)
|
||||
{canDraw = false; return; }
|
||||
|
||||
if (bodyAddon.backstoryRequirement.NullOrEmpty() == false && pawn.story.AllBackstories.Any((Backstory x) => x.identifier == bodyAddon.backstoryRequirement) == false)
|
||||
{ canDraw = false; return; }
|
||||
|
||||
if (bodyAddon.drawnDesiccated == false && pawn?.Corpse?.GetRotStage() == RotStage.Dessicated)
|
||||
{ canDraw = false; return; }
|
||||
|
||||
if (pawn.health.hediffSet.GetNotMissingParts().Contains(bodyPartRecord) == false)
|
||||
{ canDraw = false; return; }
|
||||
|
||||
if (pawn.gender == Gender.Female && bodyAddon.drawForFemale == false || pawn.gender == Gender.Male && bodyAddon.drawForMale == false)
|
||||
{ canDraw = false; return; }
|
||||
|
||||
if (bodyAddon.bodyTypeRequirement.NullOrEmpty() == false && pawn.story.bodyType.ToString() != bodyAddon.bodyTypeRequirement)
|
||||
{ canDraw = false; return; }
|
||||
|
||||
if ((pawn.GetPosture() == PawnPosture.LayingOnGroundNormal || pawn.GetPosture() == PawnPosture.LayingOnGroundFaceUp) && bodyAddon.drawnOnGround == false)
|
||||
{ canDraw = false; return; }
|
||||
if (pawn.health?.hediffSet?.GetNotMissingParts()?.Contains(bodyPartRecord) == false)
|
||||
{ bodyPartMissing = true; return; }
|
||||
|
||||
foreach (Apparel apparel in pawn.apparel.WornApparel)
|
||||
{
|
||||
CompApparelVisibility comp = apparel.TryGetComp<CompApparelVisibility>();
|
||||
CompApparelVisibility comp = apparel?.TryGetComp<CompApparelVisibility>();
|
||||
if (comp == null) continue;
|
||||
|
||||
LoadRimNudeData(comp);
|
||||
|
||||
if (comp.isBeingWorn == false) continue;
|
||||
|
||||
if (bodyAddon.bodyPart == "Genitals" || bodyAddon.bodyPart == "Anus" || bodyAddon.bodyPart == "Chest" || bodyAddon.hediffGraphics?.Any(x => x.path.ToLower().Contains("belly")) == true)
|
||||
if (bodyAddon.bodyPart == "Genitals" || bodyAddon.bodyPart == "Anus" || bodyAddon.bodyPart == "Chest" || bodyAddon.hediffGraphics?.Any(x => x.path.NullOrEmpty() == false && x.path.ToLower().Contains("belly")) == true)
|
||||
{
|
||||
if ((bodyAddon.bodyPart == "Genitals" || bodyAddon.bodyPart == "Anus") && comp.coversGroin)
|
||||
{ canDraw = false; return; };
|
||||
|
@ -150,16 +162,16 @@ namespace Rimworld_Animations_Patch
|
|||
if (bodyAddon.bodyPart == "Chest" && comp.coversChest)
|
||||
{ canDraw = false; return; };
|
||||
|
||||
if (bodyAddon.hediffGraphics?.Any(x => x.path.ToLower().Contains("belly")) == true && comp.coversBelly)
|
||||
if (bodyAddon.hediffGraphics?.Any(x => x.path.NullOrEmpty() == false && x.path.ToLower().Contains("belly")) == true && comp.coversBelly)
|
||||
{ canDraw = false; return; }
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (bodyAddon.hiddenUnderApparelFor?.Any(x => apparel.def.apparel.hatRenderedFrontOfFace == false && apparel.def.apparel.bodyPartGroups.Contains(x)) == true)
|
||||
if (bodyAddon.hiddenUnderApparelFor?.Any(x => apparel?.def.apparel?.hatRenderedFrontOfFace == false && apparel.def.apparel?.bodyPartGroups?.Contains(x) == true) == true)
|
||||
{ canDraw = false; return; };
|
||||
|
||||
if (bodyAddon.hiddenUnderApparelTag?.Any(x => apparel.def.apparel.hatRenderedFrontOfFace == false && apparel.def.apparel.tags.Contains(x)) == true)
|
||||
if (bodyAddon.hiddenUnderApparelTag?.Any(x => apparel?.def.apparel?.hatRenderedFrontOfFace == false && apparel.def.apparel?.tags?.Contains(x) == true) == true)
|
||||
{ canDraw = false; return; };
|
||||
}
|
||||
}
|
||||
|
@ -167,12 +179,12 @@ namespace Rimworld_Animations_Patch
|
|||
|
||||
public void LoadRimNudeData(CompApparelVisibility comp)
|
||||
{
|
||||
if (comp == null || comp.rimNudeDataStatus == RimNudeDataStatus.Unavailable)
|
||||
if (comp?.rimNudeDataStatus == RimNudeDataStatus.Unavailable)
|
||||
{ return; }
|
||||
|
||||
if (comp.rimNudeDataStatus == RimNudeDataStatus.NotLoaded)
|
||||
if (comp?.rimNudeDataStatus == RimNudeDataStatus.NotLoaded)
|
||||
{
|
||||
RimNudeData rimNudeData = ApparelSettings.GetRimNudeData(comp.apparel);
|
||||
RimNudeData rimNudeData = ApparelSettings.GetRimNudeData(comp?.apparel);
|
||||
|
||||
if (rimNudeData == null)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue