rimworld-animations-patch_m.../Source/Scripts/Comps/CompPawnSexData.cs

98 lines
3.6 KiB
C#
Raw Normal View History

2022-09-30 23:34:08 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RimWorld;
using Verse;
using AlienRace;
using UnityEngine;
using rjw;
2022-09-30 23:34:08 +00:00
namespace Rimworld_Animations_Patch
{
public class CompPawnSexData : ThingComp
{
public HandAnimationDef handAnimationDef = null;
public Graphic handGraphic = null;
public List<BodyPartRecord> hands = new List<BodyPartRecord>();
2023-02-04 07:13:57 +00:00
public float sizeOfPenis = 0f;
public float sizeOfBreasts = 0f;
2022-09-30 23:34:08 +00:00
public Dictionary<AlienPartGenerator.BodyAddon, BodyAddonData> bodyAddonData = new Dictionary<AlienPartGenerator.BodyAddon, BodyAddonData>();
public Dictionary<AlienPartGenerator.BodyAddon, BodyAddonData> bodyAddonDataPortraits = new Dictionary<AlienPartGenerator.BodyAddon, BodyAddonData>();
2023-02-06 00:41:57 +00:00
private Pawn pawn { get { return parent as Pawn; } }
private bool initialized;
2022-09-30 23:34:08 +00:00
// Refresh graphics on load
2023-02-06 00:41:57 +00:00
public override void CompTick()
2022-09-30 23:34:08 +00:00
{
2023-02-06 00:41:57 +00:00
if (initialized == false)
{
pawn?.Drawer?.renderer?.graphics?.ResolveAllGraphics();
//if (pawn?.jobs?.curDriver is JobDriver_SexBaseInitiator && pawn.pather.Moving == false)
//{ (pawn.jobs.curDriver as JobDriver_SexBaseInitiator).Start(); }
2023-02-06 00:41:57 +00:00
initialized = true;
}
}
2022-09-30 23:34:08 +00:00
2023-02-06 00:41:57 +00:00
public BodyAddonData GetBodyAddonData(AlienPartGenerator.BodyAddon bodyAddon, bool isPortrait)
{
2022-10-01 03:51:09 +00:00
if (pawn == null || (pawn.Map != Find.CurrentMap && pawn.holdingOwner == null) || bodyAddon == null) return null;
2022-09-30 23:34:08 +00:00
if (isPortrait)
{
if (bodyAddonDataPortraits.TryGetValue(bodyAddon, out BodyAddonData bodyAddonDatum) == false)
{
bodyAddonDatum = new BodyAddonData(pawn, bodyAddon, true);
bodyAddonDataPortraits.Add(bodyAddon, bodyAddonDatum);
}
return bodyAddonDatum;
}
else
{
if (bodyAddonData.TryGetValue(bodyAddon, out BodyAddonData bodyAddonDatum) == false)
{
bodyAddonDatum = new BodyAddonData(pawn, bodyAddon);
bodyAddonData.Add(bodyAddon, bodyAddonDatum);
}
return bodyAddonDatum;
}
}
public void UpdateBodyAddonVisibility()
{
foreach (KeyValuePair<AlienPartGenerator.BodyAddon, BodyAddonData> kvp in bodyAddonData)
2022-10-01 03:51:09 +00:00
{ kvp.Value?.UpdateVisibility(); }
2022-09-30 23:34:08 +00:00
foreach (KeyValuePair<AlienPartGenerator.BodyAddon, BodyAddonData> kvp in bodyAddonDataPortraits)
2022-10-01 03:51:09 +00:00
{ kvp.Value?.UpdateVisibility(); }
2022-09-30 23:34:08 +00:00
}
2023-02-04 07:13:57 +00:00
public void UpdateBodyPartCountAndSize()
2022-09-30 23:34:08 +00:00
{
hands = pawn?.health?.hediffSet?.GetNotMissingParts()?.Where(x => x.def.tags.Contains(RimWorld.BodyPartTagDefOf.ManipulationLimbCore))?.ToList();
2023-02-04 07:13:57 +00:00
2023-02-06 00:41:57 +00:00
Hediff hediffPenis = pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def.defName.Contains("penis", StringComparison.OrdinalIgnoreCase) == true);
2023-02-04 07:13:57 +00:00
sizeOfPenis = hediffPenis != null ? hediffPenis.Severity : 0f;
2023-02-06 00:41:57 +00:00
Hediff hediffBreasts = pawn?.health?.hediffSet?.hediffs?.FirstOrDefault(x => x.def.defName.Contains("breasts", StringComparison.OrdinalIgnoreCase) == true);
2023-02-04 07:13:57 +00:00
sizeOfBreasts = hediffBreasts != null ? hediffBreasts.Severity : 0f;
2022-09-30 23:34:08 +00:00
}
public int GetNumberOfHands()
{
2023-02-06 00:41:57 +00:00
if (hands.NullOrEmpty()) return 0;
2022-09-30 23:34:08 +00:00
return hands.Count;
}
}
}