From 82b3855fc886b4d9c62d75724aaf0a9352f55ae9 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Mon, 8 Sep 2025 18:26:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=E7=89=A9=E5=93=81=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 103424 -> 111104 bytes 1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml | 11 +- .../Thing_building/ARA_BioforgeIncubator.xml | 125 ++++++++- .../CompQueuedInteractiveProducer.cs | 255 ++++++++++++++++++ .../JobDriver_AddProcessToQueue.cs | 35 +++ Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 2 + 6 files changed, 425 insertions(+), 3 deletions(-) create mode 100644 Source/ArachnaeSwarm/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs create mode 100644 Source/ArachnaeSwarm/ARA_CompInteractiveProducer/JobDriver_AddProcessToQueue.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 1681aa72da23ac589a534b94c109933802641f90..c2e64a9b8e84b4a6d51aeb2333b17b1edf802d71 100644 GIT binary patch delta 44683 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 NOpoD9hT8_|{|&!SETI4Z delta 37734 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 diff --git a/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml b/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml index eb0159d..bf7dc77 100644 --- a/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml +++ b/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml @@ -4,14 +4,21 @@ ARA_StartInteractiveProduction ArachnaeSwarm.JobDriver_StartProduction - 正在启动生产 TargetA. + 正在启动孵化 TargetA. true ARA_AddToQueueJob ArachnaeSwarm.JobDriver_AddToQueue - 正在添加生产订单。 + 正在添加虫族孵化订单。 + true + + + + ARA_AddProcessToQueueJob + ArachnaeSwarm.JobDriver_AddProcessToQueue + 正在添加物品孵化订单。 true diff --git a/1.6/1.6/Defs/Thing_building/ARA_BioforgeIncubator.xml b/1.6/1.6/Defs/Thing_building/ARA_BioforgeIncubator.xml index 61098fb..31b6c0b 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_BioforgeIncubator.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_BioforgeIncubator.xml @@ -23,7 +23,130 @@ - + + + ARA_BioforgeIncubator_Thing + + 一个大型的、需要消耗大量营养物质的孵化设施,可以同时孵化多个单位,并能通过链接外部设备来提高效率。 + + Things/Building/AncientHeatVent + Graphic_Single + CutoutComplex + (7,7) + + (7,7) + Normal + + 0 + + 50 + + false + 0 + Building + PassThroughOnly + ARA_Creep + 50 + + 250 + 2800 + 1.0 + + +
  • PlaceWorker_PreventInteractionSpotOverlap
  • +
    + 0.8 + (0,0,-1) + true + ARA_Buildings + 2600 + Item + + Laboratory + 0.8 + + + + +
  • + + 3 + 1.0 + +
  • ArachnaeNode_Race_WeaponSmith
  • + + + + 10 + 30 + 0.00001 + +
  • + Legendary + 0.99 +
  • +
  • + Masterwork + 0.90 +
  • +
  • + Excellent + 0.70 +
  • +
  • + Good + 0.50 +
  • +
  • + Normal + 0.20 +
  • +
  • + Poor + 0.10 +
  • +
    + + + +
  • + ARA_RW_Basic_Acid_Bladder_Gun + 80000 + 30 + ARA_Technology_7VXI +
  • +
  • + ARA_RW_Basic_Fist_Needle_Gun + 40000 + 10 + ARA_Technology_5PAV +
  • +
    + + + +
  • + 100.0 + + +
  • Foods
  • + + + 生物质 + true + true + + + +
  • + +
  • ARA_IncubationAccelerator
  • + + + +
    +
    + ARA_BioforgeIncubator diff --git a/Source/ArachnaeSwarm/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs b/Source/ArachnaeSwarm/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs new file mode 100644 index 0000000..b754dbc --- /dev/null +++ b/Source/ArachnaeSwarm/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs @@ -0,0 +1,255 @@ +using RimWorld; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Verse; +using Verse.AI; +using UnityEngine; + +namespace ArachnaeSwarm +{ + // Data contract for a single production order in the queue + public class QueuedProcessOrder : IExposable + { + public ProcessDef process; // Using the existing ProcessDef + public int productionUntilTick = -1; + + // Quality-related fields + public int ticksUnderOptimalConditions; + public float temperaturePenaltyPercent; + + public void ExposeData() + { + Scribe_Deep.Look(ref process, "process"); + Scribe_Values.Look(ref productionUntilTick, "productionUntilTick", -1); + Scribe_Values.Look(ref ticksUnderOptimalConditions, "ticksUnderOptimalConditions", 0); + Scribe_Values.Look(ref temperaturePenaltyPercent, "temperaturePenaltyPercent", 0f); + } + } + + // Properties for the new queued producer component + public class CompProperties_QueuedInteractiveProducer : CompProperties + { + public List processes; + public List whitelist; + public int productionQueueLimit = 1; + public float minNutritionToStart = 0.1f; + + // Quality-related properties from CompInteractiveProducer + public float minSafeTemperature = 7f; + public float maxSafeTemperature = 32f; + public float penaltyPerDegreePerTick = 0.00001f; + public List qualityThresholds; + public IntRange spawnCount = new IntRange(1, 1); + + public CompProperties_QueuedInteractiveProducer() + { + compClass = typeof(CompQueuedInteractiveProducer); + } + } + + // The main component logic + public class CompQueuedInteractiveProducer : ThingComp + { + private List productionOrders = new List(); + public ProcessDef selectedProcess; // For passing to the JobDriver + + private CompRefuelableNutrition _fuelComp; + private CompAffectedByFacilities _facilitiesComp; + + public CompProperties_QueuedInteractiveProducer Props => (CompProperties_QueuedInteractiveProducer)props; + private CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp()); + private CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp()); + + public override void Initialize(CompProperties props) + { + base.Initialize(props); + _fuelComp = parent.GetComp(); + _facilitiesComp = parent.GetComp(); + } + + public override IEnumerable CompFloatMenuOptions(Pawn selPawn) + { + if (Props.whitelist == null || !Props.whitelist.Contains(selPawn.kindDef)) yield break; + if (FuelComp != null && (!FuelComp.HasFuel || FuelComp.NutritionStored < Props.minNutritionToStart)) + { + yield return new FloatMenuOption("CannotStartProduction".Translate(), null); + yield break; + } + + foreach (var process in Props.processes) + { + if (process.requiredResearch != null && !process.requiredResearch.IsFinished) + { + yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label) + " (" + "Requires".Translate() + ": " + process.requiredResearch.label + ")", null); + } + else + { + yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label), () => + { + this.selectedProcess = process; + Job job = JobMaker.MakeJob(DefDatabase.GetNamed("ARA_AddProcessToQueueJob"), parent); + selPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); + }); + } + } + } + + public void AddToQueue() + { + if (selectedProcess == null) return; + productionOrders.Add(new QueuedProcessOrder { process = selectedProcess }); + selectedProcess = null; + } + + public override void CompTick() + { + base.CompTick(); + var producingOrders = productionOrders.Where(o => o.productionUntilTick > 0).ToList(); + bool hasFuel = FuelComp?.HasFuel ?? true; + float ambientTemperature = parent.AmbientTemperature; + bool isTempSafe = ambientTemperature >= Props.minSafeTemperature && ambientTemperature <= Props.maxSafeTemperature; + + // Update progress and penalties for active orders + foreach(var order in producingOrders) + { + if(hasFuel && isTempSafe) + { + order.ticksUnderOptimalConditions++; + } + if (!isTempSafe) + { + float tempDelta = (ambientTemperature > Props.maxSafeTemperature) ? ambientTemperature - Props.maxSafeTemperature : Props.minSafeTemperature - ambientTemperature; + order.temperaturePenaltyPercent = Mathf.Min(1f, order.temperaturePenaltyPercent + tempDelta * Props.penaltyPerDegreePerTick); + } + if (!hasFuel) + { + order.productionUntilTick++; // Pause production + } + } + + // Update fuel consumption + if (FuelComp != null) + { + float totalConsumptionRatePerDay = 0f; + if(hasFuel) + { + foreach (var order in producingOrders) + { + if (order.process.totalNutritionNeeded > 0 && order.process.productionTicks > 0) + { + totalConsumptionRatePerDay += (order.process.totalNutritionNeeded / order.process.productionTicks) * 60000f; + } + } + } + FuelComp.currentConsumptionRate = totalConsumptionRatePerDay; + } + + // Finish completed orders + productionOrders.RemoveAll(order => + { + if (order.productionUntilTick > 0 && Find.TickManager.TicksGame >= order.productionUntilTick) + { + FinishProduction(order); + return true; + } + return false; + }); + + // Start new orders + int currentlyProducingCount = productionOrders.Count(o => o.productionUntilTick > 0); + if (currentlyProducingCount < Props.productionQueueLimit) + { + var waitingOrder = productionOrders.FirstOrDefault(o => o.productionUntilTick == -1); + if (waitingOrder != null) + { + float speedFactor = 1f + (FacilitiesComp?.GetStatOffset(StatDef.Named("ARA_IncubationSpeedFactor")) ?? 0f); + int modifiedDelay = (int)(waitingOrder.process.productionTicks / speedFactor); + waitingOrder.productionUntilTick = Find.TickManager.TicksGame + modifiedDelay; + } + } + } + + private void FinishProduction(QueuedProcessOrder order) + { + float progress = (float)order.ticksUnderOptimalConditions / order.process.productionTicks; + float finalQualityPercent = Mathf.Clamp01(progress - order.temperaturePenaltyPercent); + QualityCategory finalQuality = QualityCategory.Awful; + if (!Props.qualityThresholds.NullOrEmpty()) + { + foreach (var threshold in Props.qualityThresholds.OrderByDescending(q => q.threshold)) + { + if (finalQualityPercent >= threshold.threshold) { finalQuality = threshold.quality; break; } + } + } + + for (int i = 0; i < Props.spawnCount.RandomInRange; i++) + { + Thing product = ThingMaker.MakeThing(order.process.thingDef); + product.TryGetComp()?.SetQuality(finalQuality, ArtGenerationContext.Colony); + GenPlace.TryPlaceThing(product, parent.Position, parent.Map, ThingPlaceMode.Near); + } + } + + public override string CompInspectStringExtra() + { + StringBuilder sb = new StringBuilder(); + + int producingCount = productionOrders.Count(o => o.productionUntilTick > 0); + int queuedCount = productionOrders.Count - producingCount; + + sb.AppendLine($"生产槽位: {producingCount} / {Props.productionQueueLimit}"); + if (queuedCount > 0) sb.AppendLine($"等待队列: {queuedCount}"); + + if (FacilitiesComp != null) + { + float speedFactor = 1f + FacilitiesComp.GetStatOffset(StatDef.Named("ARA_IncubationSpeedFactor")); + if(speedFactor != 1f) sb.AppendLine($"生产速度: {speedFactor.ToStringPercent()}"); + } + + var producingNow = productionOrders.Where(o => o.productionUntilTick > 0).OrderBy(o => o.productionUntilTick); + if (producingNow.Any()) + { + sb.AppendLine("正在生产:"); + foreach (var order in producingNow) + { + int remainingTicks = order.productionUntilTick - Find.TickManager.TicksGame; + sb.AppendLine($" - {order.process.thingDef.LabelCap}: {remainingTicks.ToStringTicksToPeriod(true, false, true, true)}"); + } + } + + return sb.ToString().TrimEnd(); + } + + public override void PostExposeData() + { + base.PostExposeData(); + Scribe_Collections.Look(ref productionOrders, "productionOrders", LookMode.Deep); + Scribe_Deep.Look(ref selectedProcess, "selectedProcess"); + } + + public override IEnumerable CompGetGizmosExtra() + { + foreach (Gizmo gizmo in base.CompGetGizmosExtra()) + { + yield return gizmo; + } + + if (productionOrders.Any()) + { + var lastOrder = productionOrders.Last(); + + yield return new Command_Action + { + defaultLabel = "CommandCancelProduction".Translate() + ": " + lastOrder.process.thingDef.LabelCap, + defaultDesc = "CommandCancelProductionDesc".Translate(), + icon = ContentFinder.Get("UI/Designators/Cancel"), + action = () => + { + productionOrders.Remove(lastOrder); + } + }; + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ARA_CompInteractiveProducer/JobDriver_AddProcessToQueue.cs b/Source/ArachnaeSwarm/ARA_CompInteractiveProducer/JobDriver_AddProcessToQueue.cs new file mode 100644 index 0000000..021b9a8 --- /dev/null +++ b/Source/ArachnaeSwarm/ARA_CompInteractiveProducer/JobDriver_AddProcessToQueue.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using RimWorld; +using Verse; +using Verse.AI; + +namespace ArachnaeSwarm +{ + public class JobDriver_AddProcessToQueue : JobDriver + { + private const TargetIndex BuildingInd = TargetIndex.A; + + protected Building Building => (Building)job.GetTarget(BuildingInd).Thing; + + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return pawn.Reserve(Building, job, 1, -1, null, errorOnFailed); + } + + protected override IEnumerable MakeNewToils() + { + this.FailOnDespawnedNullOrForbidden(BuildingInd); + + yield return Toils_Goto.GotoThing(BuildingInd, PathEndMode.InteractionCell); + + Toil work = ToilMaker.MakeToil("MakeNewToils"); + work.initAction = delegate + { + // Call the new component's method + Building.GetComp().AddToQueue(); + }; + work.defaultCompleteMode = ToilCompleteMode.Instant; + yield return work; + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 8947351..48555c9 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -118,6 +118,8 @@ + +