暂存3
This commit is contained in:
Binary file not shown.
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user