2022-05-11 15:37:14 +00:00
|
|
|
|
using rjw;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
using RJWSexperience.ExtensionMethods;
|
2021-09-24 15:14:02 +00:00
|
|
|
|
using Verse;
|
|
|
|
|
|
2022-06-13 05:51:09 +00:00
|
|
|
|
namespace RJWSexperience.SexHistory
|
2021-09-24 15:14:02 +00:00
|
|
|
|
{
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public class SexPartnerHistoryRecord : IExposable
|
|
|
|
|
{
|
|
|
|
|
public string PartnerID { get; set; }
|
2021-10-24 10:26:59 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
protected Pawn partner = null;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
protected string labelCache;
|
|
|
|
|
protected int totalSexCount = 0;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
protected int raped = 0;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
protected int rapedMe = 0;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
protected int orgasms = 0;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
protected xxx.rjwSextype bestSextype = xxx.rjwSextype.None;
|
|
|
|
|
protected float bestSatisfaction = 0;
|
|
|
|
|
protected bool iTookVirgin = false;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
protected bool incest = false;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
protected int recentSexTickAbs = 0;
|
|
|
|
|
protected int bestSexTickAbs = 0;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
protected bool cannotLoadPawnData = false;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
protected ThingDef raceCache;
|
2021-10-24 10:26:59 +00:00
|
|
|
|
|
2022-05-11 15:37:14 +00:00
|
|
|
|
public xxx.rjwSextype BestSextype => bestSextype;
|
|
|
|
|
public float BestSatisfaction => bestSatisfaction;
|
|
|
|
|
public int TotalSexCount => totalSexCount;
|
|
|
|
|
public int OrgasmCount => orgasms;
|
|
|
|
|
public bool IamFirst => iTookVirgin;
|
|
|
|
|
public bool Incest => incest;
|
|
|
|
|
public int Raped => raped;
|
|
|
|
|
public int RapedMe => rapedMe;
|
|
|
|
|
public int RecentSexTickAbs => recentSexTickAbs;
|
|
|
|
|
public int BestSexTickAbs => bestSexTickAbs;
|
|
|
|
|
public int BestSexElapsedTicks => GenTicks.TicksAbs - bestSexTickAbs;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public Pawn Partner
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (!cannotLoadPawnData && partner == null)
|
|
|
|
|
{
|
|
|
|
|
LoadPartnerPawn(PartnerID);
|
|
|
|
|
if (partner == null) cannotLoadPawnData = true;
|
|
|
|
|
}
|
|
|
|
|
return partner;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-11 15:37:14 +00:00
|
|
|
|
public string Label
|
2022-04-03 17:20:14 +00:00
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
if (Partner != null)
|
|
|
|
|
labelCache = Partner.Label;
|
|
|
|
|
return labelCache;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public ThingDef Race
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (Partner != null)
|
2022-05-11 15:37:14 +00:00
|
|
|
|
raceCache = Partner.def;
|
|
|
|
|
return raceCache;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-10-24 10:26:59 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public SexPartnerHistoryRecord() { }
|
2021-09-24 15:14:02 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public SexPartnerHistoryRecord(Pawn pawn, bool incest = false)
|
|
|
|
|
{
|
|
|
|
|
this.partner = pawn;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
this.labelCache = pawn.Label;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
this.incest = incest;
|
2022-05-11 15:37:14 +00:00
|
|
|
|
this.raceCache = pawn.def;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
2021-09-24 15:14:02 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public void ExposeData()
|
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
Scribe_Values.Look(ref labelCache, "namecache");
|
|
|
|
|
Scribe_Values.Look(ref totalSexCount, "totalsexhad", 0);
|
2022-05-06 15:13:59 +00:00
|
|
|
|
Scribe_Values.Look(ref raped, "raped", 0);
|
2022-05-11 15:37:14 +00:00
|
|
|
|
Scribe_Values.Look(ref rapedMe, "rapedme", 0);
|
2022-05-06 15:13:59 +00:00
|
|
|
|
Scribe_Values.Look(ref orgasms, "orgasms", 0);
|
2022-05-11 15:37:14 +00:00
|
|
|
|
Scribe_Values.Look(ref bestSextype, "bestsextype", xxx.rjwSextype.None);
|
|
|
|
|
Scribe_Values.Look(ref bestSatisfaction, "bestsatisfaction", 0f);
|
|
|
|
|
Scribe_Values.Look(ref iTookVirgin, "itookvirgin", false);
|
2022-05-06 15:13:59 +00:00
|
|
|
|
Scribe_Values.Look(ref incest, "incest", false);
|
2022-05-11 15:37:14 +00:00
|
|
|
|
Scribe_Values.Look(ref recentSexTickAbs, "recentsextickabs", 0);
|
|
|
|
|
Scribe_Values.Look(ref bestSexTickAbs, "bestsextickabs", 0);
|
|
|
|
|
Scribe_Defs.Look(ref raceCache, "race");
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
2021-09-24 15:14:02 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public void RecordSex(SexProps props)
|
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
totalSexCount++;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
if (props.isRape)
|
|
|
|
|
{
|
|
|
|
|
if (partner == props.GetInteractionInitiator())
|
2022-05-11 15:37:14 +00:00
|
|
|
|
rapedMe++;
|
|
|
|
|
else
|
2022-04-03 17:20:14 +00:00
|
|
|
|
raped++;
|
|
|
|
|
}
|
2022-05-11 15:37:14 +00:00
|
|
|
|
recentSexTickAbs = GenTicks.TicksAbs;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
2021-09-24 15:14:02 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public void RecordSatisfaction(SexProps props, float satisfaction)
|
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
orgasms++;
|
|
|
|
|
|
|
|
|
|
if (satisfaction > bestSatisfaction)
|
2022-04-03 17:20:14 +00:00
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
bestSextype = props.sexType;
|
|
|
|
|
bestSatisfaction = satisfaction;
|
|
|
|
|
bestSexTickAbs = GenTicks.TicksAbs;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2021-09-24 15:14:02 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
public void TookVirgin()
|
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
iTookVirgin = true;
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
2021-10-24 10:26:59 +00:00
|
|
|
|
|
2022-04-03 17:20:14 +00:00
|
|
|
|
protected void LoadPartnerPawn(string partnerID)
|
|
|
|
|
{
|
|
|
|
|
foreach (Map map in Find.Maps)
|
|
|
|
|
{
|
2022-05-11 15:37:14 +00:00
|
|
|
|
partner = map.mapPawns.AllPawns.Find(x => x.ThingID.Equals(partnerID));
|
2022-04-03 17:20:14 +00:00
|
|
|
|
if (partner != null) return;
|
|
|
|
|
}
|
2022-05-11 15:37:14 +00:00
|
|
|
|
partner = Find.WorldPawns.AllPawnsAliveOrDead.Find(x => x.ThingID.Equals(partnerID));
|
2022-04-03 17:20:14 +00:00
|
|
|
|
}
|
2022-05-11 15:37:14 +00:00
|
|
|
|
}
|
2021-09-24 15:14:02 +00:00
|
|
|
|
}
|