supports for other type of vagina&anus

supports for cutom icons of vagina&anus
This commit is contained in:
moreoreganostodump 2021-02-02 16:47:02 +09:00
parent f8e9778764
commit fe463fc975
32 changed files with 276 additions and 69 deletions

12
About/Manifest.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
<identifier>RJW Menstruation</identifier>
<version>1.0.0.1</version>
<dependencies>
</dependencies>
<incompatibleWith />
<loadAfter>
</loadAfter>
<suggests>
</suggests>
</Manifest>

View File

@ -1 +0,0 @@
2084961349

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

View File

@ -11,6 +11,7 @@
<Stage_Fertilized>Luteal</Stage_Fertilized>
<Stage_Pregnant>Pregnant</Stage_Pregnant>
<Stage_Recover>Recovering from birth</Stage_Recover>
<Stage_None>None</Stage_None>
<Dialog_WombInfo01>State</Dialog_WombInfo01>
<Dialog_WombInfo02>Fetus</Dialog_WombInfo02>
<Dialog_WombInfo03>Father</Dialog_WombInfo03>

View File

@ -11,7 +11,8 @@
<Stage_Fertilized>황체기</Stage_Fertilized>
<Stage_Pregnant>임신</Stage_Pregnant>
<Stage_Recover>회복기</Stage_Recover>
<Dialog_WombInfo01>주기</Dialog_WombInfo01>
<Stage_None>없음</Stage_None>
<Dialog_WombInfo01>상태</Dialog_WombInfo01>
<Dialog_WombInfo02>태아</Dialog_WombInfo02>
<Dialog_WombInfo03></Dialog_WombInfo03>
<Dialog_WombInfo04>정액목록</Dialog_WombInfo04>

View File

