暂存
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
using RimWorld;
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using System.Linq;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
@@ -17,60 +17,53 @@ namespace WulaFallenEmpire
|
||||
|
||||
public class CompChargingBed : ThingComp
|
||||
{
|
||||
private Pawn lastOccupant;
|
||||
private CompProperties_ChargingBed Props => (CompProperties_ChargingBed)props;
|
||||
public CompProperties_ChargingBed Props => (CompProperties_ChargingBed)props;
|
||||
|
||||
private List<Pawn> chargingPawns = new List<Pawn>();
|
||||
|
||||
public override void CompTick()
|
||||
{
|
||||
base.CompTick();
|
||||
var bed = (Building_Bed)parent;
|
||||
var occupants = new HashSet<Pawn>(bed.CurOccupants);
|
||||
|
||||
if (parent is Building_Bed bed)
|
||||
for (int i = chargingPawns.Count - 1; i >= 0; i--)
|
||||
{
|
||||
Pawn currentOccupant = bed.CurOccupants.FirstOrDefault();
|
||||
|
||||
if (currentOccupant != lastOccupant)
|
||||
var pawn = chargingPawns[i];
|
||||
if (!occupants.Contains(pawn))
|
||||
{
|
||||
Log.Message($"[CompChargingBed] Occupant changed. Old: {lastOccupant?.Name.ToStringShort ?? "null"}, New: {currentOccupant?.Name.ToStringShort ?? "null"} on {parent.Label}");
|
||||
}
|
||||
|
||||
// Pawn starts resting
|
||||
if (currentOccupant != null && lastOccupant == null)
|
||||
{
|
||||
if (IsWula(currentOccupant))
|
||||
var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef);
|
||||
if (hediff != null)
|
||||
{
|
||||
Log.Message($"[CompChargingBed] {currentOccupant.Name.ToStringShort} started resting. Applying hediff.");
|
||||
ApplyChargingHediff(currentOccupant);
|
||||
pawn.health.RemoveHediff(hediff);
|
||||
}
|
||||
chargingPawns.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
if (bed.AnyOccupants)
|
||||
{
|
||||
foreach (var pawn in bed.CurOccupants)
|
||||
{
|
||||
if (pawn.def.defName == Props.raceDefName)
|
||||
{
|
||||
if (!pawn.health.hediffSet.HasHediff(Props.hediffDef))
|
||||
{
|
||||
pawn.health.AddHediff(Props.hediffDef);
|
||||
if (!chargingPawns.Contains(pawn))
|
||||
{
|
||||
chargingPawns.Add(pawn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Pawn stops resting
|
||||
else if (currentOccupant == null && lastOccupant != null)
|
||||
{
|
||||
// Logic to remove hediff is now in the JobDriver, but we can log the event.
|
||||
if (IsWula(lastOccupant))
|
||||
{
|
||||
Log.Message($"[CompChargingBed] {lastOccupant.Name.ToStringShort} stopped resting.");
|
||||
}
|
||||
}
|
||||
|
||||
lastOccupant = currentOccupant;
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsWula(Pawn pawn)
|
||||
public override void PostExposeData()
|
||||
{
|
||||
return pawn.def.defName == Props.raceDefName || pawn.def.defName == (Props.raceDefName + "Real");
|
||||
base.PostExposeData();
|
||||
Scribe_Collections.Look(ref chargingPawns, "chargingPawns", LookMode.Reference);
|
||||
}
|
||||
|
||||
private void ApplyChargingHediff(Pawn pawn)
|
||||
{
|
||||
var powerComp = parent.GetComp<CompPowerTrader>();
|
||||
Log.Message($"[CompChargingBed] Trying to apply hediff to {pawn.Name.ToStringShort}. PowerOn: {powerComp?.PowerOn}. HasHediff: {pawn.health.hediffSet.HasHediff(Props.hediffDef)}");
|
||||
if (powerComp != null && powerComp.PowerOn && !pawn.health.hediffSet.HasHediff(Props.hediffDef))
|
||||
{
|
||||
Log.Message($"[CompChargingBed] Adding hediff to {pawn.Name.ToStringShort}.");
|
||||
pawn.health.AddHediff(Props.hediffDef);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user