diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll index a3f0eefe..83cc57b4 100644 Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ diff --git a/1.6/Defs/WorkGivers/Wula_WorkGivers.xml b/1.6/Defs/WorkGivers/Wula_WorkGivers.xml index c719f7fd..4732068a 100644 --- a/1.6/Defs/WorkGivers/Wula_WorkGivers.xml +++ b/1.6/Defs/WorkGivers/Wula_WorkGivers.xml @@ -67,6 +67,7 @@
  • 0.25 + WULA_Charge_Cube
  • @@ -85,6 +86,7 @@
  • 0.25 + WULA_Charge_Cube
  • @@ -102,7 +104,8 @@
  • - 0.8 + 0.35 + WULA_Charge_Cube
  • diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo index 5cc935d8..fb8809b8 100644 Binary files a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo and b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo differ diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json index dab6315c..49f5745a 100644 --- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json +++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json @@ -2,6 +2,14 @@ "Version": 1, "WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\", "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\workgiver_warden_deliverenergy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:workgiver_warden_deliverenergy.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\workgiverdefextension_feedwula.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:workgiverdefextension_feedwula.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:compapparelinterceptor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -42,15 +50,41 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 1, + "SelectedChildIndex": 0, "Children": [ + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "WorkGiver_Warden_DeliverEnergy.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiver_Warden_DeliverEnergy.cs", + "RelativeDocumentMoniker": "WorkGiver_Warden_DeliverEnergy.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiver_Warden_DeliverEnergy.cs", + "RelativeToolTip": "WorkGiver_Warden_DeliverEnergy.cs", + "ViewState": "AQIAAAoAAAAAAAAAAAAxwCsAAAALAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-24T03:34:56.772Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "WorkGiverDefExtension_FeedWula.cs", + "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiverDefExtension_FeedWula.cs", + "RelativeDocumentMoniker": "WorkGiverDefExtension_FeedWula.cs", + "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiverDefExtension_FeedWula.cs", + "RelativeToolTip": "WorkGiverDefExtension_FeedWula.cs", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAAoAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-24T03:32:18.303Z", + "EditorCaption": "" + }, { "$type": "Bookmark", "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 2, "Title": "CompApparelInterceptor.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs", "RelativeDocumentMoniker": "CompApparelInterceptor.cs", @@ -63,7 +97,7 @@ }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 3, "Title": "Projectile_Launch_Patch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HarmonyPatches\\Projectile_Launch_Patch.cs", "RelativeDocumentMoniker": "HarmonyPatches\\Projectile_Launch_Patch.cs", @@ -75,7 +109,7 @@ }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 5, "Title": "IngestPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs", "RelativeDocumentMoniker": "IngestPatch.cs", @@ -87,7 +121,7 @@ }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 4, "Title": "CompUseEffect_WulaSkillTrainer.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompUseEffect_WulaSkillTrainer.cs", "RelativeDocumentMoniker": "CompUseEffect_WulaSkillTrainer.cs", @@ -99,7 +133,7 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 6, "Title": "Building_Wula_DarkEnergy_Engine.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs", "RelativeDocumentMoniker": "Building_Wula_DarkEnergy_Engine.cs", @@ -111,7 +145,7 @@ }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 7, "Title": "HediffComp_RegenerateBackstory.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HediffComp_RegenerateBackstory.cs", "RelativeDocumentMoniker": "HediffComp_RegenerateBackstory.cs", @@ -123,7 +157,7 @@ }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 8, "Title": "WulaFallenEmpireMod.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WulaFallenEmpireMod.cs", "RelativeDocumentMoniker": "WulaFallenEmpireMod.cs", @@ -135,7 +169,7 @@ }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 9, "Title": "MechanitorPatch.cs", "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MechanitorPatch.cs", "RelativeDocumentMoniker": "MechanitorPatch.cs", diff --git a/Source/WulaFallenEmpire/WorkGiverDefExtension_FeedWula.cs b/Source/WulaFallenEmpire/WorkGiverDefExtension_FeedWula.cs index e9883f20..b7e65643 100644 --- a/Source/WulaFallenEmpire/WorkGiverDefExtension_FeedWula.cs +++ b/Source/WulaFallenEmpire/WorkGiverDefExtension_FeedWula.cs @@ -5,5 +5,6 @@ namespace WulaFallenEmpire public class WorkGiverDefExtension_FeedWula : DefModExtension { public float feedThreshold = 0.25f; + public ThingDef energySourceDef; } } diff --git a/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs b/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs index d0649821..1fe1bb8e 100644 --- a/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs +++ b/Source/WulaFallenEmpire/WorkGiver_Warden_DeliverEnergy.cs @@ -1,73 +1,112 @@ using RimWorld; using Verse; using Verse.AI; -using System.Linq; namespace WulaFallenEmpire { - public class WorkGiver_Warden_DeliverEnergy : WorkGiver_Warden + public class WorkGiver_Warden_DeliverEnergy : WorkGiver_Scanner { - public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) + private WorkGiverDefExtension_FeedWula ext; + + private WorkGiverDefExtension_FeedWula Ext { - if (!(t is Pawn prisoner) || !ShouldTakeCareOfPrisoner(pawn, prisoner)) + get { - return null; + if (ext == null) + { + ext = def.GetModExtension(); + } + return ext; } - - Need_WulaEnergy wulaEnergyNeed = prisoner.needs.TryGetNeed(); - if (wulaEnergyNeed == null || wulaEnergyNeed.CurLevelPercentage > def.GetModExtension().feedThreshold) - { - return null; - } - - if (EnergyAvailableInRoomTo(prisoner)) - { - return null; - } - - if (!TryFindBestEnergySourceFor(pawn, prisoner, out Thing energySource, out _)) - { - return null; - } - - Job job = JobMaker.MakeJob(JobDefOf.DeliverFood, energySource, prisoner); - job.count = 1; - return job; } - private bool EnergyAvailableInRoomTo(Pawn prisoner) + public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForDef(ThingDef.Named("WulaSpecies")); + + public override PathEndMode PathEndMode => PathEndMode.ClosestTouch; + + public override Danger MaxPathDanger(Pawn pawn) => Danger.Deadly; + + public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) { - if (prisoner.GetRoom() == null) + Pawn prisoner = t as Pawn; + + if (prisoner == null || prisoner == pawn || !prisoner.IsPrisonerOfColony || !prisoner.guest.CanBeBroughtFood) { return false; } - - var allThings = prisoner.GetRoom().ContainedAndAdjacentThings; - foreach (Thing thing in allThings) + + Need_WulaEnergy energyNeed = prisoner.needs.TryGetNeed(); + if (energyNeed == null) { - if (thing.def.GetModExtension() != null) - { - return true; - } + return false; } - return false; + + if (energyNeed.CurLevelPercentage > Ext.feedThreshold) + { + return false; + } + + if (WardenFeedUtility.ShouldBeFed(prisoner)) + { + return false; + } + + if (!pawn.CanReserve(prisoner, 1, -1, null, forced)) + { + return false; + } + + if (Ext == null || Ext.energySourceDef == null) + { + Log.ErrorOnce("WorkGiver_Warden_DeliverEnergy is missing the DefModExtension with a valid energySourceDef.", def.GetHashCode()); + return false; + } + + if (!FindBestEnergySourceFor(pawn, prisoner, out _, out _)) + { + JobFailReason.Is("NoFood".Translate()); + return false; + } + + return true; } - private bool TryFindBestEnergySourceFor(Pawn getter, Pawn eater, out Thing energySource, out ThingDef energyDef) + public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { - energySource = null; - energyDef = null; - - var allowedThings = getter.Map.listerThings.ThingsInGroup(ThingRequestGroup.HaulableEver) - .Where(x => x.def.GetModExtension() != null); - - Thing thing = GenClosest.ClosestThing_Global(eater.Position, allowedThings, 99999f, - t => t.IngestibleNow && !t.IsForbidden(getter) && getter.CanReserve(t)); - - if (thing != null) + Pawn prisoner = (Pawn)t; + if (FindBestEnergySourceFor(pawn, prisoner, out Thing energySource, out _)) { - energySource = thing; - energyDef = thing.def; + Job job = JobMaker.MakeJob(JobDefOf.DeliverFood, energySource, prisoner); + job.count = 1; + job.targetC = RCellFinder.SpotToChewStandingNear(prisoner, energySource); + return job; + } + return null; + } + + private bool FindBestEnergySourceFor(Pawn getter, Pawn eater, out Thing foodSource, out ThingDef foodDef) + { + foodSource = null; + foodDef = null; + + if (Ext == null || Ext.energySourceDef == null) + { + return false; + } + + foodSource = GenClosest.ClosestThingReachable( + getter.Position, + getter.Map, + ThingRequest.ForDef(Ext.energySourceDef), + PathEndMode.OnCell, + TraverseParms.For(getter), + 9999f, + (Thing x) => !x.IsForbidden(getter) && getter.CanReserve(x) && x.GetRoom() != eater.GetRoom() + ); + + if (foodSource != null) + { + foodDef = foodSource.def; return true; }