@ -21,8 +21,108 @@
<recoveryIntervalDays>10</recoveryIntervalDays>
<eggLifespanDays>3</eggLifespanDays>
<wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/Vagina</vagTex>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="HydraulicVagina"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Menstruation">
<maxCumCapacity>500</maxCumCapacity>
<wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/BionicVagina</vagTex>
<infertile>true</infertile>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="BionicVagina"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Menstruation">
<maxCumCapacity>500</maxCumCapacity>
<wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/BionicVagina</vagTex>
<infertile>true</infertile>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="ArchotechVagina"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Menstruation">
<maxCumCapacity>500</maxCumCapacity>
<baseImplantationChanceFactor>1.0</baseImplantationChanceFactor>
<basefertilizationChanceFactor>1.0</basefertilizationChanceFactor>
<deviationFactor>0.05</deviationFactor>
<folicularIntervalDays>14</folicularIntervalDays>
<lutealIntervalDays>14</lutealIntervalDays>
<bleedingIntervalDays>0</bleedingIntervalDays>
<recoveryIntervalDays>0</recoveryIntervalDays>
<eggLifespanDays>3</eggLifespanDays>
<wombTex>Womb/Womb</wombTex>
<vagTex>Genitals/Vagina</vagTex>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="Anus"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Anus">
<analTex>Genitals/Anal</analTex>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="HydraulicAnus"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Anus">
<analTex>Genitals/BionicAnal</analTex>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="BionicAnus"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Anus">
<analTex>Genitals/BionicAnal</analTex>
</li>
</comps>
</value>
</Operation>
<Operation Class="PatchOperationAdd">
<xpath>Defs/rjw.HediffDef_PartBase[defName="ArchotechAnus"]</xpath>
<value>
<comps>
<li Class="RJW_Menstruation.CompProperties_Anus">
<analTex>Genitals/Anal</analTex>
</li>
</comps>
</value>
</Operation>
</Patch>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -30,7 +30,13 @@ namespace RJW_Menstruation
private Texture2D anal;
private Color cumcolor;
public override Vector2 InitialSize
private GUIStyle fontstylecenter = new GUIStyle() { alignment = TextAnchor.MiddleCenter };
private GUIStyle fontstyleright = new GUIStyle() { alignment = TextAnchor.MiddleRight };
private GUIStyle fontstyleleft = new GUIStyle() { alignment = TextAnchor.MiddleLeft };
private GUIStyle boxstyle = new GUIStyle(GUI.skin.textArea);
private GUIStyle buttonstyle = new GUIStyle(GUI.skin.button);
public override Vector2 InitialSize
{
get
{
@ -74,11 +80,7 @@ namespace RJW_Menstruation
private void MainContents(Rect mainRect)
{
GUIStyle fontstylecenter = new GUIStyle() { alignment = TextAnchor.MiddleCenter };
GUIStyle fontstyleright = new GUIStyle() { alignment = TextAnchor.MiddleRight };
GUIStyle fontstyleleft = new GUIStyle() { alignment = TextAnchor.MiddleLeft };
GUIStyle boxstyle = new GUIStyle(GUI.skin.textArea);
GUIStyle buttonstyle = new GUIStyle(GUI.skin.button);
boxstyle.hover = boxstyle.normal;
boxstyle.onHover = boxstyle.normal;
boxstyle.onNormal = boxstyle.normal;
@ -162,29 +164,47 @@ namespace RJW_Menstruation
GUI.Label(cumlistTitle,Translations.Dialog_WombInfo04);
Rect cumlistRect = new Rect(pawnRectWidth, fontheight, wombRectWidth - pawnRectWidth, mainRect.yMax - wombRectHeight - fontheight);
DrawCumlist(cumlistRect);
Rect genitalRect = new Rect(24, pawnRectHeight + 2*fontheight, genitalRectWidth, genitalRectHeight + fontheight*2);
DrawVagina(genitalRect);
}
private void DrawCumlist(Rect rect)
{
Listing_Standard cumlist = new Listing_Standard
{
maxOneColumn = true,
ColumnWidth = wombRectWidth - pawnRectWidth
};
cumlist.Begin(cumlistRect);
Listing_Standard cumlistsection = cumlist.BeginSection_NewTemp(mainRect.yMax - wombRectHeight - 2 * fontheight - 12f);
foreach(string s in comp.GetCumsInfo)
{
cumlist.Begin(rect);
Listing_Standard cumlistsection = cumlist.BeginSection_NewTemp(rect.height - fontheight - 12f);
foreach (string s in comp.GetCumsInfo)
{
cumlistsection.Label(s);
}
}
cumlist.EndSection(cumlistsection);
cumlist.End();
}
Rect genitalRect = new Rect(24, pawnRectHeight + 2*fontheight, genitalRectWidth, genitalRectHeight + fontheight*2);
Rect genitalIconRect = new Rect(genitalRect.x,genitalRect.y + fontheight ,genitalRectWidth,genitalRectHeight);
Rect genitalVaginaLabelRect = new Rect(genitalRect.x,genitalRect.y,genitalRectWidth,fontheight);
Rect genitalAnusLabelRect = new Rect(genitalRect.x,genitalRect.y + fontheight + genitalRectHeight ,genitalRectWidth,fontheight);
private void DrawVagina(Rect rect)
{
Rect genitalIconRect = new Rect(rect.x, rect.y + fontheight, genitalRectWidth, genitalRectHeight);
Rect genitalVaginaLabelRect = new Rect(rect.x, rect.y, genitalRectWidth, fontheight);
Rect genitalAnusLabelRect = new Rect(rect.x, rect.y + fontheight + genitalRectHeight, genitalRectWidth, fontheight);
vagina = Utility.GetGenitalIcon(pawn);
anal = Utility.GetAnalIcon(pawn);
GUI.color = new Color(1.00f, 0.47f, 0.47f, 1);
GUI.Box(genitalRect, "", boxstyle);
GUI.Box(rect, "", boxstyle);
GUI.color = pawn.story.SkinColor;
//Widgets.DrawTextureFitted(genitalIconRect, anal, 1.0f);
//Widgets.DrawTextureFitted(genitalIconRect, vagina, 1.0f);
@ -192,13 +212,11 @@ namespace RJW_Menstruation
GUI.DrawTexture(genitalIconRect, vagina, ScaleMode.ScaleToFit);
GUI.color = Color.white;
GUI.Label(genitalVaginaLabelRect, Utility.GetVaginaLabel(pawn),fontstylecenter);
GUI.Label(genitalAnusLabelRect, Utility.GetAnusLabel(pawn),fontstylecenter);
GUI.Label(genitalVaginaLabelRect, Utility.GetVaginaLabel(pawn), fontstylecenter);
GUI.Label(genitalAnusLabelRect, Utility.GetAnusLabel(pawn), fontstylecenter);
}
}
}

