Mirror of 1.4.15 from Lovers Lab

This commit is contained in:
ghostclinic3YTB 2023-04-03 21:47:49 -04:00
parent 9a3d9f4185
commit a5ed05c17b
1180 changed files with 4378 additions and 1905 deletions

View file

@ -32,13 +32,15 @@ namespace SizedApparel
static string Tiny = "_1";
static string Nipples = "_0";
//static String[] size = new string[10] { "_0", "_1", "_2", "_3", "_4", "_5" , "_6", "_7", "_8", "_9"};
public static string[] size = new string[11] { Nipples, Tiny, Small, Average, Large, Huge, Enormous, Massive, Gargantuan, Colossal, Titanic };
public static string[] breastsSizeStrings = new string[11] { Nipples, Tiny, Small, Average, Large, Huge, Enormous, Massive, Gargantuan, Colossal, Titanic };
public static string[] commonSizeStrings = new string[6] { Nipples, Tiny, Small, Average, Large, Huge};
[Obsolete]
public static int findAvailableSmallerSizeFromSetting(int current)
{
int target = current;
target = Math.Min(target, size.Length - 1);
target = Math.Min(target, breastsSizeStrings.Length - 1);
while (target > 0)
{
if (SizedApparelSettings.getUseSettingFromIndex(target) == false)
@ -48,21 +50,23 @@ namespace SizedApparel
}
return target;
}
[Obsolete]
public static int findAvailableBiggerSizeFromSetting(int current)
{
int target = current;
while (target < size.Length)
while (target < breastsSizeStrings.Length)
{
if (SizedApparelSettings.getUseSettingFromIndex(target) == false)
target++;
else
break;
}
target = Math.Min(target, size.Length - 1);
target = Math.Min(target, breastsSizeStrings.Length - 1);
return target;
}
[Obsolete]
public static int findAvailableSizeFromSetting(int current, bool findBigger)
{
if (findBigger)
@ -195,14 +199,14 @@ namespace SizedApparel
int offset = 0;
//int offsetLimit = 10;
bool validTexture = false;
Graphic graphic = null;
bool findBigger = true; // if false : search smaller first
string pathString = "";
while (offset < SizedApparelUtility.size.Length)
while (offset < SizedApparelUtility.breastsSizeStrings.Length)
{
if (breastHediffName != null)
{
@ -281,7 +285,7 @@ namespace SizedApparel
if (validTexture == false)
{
offset = 0;
while (offset < SizedApparelUtility.size.Length)
while (offset < SizedApparelUtility.breastsSizeStrings.Length)
{
if (breastHediffName != null)
{
@ -393,13 +397,6 @@ namespace SizedApparel
}
[Obsolete]
public static SizedApparelBodyPartDef TryGetSizedApparelBodyPart(string bodyPartName)
{
return null;
}
public static bool isPragnencyHediff(Hediff h)
{
return h.def.defName.ToLower().Contains("pregnancy");
@ -486,7 +483,7 @@ namespace SizedApparel
else
defName = customDefName;
string bodyPartsFolderPath = "SizedApparel/BodyParts/";
const string bodyPartsFolderPath = "SizedApparel/BodyParts/";
string defaultHediffName = "Breasts";
string graphicFolderPath = bodyPartsFolderPath + defName + "/" + "Breasts" + "/";
string fileName;
@ -519,7 +516,7 @@ namespace SizedApparel
string pathString = "";
int currentSizeIndex = -1;
float currentSeverity = -1;
while (offset < SizedApparelUtility.size.Length)
while (offset < SizedApparelUtility.breastsSizeStrings.Length)
{
if (hediff != null)
{
@ -557,7 +554,7 @@ namespace SizedApparel
if (validTexture == false)
{
offset = 0;
while (offset < SizedApparelUtility.size.Length)
while (offset < SizedApparelUtility.breastsSizeStrings.Length)
{
if (hediff != null)
{
@ -617,7 +614,7 @@ namespace SizedApparel
defName = customRaceDefName;
string bodyType = bodyTypeName;
string bodyPartsFolderPath = "SizedApparel/BodyParts/";
const string bodyPartsFolderPath = "SizedApparel/BodyParts/";
string graphicFolderPath;
string targetFolderName = folderName;
if (hornyGraphic)
@ -667,20 +664,29 @@ namespace SizedApparel
int offset = 0;
int offsetLimit = 10 ; // = SizedApparelUtility.breastsSizeStrings.Length;
float SeverityCapped;
if (isBreast)
{
SeverityCapped = SizedApparelUtility.BreastSizeIndexToSeverity(sizeIndex);
offsetLimit = SizedApparelUtility.breastsSizeStrings.Length;
}
else
{
SeverityCapped = SizedApparelUtility.PrivatePartSizeIndexToSeverity(sizeIndex);
offsetLimit = SizedApparelUtility.commonSizeStrings.Length;
}
bool validTexture = false;
bool findBigger = true; // if false : search smaller first
string pathString = "";
string pathStringWithVariatione = "";
while (offset < SizedApparelUtility.size.Length)
while (offset < offsetLimit)
{
if (hediffDefName != null)
{
@ -777,7 +783,7 @@ namespace SizedApparel
if (validTexture == false)
{
offset = 0;
while (offset < SizedApparelUtility.size.Length)
while (offset < offsetLimit)
{
if (hediffDefName != null)
{
@ -903,134 +909,17 @@ namespace SizedApparel
return graphic;
}
/*
public static Graphic GetBodyPartGraphic(Pawn pawn, Hediff hediff, bool isBreast, string folderName, string defaultHediffName, bool hornyGraphic = false, bool updateComp = false, string customRaceDefName = null)
public static PubicHairDef GetRandomPubicHair()
{
int i = -1;
string s = null;
return GetBodyPartGraphic(pawn, hediff, isBreast, folderName, defaultHediffName, out i,out s, hornyGraphic, updateComp, customRaceDefName);
return DefDatabase<PubicHairDef>.GetRandom();
}
public static PubicHairDef GetPubicHairEmpty()
{
return DefDatabase<PubicHairDef>.GetNamed("None");
}
public static Graphic GetBodyPartGraphic(Pawn pawn, Hediff hediff, bool isBreast, string folderName, string defaultHediffName, out int indexOut,out string hediffResult, bool hornyGraphic = false, bool updateComp = false, string customRaceDefName = null)
{
Graphic graphic = null; //for return
indexOut = -1;
hediffResult = null;
if (pawn == null)
return null;
if (hediff == null)
return null;
//rec = new ApparelGraphicRecord(null, null);
Graphic nakedGraphic = pawn.Drawer?.renderer?.graphics?.nakedGraphic;
if (nakedGraphic == null)
return null;
var rotComp = pawn.GetComp<CompRottable>();
if (rotComp!=null)
{
if (rotComp.Stage == RotStage.Rotting)
nakedGraphic = pawn.Drawer.renderer.graphics.rottingGraphic;
}
ApparelRecorderComp comp = pawn.GetComp<ApparelRecorderComp>();
string defName = pawn.def.defName;
if (customRaceDefName != null)
defName = customRaceDefName;
string bodyType = null;
if (pawn.story != null)
bodyType = pawn.story.bodyType?.defName;
string bodyPartsFolderPath = "SizedApparel/BodyParts/";
string graphicFolderPath;
if (hornyGraphic)
graphicFolderPath = bodyPartsFolderPath + defName + "/" + folderName + "/Horny/";
else
graphicFolderPath = bodyPartsFolderPath + defName + "/" + folderName + "/";
string fileName;
string extraFileName;
if(bodyType != null)
{
fileName = defaultHediffName + ("_" + bodyType);
extraFileName = hediff.def.defName + ("_" + bodyType);
}
else
{
fileName = defaultHediffName;
extraFileName = hediff.def.defName;
}
//if (SizedApparelSettings.matchBodyTextureToMinimumApparelSize)
// BreastSeverity = comp.BreastSeverityCache;
//int currentSizeIndex = 0;
//float currentSeverity = -1;
//int minSupportedBreastSizeIndex = 1000;
//float minSupportedBreastSeverity = 1000;
//SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff);
if (comp != null)
{
if (comp.hasUpdateBefore == false)
{
if (updateComp)
{
//SizedApparelUtility.GetBreastSeverity(apparel.Wearer, out BreastSeverity, out breastHediff);
//comp.hasUnsupportedApparel = SizedApparelUtility.hasUnSupportedApparelFromWornData(apparel.Wearer, BreastSeverity, breastHediff);
//comp.breastSeverity = BreastSeverity;
//comp.breastHediff = breastHediff;
//comp.hasUpdateBefore = true;
//comp.Update(true,true,false);
}
}
float SeverityCapped = hediff.Severity; ;
if (isBreast)
{
if (SizedApparelSettings.useBreastSizeCapForApparels) //SizedApparelSettings.useBreastSizeCapForApparels //wip
SeverityCapped = Math.Min(comp.BreastSeverityCache, SeverityCapped);
}
if (comp.hasUnsupportedApparel == false)
{
int index;
if (isBreast)
index = SizedApparelUtility.BreastSeverityInt(hediff.Severity);
else
index = SizedApparelUtility.PrivatePartSeverityInt(hediff.Severity);
Graphic partGraphic = GetBodyPartGraphic(pawn.def.defName, pawn.story?.bodyType?.defName, hediff.def.defName, hornyGraphic, index, folderName, defaultHediffName,out indexOut, out hediffResult, hornyGraphic, customRaceDefName);
if(partGraphic != null)
{
graphic = GraphicDatabase.Get<Graphic_Multi>(partGraphic.path, nakedGraphic.Shader, nakedGraphic.drawSize, nakedGraphic.color, nakedGraphic.colorTwo);
}
//minSupportedBreastSizeIndex = Math.Min(currentBreastSizeIndex, minSupportedBreastSizeIndex);
//comp.breastSeverityCapToDraw = Math.Min(comp.breastSeverityCapToDraw, minSupportedBreastSeverity);
}
}
else
{
if (SizedApparelSettings.Debug)
Log.Warning("[Sized Apparel] " + pawn.Name + " doesn't have SizedApparel Compoenet!!");
}
return graphic;
}*/
//TODO
public static Graphic GetBodyGraphic()
{
return null;
}
public static bool IsHorny(Pawn pawn)
{
@ -1280,7 +1169,7 @@ namespace SizedApparel
if (findBigger)
{
if (size.Length - (targetIndex + offset) > 0)
if (breastsSizeStrings.Length - (targetIndex + offset) > 0)
{
//size.Length< targetIndex + offset
@ -1294,14 +1183,14 @@ namespace SizedApparel
//targetSeverity = BreastSizeIndexToSeverity(result);
targetSeverity = PrivatePartSizeIndexToSeverity(result);
outTargetSeverity = targetSeverity;
return size[result];
return breastsSizeStrings[result];
}
}
else
{
if (targetIndex - offset < 0)
return "_-1";
if (size.Length - (targetIndex - offset) > 0)
if (breastsSizeStrings.Length - (targetIndex - offset) > 0)
{
/*
if (size[targetIndex - offset] != null)
@ -1313,7 +1202,7 @@ namespace SizedApparel
//targetSeverity = BreastSizeIndexToSeverity(result);
targetSeverity = PrivatePartSizeIndexToSeverity(result);
outTargetSeverity = targetSeverity;
return size[result];
return breastsSizeStrings[result];
}
}
}
@ -1345,57 +1234,68 @@ namespace SizedApparel
}
else if (BreastSeverity < 0.02f)
{
targetIndex = findAvailableSmallerSizeFromSetting(0);
targetIndex = 0;
//targetIndex = findAvailableSmallerSizeFromSetting(0);
targetSeverity = 0.01f;
}
else if (BreastSeverity < 0.2f)
{
targetIndex = findAvailableSmallerSizeFromSetting(1);
targetIndex = 1;
//targetIndex = findAvailableSmallerSizeFromSetting(1);
targetSeverity = 0.02f;
}
else if (BreastSeverity < 0.40f)
{
targetIndex = findAvailableSmallerSizeFromSetting(2);
targetIndex = 2;
//targetIndex = findAvailableSmallerSizeFromSetting(2);
targetSeverity = 0.2f;
}
else if (BreastSeverity < 0.60f)
{
targetIndex = findAvailableSmallerSizeFromSetting(3);
targetIndex = 3;
//targetIndex = findAvailableSmallerSizeFromSetting(3);
targetSeverity = 0.40f;
}
else if (BreastSeverity < 0.80f)
{
targetIndex = findAvailableSmallerSizeFromSetting(4);
targetIndex = 4;
//targetIndex = findAvailableSmallerSizeFromSetting(4);
targetSeverity = 0.60f;
}
else if (BreastSeverity < 1.0f)
{
targetIndex = findAvailableSmallerSizeFromSetting(5);
targetIndex = 5;
//targetIndex = findAvailableSmallerSizeFromSetting(5);
targetSeverity = 0.80f;
}
else if (BreastSeverity < 1.2f)
{
targetIndex = findAvailableSmallerSizeFromSetting(6);
targetIndex = 6;
//targetIndex = findAvailableSmallerSizeFromSetting(6);
targetSeverity = 1.0f;
}
else if (BreastSeverity < 1.4f)
{
targetIndex = findAvailableSmallerSizeFromSetting(7);
targetIndex = 7;
//targetIndex = findAvailableSmallerSizeFromSetting(7);
targetSeverity = 1.2f;
}
else if (BreastSeverity < 1.6f)
{
targetIndex = findAvailableSmallerSizeFromSetting(8);
targetIndex = 8;
//targetIndex = findAvailableSmallerSizeFromSetting(8);
targetSeverity = 1.4f;
}
else if (BreastSeverity < 1.8f)
{
targetIndex = findAvailableSmallerSizeFromSetting(9);
targetIndex = 9;
//targetIndex = findAvailableSmallerSizeFromSetting(9);
targetSeverity = 1.6f;
}
else
{
targetIndex = findAvailableSmallerSizeFromSetting(10);
targetIndex = 10;
//targetIndex = findAvailableSmallerSizeFromSetting(10);
targetSeverity = 1.8f;
}
//if (targetIndex - offset < 0)
@ -1404,7 +1304,7 @@ namespace SizedApparel
if (findBigger)
{
if (size.Length - (targetIndex + offset) > 0)
if (breastsSizeStrings.Length - (targetIndex + offset) > 0)
{
//size.Length< targetIndex + offset
@ -1416,14 +1316,14 @@ namespace SizedApparel
outTargetIndex = result;
targetSeverity = BreastSizeIndexToSeverity(result);
outTargetSeverity = targetSeverity;
return size[result];
return breastsSizeStrings[result];
}
}
else
{
if (targetIndex - offset < 0)
return "_-1";
if (size.Length - (targetIndex - offset) > 0)
if (breastsSizeStrings.Length - (targetIndex - offset) > 0)
{
/*
if (size[targetIndex - offset] != null)
@ -1433,7 +1333,7 @@ namespace SizedApparel
outTargetIndex = result;
targetSeverity = BreastSizeIndexToSeverity(result);
outTargetSeverity = targetSeverity;
return size[result];
return breastsSizeStrings[result];
}
}
}
@ -1540,7 +1440,7 @@ namespace SizedApparel
bool validTexture = false;
bool findBigger = true; // if false : search smaller first
while (offset < size.Length)
while (offset < breastsSizeStrings.Length)
{
if (breastHediff != null)
{
@ -1579,7 +1479,7 @@ namespace SizedApparel
if (validTexture == false)
{
offset = 0;
while (offset < size.Length)
while (offset < breastsSizeStrings.Length)
{
if (breastHediff != null)
{
@ -1769,7 +1669,7 @@ namespace SizedApparel
bool validTexture = false;
bool findBigger = true; // if false : search smaller first
while (offset < size.Length)
while (offset < breastsSizeStrings.Length)
{
if (breastHediff != null)
{
@ -1825,7 +1725,7 @@ namespace SizedApparel
if (validTexture == false)
{
offset = 0;
while (offset < size.Length)
while (offset < breastsSizeStrings.Length)
{
if (breastHediff != null)
{
@ -1948,7 +1848,7 @@ namespace SizedApparel
return;
}
pawnGraphicSet.ResolveApparelGraphics();
//pawnGraphicSet.ResolveApparelGraphics();
}
@ -2034,6 +1934,19 @@ namespace SizedApparel
return true;
}
public static bool CanDrawPubicHair(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None)
{
if (pawn == null)
return false;
var comp = pawn.GetComp<ApparelRecorderComp>();
if (comp == null)
return false;
if (!flags.FlagSet(PawnRenderFlags.Clothes))
return true;
return true;
}
public static bool CanDrawAnus(Pawn pawn, PawnRenderFlags flags = PawnRenderFlags.None)
{
if (pawn == null)
@ -2148,8 +2061,48 @@ namespace SizedApparel
}
return true;
}
public static bool CanPoseApparels(Pawn pawn, string targetPose, string currentHediffName = null, int currentSeverityInt = 0, int cappedSeverityInt = 1000)
{
if (pawn == null)
return false;
foreach (ApparelGraphicRecord agr in pawn.Drawer.renderer.graphics.apparelGraphics)
{
if (agr.graphic == null)
continue;
/*
if (!agr.sourceApparel.def.apparel.bodyPartGroups.Any(bpgd => bpgd.defName == "Torso" || bpgd.defName == "Chest"))
continue;
if (agr.sourceApparel.def.apparel.tags.Any(s => s.ToLower() == "SizedApparel_IgnorePose".ToLower()))
continue;
*/
//Only Check Torso Apparel Only
if (!agr.sourceApparel.def.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso))
continue;
string originalPath = SizedApparelsDatabase.GetSupportedApparelOriginalPath(agr.graphic.path);
if (originalPath == null)
return false;
int outInt = -1;
float outFloat = -1;
SizedApparelsDatabase.SizedApparelDatabaseKey key = new SizedApparelsDatabase.SizedApparelDatabaseKey(originalPath, pawn.def.defName, pawn.story?.bodyType?.defName, pawn.gender, currentHediffName, Math.Min(currentSeverityInt, cappedSeverityInt), false, targetPose);
if (SizedApparelSettings.useGenderSpecificTexture)
key.gender = Gender.None;
var result = SizedApparelsDatabase.GetSupportedApparelSizedPath(key, out outInt, out outFloat);
if (!result.isCustomPose)
return false;
}
return true;
}
}
}