充电床V2
This commit is contained in:
Binary file not shown.
@@ -271,6 +271,7 @@
|
|||||||
<thingClass>Building_Bed</thingClass>
|
<thingClass>Building_Bed</thingClass>
|
||||||
<label>合成人修复站</label>
|
<label>合成人修复站</label>
|
||||||
<description>一台供乌拉帝国合成人进行机体修复的检修站。</description>
|
<description>一台供乌拉帝国合成人进行机体修复的检修站。</description>
|
||||||
|
<tickerType>Normal</tickerType>
|
||||||
<graphicData>
|
<graphicData>
|
||||||
<texPath>Wula/Building/WULA_Charging_Station_Synth</texPath>
|
<texPath>Wula/Building/WULA_Charging_Station_Synth</texPath>
|
||||||
<graphicClass>Graphic_Multi</graphicClass>
|
<graphicClass>Graphic_Multi</graphicClass>
|
||||||
|
|||||||
@@ -24,14 +24,34 @@ namespace WulaFallenEmpire
|
|||||||
public override void CompTick()
|
public override void CompTick()
|
||||||
{
|
{
|
||||||
base.CompTick();
|
base.CompTick();
|
||||||
|
Log.Message("[CompChargingBed] CompTick running.");
|
||||||
|
|
||||||
var bed = (Building_Bed)parent;
|
var bed = (Building_Bed)parent;
|
||||||
var occupants = new HashSet<Pawn>(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<Pawn>(bed.CurOccupants);
|
||||||
|
Log.Message($"[CompChargingBed] Found {currentOccupants.Count} occupants.");
|
||||||
|
|
||||||
for (int i = chargingPawns.Count - 1; i >= 0; i--)
|
for (int i = chargingPawns.Count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
var pawn = chargingPawns[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);
|
var hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffDef);
|
||||||
if (hediff != null)
|
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<Need_WulaEnergy>() != 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))
|
Log.Message($"[CompChargingBed] Adding charging hediff to {pawn.LabelShort}.");
|
||||||
{
|
pawn.health.AddHediff(Props.hediffDef);
|
||||||
pawn.health.AddHediff(Props.hediffDef);
|
}
|
||||||
if (!chargingPawns.Contains(pawn))
|
if (!chargingPawns.Contains(pawn))
|
||||||
{
|
{
|
||||||
chargingPawns.Add(pawn);
|
chargingPawns.Add(pawn);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,33 +14,9 @@ namespace WulaFallenEmpire
|
|||||||
|
|
||||||
protected override IEnumerable<Toil> MakeNewToils()
|
protected override IEnumerable<Toil> MakeNewToils()
|
||||||
{
|
{
|
||||||
this.AddFinishAction(jobCondition =>
|
|
||||||
{
|
|
||||||
var bed = (Building_Bed)job.targetA.Thing;
|
|
||||||
var comp = bed.GetComp<CompChargingBed>();
|
|
||||||
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);
|
yield return Toils_Bed.GotoBed(TargetIndex.A);
|
||||||
|
|
||||||
Toil layDownAndCharge = Toils_LayDown.LayDown(TargetIndex.A, true, false, false, false);
|
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<CompChargingBed>();
|
|
||||||
if (comp != null && !pawn.health.hediffSet.HasHediff(comp.Props.hediffDef))
|
|
||||||
{
|
|
||||||
pawn.health.AddHediff(comp.Props.hediffDef);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
layDownAndCharge.tickAction = delegate
|
layDownAndCharge.tickAction = delegate
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user