diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index a55bd7d4..9c18bfcf 100644 Binary files a/1.6/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml b/1.6/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml index 31025ccc..b691f508 100644 --- a/1.6/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml +++ b/1.6/1.6/Defs/ThingDefs_Buildings/Buildings_WULA.xml @@ -271,6 +271,7 @@ Building_Bed 一台供乌拉帝国合成人进行机体修复的检修站。 + Normal Wula/Building/WULA_Charging_Station_Synth Graphic_Multi diff --git a/Source/WulaFallenEmpire/CompChargingBed.cs b/Source/WulaFallenEmpire/CompChargingBed.cs index fab3111a..0dacb370 100644 --- a/Source/WulaFallenEmpire/CompChargingBed.cs +++ b/Source/WulaFallenEmpire/CompChargingBed.cs @@ -24,14 +24,34 @@ namespace WulaFallenEmpire public override void CompTick() { base.CompTick(); + Log.Message("[CompChargingBed] CompTick running."); + var bed = (Building_Bed)parent; - var occupants = new HashSet(bed.CurOccupants); + if (!bed.AnyOccupants) + { + for (int i = chargingPawns.Count - 1; i >= 0; i--) + { + var p = chargingPawns[i]; + var h = p.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef); + if (h != null) + { + Log.Message($"[CompChargingBed] Bed empty. Removing hediff from {p.LabelShort}."); + p.health.RemoveHediff(h); + } + } + chargingPawns.Clear(); + return; + } + + var currentOccupants = new HashSet(bed.CurOccupants); + Log.Message($"[CompChargingBed] Found {currentOccupants.Count} occupants."); for (int i = chargingPawns.Count - 1; i >= 0; i--) { var pawn = chargingPawns[i]; - if (!occupants.Contains(pawn)) + if (!currentOccupants.Contains(pawn)) { + Log.Message($"[CompChargingBed] Pawn {pawn.LabelShort} left the bed. Removing hediff."); var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef); if (hediff != null) { @@ -41,20 +61,22 @@ namespace WulaFallenEmpire } } - if (bed.AnyOccupants) + foreach (var pawn in currentOccupants) { - foreach (var pawn in bed.CurOccupants) + Log.Message($"[CompChargingBed] Checking occupant: {pawn.LabelShort}."); + bool hasNeed = pawn.needs.TryGetNeed() != null; + Log.Message($"[CompChargingBed] Does {pawn.LabelShort} have Need_WulaEnergy? {hasNeed}"); + + if (hasNeed) { - if (pawn.def.defName == Props.raceDefName) + if (!pawn.health.hediffSet.HasHediff(Props.hediffDef)) { - if (!pawn.health.hediffSet.HasHediff(Props.hediffDef)) - { - pawn.health.AddHediff(Props.hediffDef); - if (!chargingPawns.Contains(pawn)) - { - chargingPawns.Add(pawn); - } - } + Log.Message($"[CompChargingBed] Adding charging hediff to {pawn.LabelShort}."); + pawn.health.AddHediff(Props.hediffDef); + } + if (!chargingPawns.Contains(pawn)) + { + chargingPawns.Add(pawn); } } } diff --git a/Source/WulaFallenEmpire/JobDriver_WulaLayDownToCharge.cs b/Source/WulaFallenEmpire/JobDriver_WulaLayDownToCharge.cs index 0f6e5b6d..eda0b584 100644 --- a/Source/WulaFallenEmpire/JobDriver_WulaLayDownToCharge.cs +++ b/Source/WulaFallenEmpire/JobDriver_WulaLayDownToCharge.cs @@ -14,33 +14,9 @@ namespace WulaFallenEmpire protected override IEnumerable MakeNewToils() { - this.AddFinishAction(jobCondition => - { - var bed = (Building_Bed)job.targetA.Thing; - var comp = bed.GetComp(); - if (comp == null) return; - var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(comp.Props.hediffDef); - if (hediff != null) - { - pawn.health.RemoveHediff(hediff); - } - }); - yield return Toils_Bed.GotoBed(TargetIndex.A); Toil layDownAndCharge = Toils_LayDown.LayDown(TargetIndex.A, true, false, false, false); - layDownAndCharge.AddPreInitAction(delegate - { - if (!pawn.health.hediffSet.HasHediff(HediffDef.Named("WULA_ChargingHediff"))) - { - var bed = (Building_Bed)job.targetA.Thing; - var comp = bed.GetComp(); - if (comp != null && !pawn.health.hediffSet.HasHediff(comp.Props.hediffDef)) - { - pawn.health.AddHediff(comp.Props.hediffDef); - } - } - }); layDownAndCharge.tickAction = delegate {