View File

@ -47,19 +47,21 @@ namespace RJW_Menstruation
private static void AddWombGizmos(Pawn __instance, ref List<Gizmo> gizmoList)
{
gizmoList.Add(CreateGizmo_WombStatus(__instance));
//HediffComp_Menstruation comp = __instance.health.hediffSet.GetFirstHediffOfDef(Genital_Helper.average_vagina).TryGetComp<HediffComp_Menstruation>();
HediffComp_Menstruation comp = Utility.GetMenstruationComp(__instance);
if (comp != null) gizmoList.Add(CreateGizmo_WombStatus(__instance, comp));
}
private static Gizmo CreateGizmo_WombStatus(Pawn pawn)
private static Gizmo CreateGizmo_WombStatus(Pawn pawn , HediffComp_Menstruation comp)
{
HediffComp_Menstruation comp = pawn.health.hediffSet.GetFirstHediffOfDef(Genital_Helper.average_vagina).TryGetComp<HediffComp_Menstruation>();
Texture2D icon,icon_overay;
Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
string description = "";
if (Configurations.Debug) description += comp.curStage + ": " + comp.curStageHrs + "\n" + "fertcums: " + comp.TotalFertCum;
else description += comp.GetCurStageLabel + "\n";
if (pawn.IsPregnant())
{
Hediff hediff = PregnancyHelper.GetPregnancy(pawn);
icon = Utility.GetPregnancyIcon(comp,hediff);
if (hediff is Hediff_BasePregnancy)
{

View File

@ -23,7 +23,8 @@ namespace RJW_Menstruation
public int recoveryIntervalDays = 10; //additional infertile days after gave birth
public int eggLifespanDays = 2; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
public string wombTex = "Womb/Womb"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
public string vagTex = "Genitals/Vagina"; //fertiledays = ovaluationday - spermlifespan ~ ovaluationday + egglifespanday
public bool infertile = false;
public CompProperties_Menstruation()
{
@ -32,6 +33,21 @@ namespace RJW_Menstruation
}
}
public class CompProperties_Anus : HediffCompProperties
{
public string analTex = "Genitals/Anal";
public CompProperties_Anus()
{
compClass = typeof(HediffComp_Anus);
}
}
public class HediffComp_Menstruation : HediffComp
{
@ -50,7 +66,8 @@ namespace RJW_Menstruation
Bleeding,
Fertilized,
Pregnant,
Recover
Recover,
None
}
private List<Cum> cums;
@ -191,6 +208,8 @@ namespace RJW_Menstruation
return Translations.Stage_Pregnant;
case Stage.Recover:
return Translations.Stage_Recover;
case Stage.None:
return Translations.Stage_None;
default:
return "";
}
@ -248,29 +267,17 @@ namespace RJW_Menstruation
}
public override void CompPostPostAdd(DamageInfo? dinfo)
{
Initialize();
}
public override void CompPostTick(ref float severityAdjustment)
{
if (!loaded)
{
Props = (CompProperties_Menstruation)props;
if (follicularIntervalhours < 0)
{
follicularIntervalhours = PeriodRandomizer(Props.folicularIntervalDays*24,Props.deviationFactor);
curStage = RandomStage();
}
if (lutealIntervalhours < 0) lutealIntervalhours = PeriodRandomizer(Props.lutealIntervalDays*24, Props.deviationFactor);
if (bleedingIntervalhours < 0) bleedingIntervalhours = PeriodRandomizer(Props.bleedingIntervalDays*24, Props.deviationFactor);
if (recoveryIntervalhours < 0) recoveryIntervalhours = PeriodRandomizer(Props.recoveryIntervalDays * 24, Props.deviationFactor);
if (cums == null) cums = new List<Cum>();
if (eggs == null) eggs = new List<Egg>();
if (parent.pawn.IsPregnant()) curStage = Stage.Pregnant;
if (Configurations.EnableAnimalCycle)
{
HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
}
else if (!parent.pawn.IsAnimal()) HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
loaded = true;
Initialize();
}
}
@ -282,6 +289,10 @@ namespace RJW_Menstruation
}
public Cum GetNotCum(string notcumlabel)
{
if (!cums.NullOrEmpty()) foreach (Cum cum in cums)
@ -470,6 +481,39 @@ namespace RJW_Menstruation
else return false;
}
private void Initialize()
{
Props = (CompProperties_Menstruation)props;
if (!Props.infertile)
{
if (follicularIntervalhours < 0)
{
follicularIntervalhours = PeriodRandomizer(Props.folicularIntervalDays * 24, Props.deviationFactor);
curStage = RandomStage();
}
if (lutealIntervalhours < 0) lutealIntervalhours = PeriodRandomizer(Props.lutealIntervalDays * 24, Props.deviationFactor);
if (bleedingIntervalhours < 0) bleedingIntervalhours = PeriodRandomizer(Props.bleedingIntervalDays * 24, Props.deviationFactor);
if (recoveryIntervalhours < 0) recoveryIntervalhours = PeriodRandomizer(Props.recoveryIntervalDays * 24, Props.deviationFactor);
if (cums == null) cums = new List<Cum>();
if (eggs == null) eggs = new List<Egg>();
if (parent.pawn.IsPregnant()) curStage = Stage.Pregnant;
if (Configurations.EnableAnimalCycle)
{
HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
}
else if (!parent.pawn.IsAnimal()) HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
}
else
{
if (cums == null) cums = new List<Cum>();
curStage = Stage.None;
HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(PeriodSimulator(curStage), tickInterval, parent.pawn, false);
}
loaded = true;
}
private Pawn Fertilize()
{
if (cums.NullOrEmpty()) return null;
@ -605,8 +649,16 @@ namespace RJW_Menstruation
}
else
{
bleedingIntervalhours = PeriodRandomizer(bleedingIntervalhours, Props.deviationFactor);
GoNextStage(Stage.Bleeding);
if (Props.bleedingIntervalDays == 0)
{
follicularIntervalhours = PeriodRandomizer(follicularIntervalhours, Props.deviationFactor);
GoNextStage(Stage.Follicular);
}
else
{
bleedingIntervalhours = PeriodRandomizer(bleedingIntervalhours, Props.deviationFactor);
GoNextStage(Stage.Bleeding);
}
}
};
break;
@ -669,6 +721,12 @@ namespace RJW_Menstruation
}
};
break;
case Stage.None:
action = delegate
{
StayCurrentStageConst(Stage.None);
};
break;
default:
curStage = Stage.Follicular;
curStageHrs = 0;
@ -777,4 +835,12 @@ namespace RJW_Menstruation
}
public class HediffComp_Anus : HediffComp
{
public override void CompPostTick(ref float severityAdjustment)
{
}
}
}

