From fa442bd7fdc1fe9ff7e72e288efe4a921a7ee20b Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Fri, 8 Aug 2025 19:31:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98feat(maintenance):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BB=B4=E6=8A=A4=E8=88=B1=E5=8F=8A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=9C=80=E6=B1=82=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为乌拉族引入了新的“机体维护”需求,通过`WULA_Maintenance_Neglect`健康状况(Hediff)体现。该状况会随时间推移而恶化,影响角色能力。 新增建筑“维护舱”(`WULA_MaintenancePod`),乌拉族成员可进入其中进行维护,以清除“维护疏忽”的负面效果。维护过程需要消耗电力和零部件,所需零部件数量与负面效果的严重程度相关。 实现了配套的自动化工作逻辑: - 当维护需求达到阈值时,角色会自动进入维护舱。 - 当维护舱缺少零部件时,搬运工会自动为其装填。 此外,事件系统中增加了一个新的条件 `Condition_FactionExists`。 --- 1.6/Assemblies/WulaFallenEmpire.dll | Bin 163840 -> 165376 bytes .../HediffDefs/Hediffs_WULA_Maintenance.xml | 60 ++++ 1.6/Defs/JobDefs/WULA_Jobs_Maintenance.xml | 17 + .../WULA_Buildings_Maintenance.xml | 87 +++++ 1.6/Defs/WorkGiverDefs/WULA_WorkGivers.xml | 27 ++ .../Building_MaintenancePod.cs | 35 ++ Source/WulaFallenEmpire/CompMaintenancePod.cs | 298 ++++++++++++++++++ .../WulaFallenEmpire/EventSystem/Condition.cs | 24 ++ .../HediffComp_MaintenanceNeed.cs | 40 +++ .../JobDriver_EnterMaintenancePod.cs | 42 +++ .../JobDriver_LoadComponents.cs | 53 ++++ Source/WulaFallenEmpire/Job_Maintenance.cs | 25 ++ .../WorkGiver_EnterMaintenancePod.cs | 62 ++++ .../WorkGiver_LoadComponents.cs | 66 ++++ .../WulaFallenEmpire/WulaFallenEmpire.csproj | 5 +- 15 files changed, 840 insertions(+), 1 deletion(-) create mode 100644 1.6/Defs/HediffDefs/Hediffs_WULA_Maintenance.xml create mode 100644 1.6/Defs/JobDefs/WULA_Jobs_Maintenance.xml create mode 100644 1.6/Defs/ThingDefs_Buildings/WULA_Buildings_Maintenance.xml create mode 100644 1.6/Defs/WorkGiverDefs/WULA_WorkGivers.xml create mode 100644 Source/WulaFallenEmpire/Building_MaintenancePod.cs create mode 100644 Source/WulaFallenEmpire/CompMaintenancePod.cs create mode 100644 Source/WulaFallenEmpire/HediffComp_MaintenanceNeed.cs create mode 100644 Source/WulaFallenEmpire/JobDriver_EnterMaintenancePod.cs create mode 100644 Source/WulaFallenEmpire/JobDriver_LoadComponents.cs create mode 100644 Source/WulaFallenEmpire/Job_Maintenance.cs create mode 100644 Source/WulaFallenEmpire/WorkGiver_EnterMaintenancePod.cs create mode 100644 Source/WulaFallenEmpire/WorkGiver_LoadComponents.cs diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index 4c794e2fade7eb95092331bba589be3fc7d70167..f177ec77c36bead194b8bed9ba9e3f278a661c28 100644 GIT binary patch delta 68871 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 VRZPE_nI_n77p!A?&p6S59RRsCCF=kH delta 67061 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 + + + WULA_Maintenance_Neglect + + 如果缺乏定期维护,身体机能将会出现衰退迹象。需要进入维护舱进行修复。 + HediffWithComps + (0.8, 0.35, 0.35) + true + +
  • + 60 + 0.004 + 0.02 +
  • +
    + +
  • + + 0 + +
  • + Consciousness + 0.1 +
  • + + +
  • + + 0.5 + +
  • + Consciousness + 0 +
  • + + +
  • + + 0.75 + +
  • + Consciousness + -0.10 +
  • + + +
  • + + 1.0 + +
  • + Consciousness + -0.25 +
  • + + +
    +
    +
    \ No newline at end of file diff --git a/1.6/Defs/JobDefs/WULA_Jobs_Maintenance.xml b/1.6/Defs/JobDefs/WULA_Jobs_Maintenance.xml new file mode 100644 index 00000000..29f026db --- /dev/null +++ b/1.6/Defs/JobDefs/WULA_Jobs_Maintenance.xml @@ -0,0 +1,17 @@ + + + + + WULA_LoadComponentsToMaintenancePod + WulaFallenEmpire.JobDriver_LoadComponents + 正在为维护舱装填零部件。 + ToCellNonStorage + + + + WULA_EnterMaintenancePod + WulaFallenEmpire.JobDriver_EnterMaintenancePod + 正在进入维护舱。 + + + \ No newline at end of file diff --git a/1.6/Defs/ThingDefs_Buildings/WULA_Buildings_Maintenance.xml b/1.6/Defs/ThingDefs_Buildings/WULA_Buildings_Maintenance.xml new file mode 100644 index 00000000..6241a359 --- /dev/null +++ b/1.6/Defs/ThingDefs_Buildings/WULA_Buildings_Maintenance.xml @@ -0,0 +1,87 @@ + + + + + WULA_MaintenancePod + + 一个为乌拉族设计的全自动维护舱。乌拉族需要定期进入其中进行身体机能的维护和校准,否则他们的身体会逐渐衰弱。维护过程需要消耗零部件。 + true + + Things/Building/Misc/BiosculpterPod/BiosculpterPod + Graphic_Multi + + (2.9,0.6,1.9) + + (3, 2) + + RealtimeOnly + true + South + Building + PassThroughOnly + 42 + true + 0.5 + false + + 250 + 20000 + 50 + 0.5 + -5 + + (3,2) + (0,0,2) + true + + 150 + 10 + 2 + + 8 + + BuildingDestroyed_Metal_Big + 1800 + + + +
  • ComponentIndustrial
  • +
    +
    +
    +
    + Misc + MinifiedThing + +
  • BuildingsMisc
  • +
    + Normal + +
  • + CompPowerTrader + 50 +
  • +
  • +
  • + 60000 + 250 + 50 + WULA_Maintenance_Neglect + ComponentIndustrial + 5 + 0 + 0.75 + BiosculpterPod_Enter + BiosculpterPod_Exit + BiosculpterPod_Operating +
  • +
    + +
  • PlaceWorker_PreventInteractionSpotOverlap
  • +
    + +
  • ITab_Storage
  • +
    +
    + +
    \ No newline at end of file diff --git a/1.6/Defs/WorkGiverDefs/WULA_WorkGivers.xml b/1.6/Defs/WorkGiverDefs/WULA_WorkGivers.xml new file mode 100644 index 00000000..dd5a0365 --- /dev/null +++ b/1.6/Defs/WorkGiverDefs/WULA_WorkGivers.xml @@ -0,0 +1,27 @@ + + + + + WULA_LoadComponentsToMaintenancePod + + WulaFallenEmpire.WorkGiver_LoadComponents + Hauling + 装填 + 装填于 + 110 + +
  • Manipulation
  • +
    +
    + + + WULA_EnterMaintenancePod + + WulaFallenEmpire.WorkGiver_EnterMaintenancePod + Patient + 进行维护 + 进行维护于 + 100 + + +
    \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Building_MaintenancePod.cs b/Source/WulaFallenEmpire/Building_MaintenancePod.cs new file mode 100644 index 00000000..ec8209eb --- /dev/null +++ b/Source/WulaFallenEmpire/Building_MaintenancePod.cs @@ -0,0 +1,35 @@ +using RimWorld; +using Verse; + +namespace WulaFallenEmpire +{ + public class CompProperties_MaintenanceCycle : CompProperties_BiosculpterPod_BaseCycle + { + public HediffDef hediffToRemove; + + public CompProperties_MaintenanceCycle() + { + compClass = typeof(CompMaintenanceCycle); + } + } + + public class CompMaintenanceCycle : CompBiosculpterPod_Cycle + { + public new CompProperties_MaintenanceCycle Props => (CompProperties_MaintenanceCycle)props; + + public override void CycleCompleted(Pawn pawn) + { + if (pawn == null) + { + return; + } + + Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffToRemove); + if (hediff != null) + { + hediff.Severity = 0f; + Messages.Message("WULA_MaintenanceCycleComplete".Translate(pawn.Named("PAWN")), pawn, MessageTypeDefOf.PositiveEvent); + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/CompMaintenancePod.cs b/Source/WulaFallenEmpire/CompMaintenancePod.cs new file mode 100644 index 00000000..32a17baa --- /dev/null +++ b/Source/WulaFallenEmpire/CompMaintenancePod.cs @@ -0,0 +1,298 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + // Properties for our custom maintenance pod + public class CompProperties_MaintenancePod : CompProperties + { + public SoundDef enterSound; + public SoundDef exitSound; + public EffecterDef operatingEffecter; + public int durationTicks = 60000; // Default to 1 day + public float powerConsumptionRunning = 250f; + public float powerConsumptionIdle = 50f; + public HediffDef hediffToRemove; + public ThingDef componentDef; + public float componentCostPerSeverity = 1f; // How many components per 1.0 severity + public int baseComponentCost = 0; // A flat cost in addition to severity cost + public float minSeverityToMaintain = 0.75f; // The hediff severity required to trigger maintenance + + public CompProperties_MaintenancePod() + { + compClass = typeof(CompMaintenancePod); + } + } + + [StaticConstructorOnStartup] + public class CompMaintenancePod : ThingComp, IThingHolder, IStoreSettingsParent + { + // ===================== Fields ===================== + private ThingOwner innerContainer; + private CompPowerTrader powerComp; + private StorageSettings allowedComponentSettings; + + public float storedComponents = 0f; + private int ticksRemaining; + private MaintenancePodState state = MaintenancePodState.Idle; + + private static readonly Texture2D CancelIcon = ContentFinder.Get("UI/Designators/Cancel"); + private static readonly Texture2D EnterIcon = ContentFinder.Get("UI/Commands/PodEject"); // Re-using an icon + + // ===================== Properties ===================== + public CompProperties_MaintenancePod Props => (CompProperties_MaintenancePod)props; + public MaintenancePodState State => state; + public Pawn Occupant => innerContainer.FirstOrDefault() as Pawn; + public bool PowerOn => powerComp != null && powerComp.PowerOn; + public float RequiredComponents(Pawn pawn) + { + if (pawn == null || Props.hediffToRemove == null) return Props.baseComponentCost; + Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediffToRemove); + if (hediff == null) return Props.baseComponentCost; + return Props.baseComponentCost + (int)(hediff.Severity * Props.componentCostPerSeverity); + } + + // ===================== Setup ===================== + public CompMaintenancePod() + { + innerContainer = new ThingOwner(this, false, LookMode.Deep); + } + + public override void Initialize(CompProperties props) + { + base.Initialize(props); + // Setup allowed thing filter for components + allowedComponentSettings = new StorageSettings(this); + if (parent.def.building.defaultStorageSettings != null) + { + allowedComponentSettings.CopyFrom(parent.def.building.defaultStorageSettings); + } + else if (Props.componentDef != null) + { + allowedComponentSettings.filter = new ThingFilter(); + allowedComponentSettings.filter.SetAllow(Props.componentDef, true); + } + } + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + powerComp = parent.TryGetComp(); + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Values.Look(ref state, "state", MaintenancePodState.Idle); + Scribe_Values.Look(ref storedComponents, "storedComponents", 0f); + Scribe_Values.Look(ref ticksRemaining, "ticksRemaining", 0); + Scribe_Deep.Look(ref innerContainer, "innerContainer", this); + Scribe_Deep.Look(ref allowedComponentSettings, "allowedComponentSettings", this); + } + + // ===================== IThingHolder Implementation ===================== + public void GetChildHolders(List outChildren) + { + ThingOwnerUtility.AppendThingHoldersFromThings(outChildren, GetDirectlyHeldThings()); + } + + public ThingOwner GetDirectlyHeldThings() + { + return innerContainer; + } + + // ===================== IStoreSettingsParent Implementation ===================== + public StorageSettings GetStoreSettings() => allowedComponentSettings; + public StorageSettings GetParentStoreSettings() => parent.def.building.fixedStorageSettings; + public void Notify_SettingsChanged() { } + public bool StorageTabVisible => true; + + + // ===================== Core Logic ===================== + public override void CompTick() + { + base.CompTick(); + + if (!parent.Spawned) return; + + if (state == MaintenancePodState.Running) + { + if (PowerOn) + { + ticksRemaining--; + if (ticksRemaining <= 0) + { + CycleFinished(); + } + } + } + + // Update power consumption based on state + if (powerComp != null) + { + powerComp.PowerOutput = - (state == MaintenancePodState.Running ? Props.powerConsumptionRunning : Props.powerConsumptionIdle); + } + } + + public void StartCycle(Pawn pawn) + { + float required = RequiredComponents(pawn); + if (storedComponents < required) + { + Log.Error($"[WulaFallenEmpire] Tried to start maintenance cycle for {pawn.LabelShort} without enough components. This should have been checked earlier."); + return; + } + + storedComponents -= required; + state = MaintenancePodState.Running; + ticksRemaining = Props.durationTicks; + + // Move pawn inside + pawn.DeSpawn(); + innerContainer.TryAdd(pawn, true); + } + + private void CycleFinished() + { + Pawn occupant = Occupant; + if (occupant == null) + { + Log.Error("[WulaFallenEmpire] Maintenance cycle finished, but no one was inside."); + state = MaintenancePodState.Idle; + return; + } + + // Apply effects + if (Props.hediffToRemove != null) + { + Hediff hediff = occupant.health.hediffSet.GetFirstHediffOfDef(Props.hediffToRemove); + if (hediff != null) + { + occupant.health.RemoveHediff(hediff); + Messages.Message("WULA_MaintenanceComplete".Translate(occupant.Named("PAWN")), occupant, MessageTypeDefOf.PositiveEvent); + } + } + + EjectPawn(); + } + + public void EjectPawn() + { + Pawn occupant = Occupant; + if (occupant != null) + { + GenPlace.TryPlaceThing(occupant, parent.InteractionCell, parent.Map, ThingPlaceMode.Near); + if (Props.exitSound != null) + { + Props.exitSound.PlayOneShot(new TargetInfo(parent.Position, parent.Map)); + } + } + innerContainer.Clear(); + state = MaintenancePodState.Idle; + } + + public void AddComponents(Thing components) + { + int count = components.stackCount; + storedComponents += count; + components.Destroy(); + } + + // ===================== UI & Gizmos ===================== + public override string CompInspectStringExtra() + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("WULA_MaintenancePod_Status".Translate() + ": " + $"WULA_MaintenancePod_State_{state}".Translate()); + + if (state == MaintenancePodState.Running) + { + sb.AppendLine("Contains".Translate() + ": " + Occupant.NameShortColored.Resolve()); + sb.AppendLine("TimeLeft".Translate() + ": " + ticksRemaining.ToStringTicksToPeriod()); + } + + sb.AppendLine("WULA_MaintenancePod_StoredComponents".Translate() + ": " + storedComponents.ToString("F0")); + + if (!PowerOn) + { + sb.AppendLine("NoPower".Translate().Colorize(Color.red)); + } + + return sb.ToString().TrimEnd(); + } + + public override IEnumerable CompGetGizmosExtra() + { + // Gizmo to order a pawn to enter + if (state == MaintenancePodState.Idle && PowerOn) + { + var enterCommand = new Command_Action + { + defaultLabel = "WULA_MaintenancePod_Enter".Translate(), + defaultDesc = "WULA_MaintenancePod_EnterDesc".Translate(), + icon = EnterIcon, + action = () => + { + List options = new List(); + foreach (Pawn p in parent.Map.mapPawns.FreeColonists) + { + if (p.health.hediffSet.HasHediff(Props.hediffToRemove)) + { + float required = RequiredComponents(p); + if (storedComponents >= required) + { + options.Add(new FloatMenuOption(p.LabelShort, () => + { + // TODO: Create and assign job + Messages.Message("This needs a JobDriver.", MessageTypeDefOf.RejectInput); + })); + } + else + { + options.Add(new FloatMenuOption(p.LabelShort + " (" + "WULA_MaintenancePod_NotEnoughComponents".Translate(required.ToString("F0")) + ")", null)); + } + } + } + if (options.Any()) + { + Find.WindowStack.Add(new FloatMenu(options)); + } + else + { + Messages.Message("WULA_MaintenancePod_NoOneNeeds".Translate(), MessageTypeDefOf.RejectInput); + } + } + }; + yield return enterCommand; + } + + // Gizmo to cancel and eject + if (state == MaintenancePodState.Running) + { + var cancelCommand = new Command_Action + { + defaultLabel = "CommandCancelConstructionLabel".Translate(), + defaultDesc = "WULA_MaintenancePod_CancelDesc".Translate(), + icon = CancelIcon, + action = () => + { + EjectPawn(); + Messages.Message("WULA_MaintenanceCanceled".Translate(), MessageTypeDefOf.NegativeEvent); + } + }; + yield return cancelCommand; + } + } + } + + public enum MaintenancePodState + { + Idle, // Waiting for a pawn or components + Running, // Occupied and performing maintenance + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/EventSystem/Condition.cs b/Source/WulaFallenEmpire/EventSystem/Condition.cs index ba791517..064877f6 100644 --- a/Source/WulaFallenEmpire/EventSystem/Condition.cs +++ b/Source/WulaFallenEmpire/EventSystem/Condition.cs @@ -151,4 +151,28 @@ namespace WulaFallenEmpire return met; } } +public class Condition_FactionExists : Condition + { + public FactionDef factionDef; + + public override bool IsMet(out string reason) + { + if (factionDef == null) + { + reason = "FactionDef not specified in Condition_FactionExists."; + return false; + } + + bool exists = Find.FactionManager.FirstFactionOfDef(factionDef) != null; + if (!exists) + { + reason = $"Faction '{factionDef.label}' does not exist in the world."; + } + else + { + reason = ""; + } + return exists; + } + } } diff --git a/Source/WulaFallenEmpire/HediffComp_MaintenanceNeed.cs b/Source/WulaFallenEmpire/HediffComp_MaintenanceNeed.cs new file mode 100644 index 00000000..72cc6722 --- /dev/null +++ b/Source/WulaFallenEmpire/HediffComp_MaintenanceNeed.cs @@ -0,0 +1,40 @@ +using Verse; + +namespace WulaFallenEmpire +{ + public class HediffCompProperties_MaintenanceNeed : HediffCompProperties + { + public float severityPerDayBeforeThreshold = 0.0f; + public float severityPerDayAfterThreshold = 0.0f; + public float thresholdDays = 0.0f; + + public HediffCompProperties_MaintenanceNeed() + { + compClass = typeof(HediffComp_MaintenanceNeed); + } + } + + public class HediffComp_MaintenanceNeed : HediffComp + { + private HediffCompProperties_MaintenanceNeed Props => (HediffCompProperties_MaintenanceNeed)props; + + public override void CompPostTick(ref float severityAdjustment) + { + base.CompPostTick(ref severityAdjustment); + + // We adjust severity once per game day (60000 ticks) + if (parent.ageTicks % 60000 == 0) + { + float ageInDays = (float)parent.ageTicks / 60000f; + if (ageInDays < Props.thresholdDays) + { + severityAdjustment += Props.severityPerDayBeforeThreshold; + } + else + { + severityAdjustment += Props.severityPerDayAfterThreshold; + } + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/JobDriver_EnterMaintenancePod.cs b/Source/WulaFallenEmpire/JobDriver_EnterMaintenancePod.cs new file mode 100644 index 00000000..20dc257f --- /dev/null +++ b/Source/WulaFallenEmpire/JobDriver_EnterMaintenancePod.cs @@ -0,0 +1,42 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class JobDriver_EnterMaintenancePod : JobDriver + { + private const TargetIndex PodIndex = TargetIndex.A; + + protected Thing Pod => job.GetTarget(PodIndex).Thing; + + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return pawn.Reserve(Pod, job, 1, -1, null, errorOnFailed); + } + + protected override IEnumerable MakeNewToils() + { + this.FailOnDespawnedNullOrForbidden(PodIndex); + this.FailOnBurningImmobile(PodIndex); + + var podComp = Pod.TryGetComp(); + this.FailOn(() => podComp == null || podComp.State != MaintenancePodState.Idle || !podComp.PowerOn); + + // Go to the pod's interaction cell + yield return Toils_Goto.GotoThing(PodIndex, PathEndMode.InteractionCell); + + // Enter the pod + yield return new Toil + { + initAction = () => + { + podComp.StartCycle(pawn); + }, + defaultCompleteMode = ToilCompleteMode.Instant + }; + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/JobDriver_LoadComponents.cs b/Source/WulaFallenEmpire/JobDriver_LoadComponents.cs new file mode 100644 index 00000000..8dbfbd38 --- /dev/null +++ b/Source/WulaFallenEmpire/JobDriver_LoadComponents.cs @@ -0,0 +1,53 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class JobDriver_LoadComponents : JobDriver + { + private const TargetIndex PodIndex = TargetIndex.A; + private const TargetIndex ComponentIndex = TargetIndex.B; + + protected Thing Pod => job.GetTarget(PodIndex).Thing; + protected Thing Component => job.GetTarget(ComponentIndex).Thing; + + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + if (pawn.Reserve(Pod, job, 1, -1, null, errorOnFailed)) + { + return pawn.Reserve(Component, job, 1, -1, null, errorOnFailed); + } + return false; + } + + protected override IEnumerable MakeNewToils() + { + this.FailOnDespawnedNullOrForbidden(PodIndex); + this.FailOnBurningImmobile(PodIndex); + + var podComp = Pod.TryGetComp(); + this.FailOn(() => podComp == null || podComp.State != MaintenancePodState.Idle); + + // Go and get the components + yield return Toils_Goto.GotoThing(ComponentIndex, PathEndMode.OnCell).FailOnSomeonePhysicallyInteracting(ComponentIndex); + yield return Toils_Haul.StartCarryThing(ComponentIndex); + + // Carry them to the pod + yield return Toils_Goto.GotoThing(PodIndex, PathEndMode.InteractionCell); + + // Load the components + yield return Toils_General.WaitWith(60, TargetIndex.A, true, true, false, PodIndex); + yield return new Toil + { + initAction = () => + { + podComp.AddComponents(this.GetActor().carryTracker.CarriedThing); + }, + defaultCompleteMode = ToilCompleteMode.Instant + }; + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Job_Maintenance.cs b/Source/WulaFallenEmpire/Job_Maintenance.cs new file mode 100644 index 00000000..160c7a5b --- /dev/null +++ b/Source/WulaFallenEmpire/Job_Maintenance.cs @@ -0,0 +1,25 @@ +using RimWorld; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class JobDriver_EnterMaintenancePod : JobDriver_EnterBiosculpterPod + { + } + + public class WorkGiver_DoMaintenance : WorkGiver_Scanner + { + public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForDef(ThingDef.Named("WULA_MaintenancePod")); + + public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) + { + return pawn.CanReserve(t, 1, -1, null, forced); + } + + public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + { + return JobMaker.MakeJob(DefDatabase.GetNamed("WULA_EnterMaintenancePod"), t); + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WorkGiver_EnterMaintenancePod.cs b/Source/WulaFallenEmpire/WorkGiver_EnterMaintenancePod.cs new file mode 100644 index 00000000..7966c1fa --- /dev/null +++ b/Source/WulaFallenEmpire/WorkGiver_EnterMaintenancePod.cs @@ -0,0 +1,62 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class WorkGiver_EnterMaintenancePod : WorkGiver_Scanner + { + public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForDef(ThingDef.Named("WULA_MaintenancePod")); + + public override PathEndMode PathEndMode => PathEndMode.InteractionCell; + + // This method now checks the severity of the hediff. + public override bool ShouldSkip(Pawn pawn, bool forced = false) + { + var podDef = ThingDef.Named("WULA_MaintenancePod"); + var podProps = podDef.GetCompProperties(); + if (podProps?.hediffToRemove == null) return true; + + Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(podProps.hediffToRemove); + + // Skip if no hediff or if severity is below the configured threshold. + if (hediff == null || hediff.Severity < podProps.minSeverityToMaintain) + { + return true; + } + + return false; + } + + public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) + { + if (!(t is Building building) || !building.Spawned || building.IsForbidden(pawn) || !pawn.CanReserve(building, 1, -1, null, forced)) + { + return false; + } + + var podComp = building.GetComp(); + if (podComp == null || podComp.State != MaintenancePodState.Idle || !podComp.PowerOn) + { + return false; + } + + float requiredComponents = podComp.RequiredComponents(pawn); + if (podComp.storedComponents < requiredComponents) + { + JobFailReason.Is("WULA_MaintenancePod_NotEnoughComponents".Translate(requiredComponents.ToString("F0"))); + return false; + } + + return true; + } + + public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + { + return JobMaker.MakeJob(JobDefOf.WULA_EnterMaintenancePod, t); + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WorkGiver_LoadComponents.cs b/Source/WulaFallenEmpire/WorkGiver_LoadComponents.cs new file mode 100644 index 00000000..e823a16e --- /dev/null +++ b/Source/WulaFallenEmpire/WorkGiver_LoadComponents.cs @@ -0,0 +1,66 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using Verse; +using Verse.AI; + +namespace WulaFallenEmpire +{ + public class WorkGiver_LoadComponents : WorkGiver_Scanner + { + public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForDef(ThingDef.Named("WULA_MaintenancePod")); + + public override PathEndMode PathEndMode => PathEndMode.Touch; + + public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) + { + if (!(t is Building building) || !building.Spawned || building.IsForbidden(pawn) || !pawn.CanReserve(building, 1, -1, null, forced)) + { + return false; + } + + var podComp = building.GetComp(); + if (podComp == null || podComp.State != MaintenancePodState.Idle) + { + return false; + } + + // We define a "needed" threshold. Let's say we want to keep at least 10 components stocked. + // This prevents pawns from hauling one component at a time. + const int desiredStockpile = 10; + if (podComp.storedComponents >= desiredStockpile) + { + return false; + } + + if (FindBestComponent(pawn, podComp) == null) + { + JobFailReason.Is("WULA_NoComponentsToLoad".Translate()); + return false; + } + + return true; + } + + public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + { + var podComp = t.GetComp(); + Thing component = FindBestComponent(pawn, podComp); + if (component == null) + { + return null; + } + return JobMaker.MakeJob(JobDefOf.WULA_LoadComponentsToMaintenancePod, t, component); + } + + private Thing FindBestComponent(Pawn pawn, CompMaintenancePod pod) + { + ThingDef componentDef = pod.Props.componentDef; + if (componentDef == null) return null; + + Predicate validator = (Thing x) => !x.IsForbidden(pawn) && pawn.CanReserve(x); + return GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForDef(componentDef), PathEndMode.ClosestTouch, TraverseParms.For(pawn), 9999f, validator); + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 06dfecae..f3ae8ec9 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -113,7 +113,7 @@ - + @@ -138,6 +138,9 @@ + + +