mirror of
https://gitgud.io/c0ffeeeeeeee/coffees-rjw-ideology-addons.git
synced 2024-08-14 23:57:38 +00:00
134 lines
4.3 KiB
C#
134 lines
4.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Verse;
|
|
using RimWorld;
|
|
using rjw;
|
|
using Milk;
|
|
using UnityEngine;
|
|
|
|
namespace CRIALactation
|
|
{
|
|
public class CompInduceLactation : ThingComp
|
|
{
|
|
private readonly int OneDayInTicks = 60000;
|
|
private int TicksSinceLastMassage = -60000;
|
|
|
|
private float InductionCompletionPercent = 0f;
|
|
|
|
public bool isActive = false;
|
|
public bool CanMassage = true;
|
|
|
|
public int lastHumanLactationIngestedTick = 0;
|
|
|
|
public override void CompTick()
|
|
{
|
|
base.CompTick();
|
|
Pawn p = this.parent as Pawn;
|
|
|
|
if (!p.IsHashIntervalTick(100))
|
|
{
|
|
return;
|
|
}
|
|
if (LactationUtility.IsLactating(p))
|
|
{
|
|
InductionCompletionPercent = 0.8f;
|
|
isActive = false;
|
|
return;
|
|
}
|
|
if (!isActive)
|
|
{
|
|
return;
|
|
}
|
|
if(TicksSinceLastMassage + OneDayInTicks / Props.TimesMassagedADay < GenTicks.TicksGame)
|
|
{
|
|
CanMassage = true;
|
|
}
|
|
|
|
if(InductionCompletionPercent >= 1)
|
|
{
|
|
string main = p.Name.ToStringShort + "'s breasts have been stimulated enough to induce lactation! They can now begin producing milk for their colony's consumption.";
|
|
|
|
var letter = LetterMaker.MakeLetter(p.Name.ToStringShort + " induced lactation", main, LetterDefOf.PositiveEvent);
|
|
Find.LetterStack.ReceiveLetter(letter);
|
|
|
|
LactationUtility.StartLactating(p, true);
|
|
isActive = false;
|
|
InductionCompletionPercent = 0.80f; //start at 80% in case they ever lose lactating again
|
|
}
|
|
}
|
|
|
|
public void MassageBreasts()
|
|
{
|
|
InductionCompletionPercent += (float)1 / (Props.DaysToLactating * (Props.TimesMassagedADay + Rand.Value));
|
|
TicksSinceLastMassage = GenTicks.TicksGame;
|
|
CanMassage = false;
|
|
}
|
|
|
|
public CompProperties_InduceLactation Props
|
|
{
|
|
get
|
|
{
|
|
return (CompProperties_InduceLactation)props;
|
|
}
|
|
}
|
|
|
|
public override IEnumerable<FloatMenuOption> CompFloatMenuOptions(Pawn pawn)
|
|
{
|
|
if (pawn != this.parent as Pawn && !((this.parent as Pawn).IsSlaveOfColony || (this.parent as Pawn).IsPrisonerOfColony)) yield break;
|
|
if (LactationUtility.IsLactating(pawn)) yield break;
|
|
if(LactationUtility.HasMilkableBreasts(this.parent as Pawn))
|
|
{
|
|
if(isActive)
|
|
{
|
|
//stop trying to induce lactation
|
|
yield return new FloatMenuOption("Undesignate induce lactation", () =>
|
|
{
|
|
isActive = false;
|
|
});
|
|
}
|
|
else
|
|
{
|
|
//induce lactation
|
|
yield return new FloatMenuOption("Designate induce lactation", () =>
|
|
{
|
|
isActive = true;
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
yield return new FloatMenuOption("Designate induce lactation (no milkable breasts)", null);
|
|
}
|
|
|
|
yield break;
|
|
}
|
|
|
|
public override void PostExposeData()
|
|
{
|
|
base.PostExposeData();
|
|
Scribe_Values.Look<float>(ref this.InductionCompletionPercent, "InductionCompletionPercent", 0f);
|
|
Scribe_Values.Look<int>(ref this.TicksSinceLastMassage, "TicksSinceLastMassage", -60000);
|
|
Scribe_Values.Look<int>(ref this.lastHumanLactationIngestedTick, "lastHumanLactationIngestedTick", 0);
|
|
|
|
Scribe_Values.Look<bool>(ref this.isActive, "IsActive", false);
|
|
Scribe_Values.Look<bool>(ref this.CanMassage, "CanMassage", false);
|
|
|
|
}
|
|
|
|
public override string CompInspectStringExtra()
|
|
{
|
|
if (!isActive) return null;
|
|
|
|
string result = "Induce lactation completion: " + InductionCompletionPercent.ToStringPercent();
|
|
|
|
if(CanMassage)
|
|
{
|
|
result += "\nReady to massage.";
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|