This commit is contained in:
2025-08-14 16:45:40 +08:00
parent acb5dcebc0
commit 975c18df4a
2 changed files with 13 additions and 40 deletions

View File

@@ -9,59 +9,36 @@ namespace WulaFallenEmpire
{
public float minEnergyLevelPercentage = 0.3f;
public float maxEnergyLevelPercentage = 0.9f;
public float emergencyPriority = 9.5f;
public override float GetPriority(Pawn pawn)
{
if (pawn.health.hediffSet.HasHediff(DefDatabase<HediffDef>.GetNamed("WULA_ChargingHediff")))
{
Log.Message($"[JobGiver_WulaGetEnergy] {pawn.Name.ToStringShort} already has charging hediff. Priority 0.");
return 0f;
}
Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
if (energyNeed == null)
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
if (energyNeed == null || energyNeed.CurLevelPercentage >= minEnergyLevelPercentage)
{
return 0f;
}
if (energyNeed.CurLevelPercentage < minEnergyLevelPercentage)
{
return emergencyPriority;
}
return 0f;
return 9.5f;
}
protected override Job TryGiveJob(Pawn pawn)
{
Log.Message($"[JobGiver_WulaGetEnergy] Trying to give job to {pawn.Name.ToStringShort}.");
if (pawn.health.hediffSet.HasHediff(DefDatabase<HediffDef>.GetNamed("WULA_ChargingHediff")))
{
Log.Message($"[JobGiver_WulaGetEnergy] {pawn.Name.ToStringShort} already has charging hediff. Job cancelled.");
return null;
}
Need_WulaEnergy energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
var energyNeed = pawn.needs.TryGetNeed<Need_WulaEnergy>();
if (energyNeed == null || energyNeed.CurLevelPercentage >= maxEnergyLevelPercentage)
{
Log.Message($"[JobGiver_WulaGetEnergy] Energy level for {pawn.Name.ToStringShort} is sufficient. Job cancelled.");
return null;
}
if (!TryFindBestEnergySourceFor(pawn, out Thing energySource))
if (!TryFindBestEnergySourceFor(pawn, out var energySource))
{
Log.Message($"[JobGiver_WulaGetEnergy] No energy source found for {pawn.Name.ToStringShort}. Job cancelled.");
return null;
}
if (energySource is Building_Bed)
{
Log.Message($"[JobGiver_WulaGetEnergy] Found bed for {pawn.Name.ToStringShort}. Creating WULA_LayDownToCharge job.");
return JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_LayDownToCharge"), energySource);
}
Job job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy"), energySource);
var job = JobMaker.MakeJob(DefDatabase<JobDef>.GetNamed("WULA_IngestWulaEnergy"), energySource);
job.count = 1;
return job;
}
@@ -109,20 +86,16 @@ namespace WulaFallenEmpire
9999f,
b =>
{
Building_Bed bed_internal = b as Building_Bed;
if (bed_internal == null) return false;
var chargingComp = bed_internal.GetComp<CompChargingBed>();
if (chargingComp == null) return false;
if (!(b is Building_Bed bed_internal)) return false;
if (bed_internal.GetComp<CompChargingBed>() == null) return false;
var powerComp = bed_internal.GetComp<CompPowerTrader>();
return !bed_internal.IsForbidden(pawn) &&
pawn.CanReserve(bed_internal) &&
!bed_internal.Medical &&
!bed_internal.IsBurning() &&
powerComp != null &&
// 使用 pawn.CanReserve 是最可靠的方法,它包含了对 ملكية، حظر، منطقة، الخ 的所有检查。
return powerComp != null &&
powerComp.PowerOn &&
!bed_internal.CurOccupants.Any();
pawn.CanReserve(bed_internal);
}
);
return bed;