View File

@ -14,6 +14,7 @@ namespace RJW_Menstruation
public static readonly string Stage_Fertilized = "Stage_Fertilized".Translate();
public static readonly string Stage_Pregnant = "Stage_Pregnant".Translate();
public static readonly string Stage_Recover = "Stage_Recover".Translate();
public static readonly string Stage_None = "Stage_None".Translate();
public static readonly string Dialog_WombInfo01 = "Dialog_WombInfo01".Translate();
public static readonly string Dialog_WombInfo02 = "Dialog_WombInfo02".Translate();

View File

@ -174,19 +174,23 @@ namespace RJW_Menstruation
public static Texture2D GetGenitalIcon(Pawn pawn)
{
var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn)).Find((Hediff h) => h.def.defName.ToLower().Contains("vagina"));
string icon = "Genitals/";
if (hediff.Severity < 0.20f) icon += "Vagina00"; //micro
else if (hediff.Severity < 0.30f) icon += "Vagina01"; //tight
else if (hediff.Severity < 0.40f) icon += "Vagina02"; //tight
else if (hediff.Severity < 0.47f) icon += "Vagina03"; //average
else if (hediff.Severity < 0.53f) icon += "Vagina04"; //average
else if (hediff.Severity < 0.60f) icon += "Vagina05"; //average
else if (hediff.Severity < 0.70f) icon += "Vagina06"; //accomodating
else if (hediff.Severity < 0.80f) icon += "Vagina07"; //accomodating
else if (hediff.Severity < 0.87f) icon += "Vagina08"; //cavernous
else if (hediff.Severity < 0.94f) icon += "Vagina09"; //cavernous
else if (hediff.Severity < 1.01f) icon += "Vagina10"; //cavernous
else icon += "Vagina11"; //abyssal
CompProperties_Menstruation Props = (CompProperties_Menstruation)hediff.TryGetComp<HediffComp_Menstruation>().props;
string icon;
if (Props != null) icon = Props.vagTex;
else icon = "Genitals/Vagina";
if (hediff.Severity < 0.20f) icon += "00"; //micro
else if (hediff.Severity < 0.30f) icon += "01"; //tight
else if (hediff.Severity < 0.40f) icon += "02"; //tight
else if (hediff.Severity < 0.47f) icon += "03"; //average
else if (hediff.Severity < 0.53f) icon += "04"; //average
else if (hediff.Severity < 0.60f) icon += "05"; //average
else if (hediff.Severity < 0.70f) icon += "06"; //accomodating
else if (hediff.Severity < 0.80f) icon += "07"; //accomodating
else if (hediff.Severity < 0.87f) icon += "08"; //cavernous
else if (hediff.Severity < 0.94f) icon += "09"; //cavernous
else if (hediff.Severity < 1.01f) icon += "10"; //cavernous
else icon += "11"; //abyssal
return ContentFinder<Texture2D>.Get((icon), true);
}
@ -194,13 +198,16 @@ namespace RJW_Menstruation
public static Texture2D GetAnalIcon(Pawn pawn)
{
var hediff = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_anusBPR(pawn)).Find((Hediff h) => h.def.defName.ToLower().Contains("anus"));
string icon = "Genitals/";
if (hediff.Severity < 0.20f) icon += "Anal00"; //micro
else if (hediff.Severity < 0.40f) icon += "Anal01"; //tight
else if (hediff.Severity < 0.60f) icon += "Anal02"; //average
else if (hediff.Severity < 0.80f) icon += "Anal03"; //accomodating
else if (hediff.Severity < 1.01f) icon += "Anal04"; //cavernous
else icon += "Anal05"; //abyssal
CompProperties_Anus Props = (CompProperties_Anus)hediff.TryGetComp<HediffComp_Anus>().props;
string icon;
if (Props != null) icon = Props.analTex;
else icon = "Genitals/Anal";
if (hediff.Severity < 0.20f) icon += "00"; //micro
else if (hediff.Severity < 0.40f) icon += "01"; //tight
else if (hediff.Severity < 0.60f) icon += "02"; //average
else if (hediff.Severity < 0.80f) icon += "03"; //accomodating
else if (hediff.Severity < 1.01f) icon += "04"; //cavernous
else icon += "05"; //abyssal
return ContentFinder<Texture2D>.Get((icon), true);
}