From cd880be9a4f059f0967bf7eb2d33c96a7ef4408e Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Thu, 4 Sep 2025 14:28:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 51200 -> 65536 bytes 1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml | 51 +++++ 1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml | 11 + .../ARA_InteractiveProducer.xml | 127 ++++++----- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 4 + .../ArachnaeSwarm/CompInteractiveProducer.cs | 198 +++++++++++++++--- .../JobDriver_StartProduction.cs | 36 ++++ 7 files changed, 347 insertions(+), 80 deletions(-) create mode 100644 1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml create mode 100644 Source/ArachnaeSwarm/JobDriver_StartProduction.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 456ab82dd527dcfbd55645498e49fdce70e461bc..1ae0634e6b1320b47ae86b8c1a55f9eafa571b56 100644 GIT binary patch literal 65536 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 + + + ARA_EggSpew + + 工艺卵 + UI/Commands/EggSpew + 5000 + true + 300 + true + false + AcidSpray_Warmup + + Verb_CastAbility + 1 + 12 + AcidSpray_Resolve + false + false + + True + + + +
  • + ARA_Proj_BioforgeIncubator +
  • +
  • + Food + 0 + 营养值不足,需要进食 +
  • +
    +
    ARA_AcidSprayBurst @@ -159,6 +193,23 @@ true + + + ARA_Proj_BioforgeIncubator + + Projectile_SpawnsThing + + ArachnaeSwarm/Building/ARA_EggSac + Graphic_Single + + + Bullet + 21 + 0 + ARA_BioforgeIncubator + true + + ARA_AcidSprayBurst_Myrmecocystus diff --git a/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml b/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml new file mode 100644 index 0000000..b745ae9 --- /dev/null +++ b/1.6/1.6/Defs/JobDefs/ARA_Jobs_Interactive.xml @@ -0,0 +1,11 @@ + + + + + ARA_IncubateJob + ArachnaeSwarm.JobDriver_StartProduction + 正在启动生产 TargetA. + true + + + \ No newline at end of file diff --git a/1.6/1.6/Defs/Thing_building/ARA_InteractiveProducer.xml b/1.6/1.6/Defs/Thing_building/ARA_InteractiveProducer.xml index 2f12cf2..2849bec 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveProducer.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveProducer.xml @@ -3,68 +3,64 @@ ARA_BioforgeIncubator - - 一个先进的孵化器,可以使用化学燃料将有机物和矿物重组成有用的物品。生产过程对温度非常敏感,并且需要由特定的操作员进行启动。 + + 一个脆弱、易燃、黏滑的囊状物,是阿拉克涅工艺种所诞之卵,内含哺育阿拉克涅武器种虫族所需的营养和遗传物质,可以通过阿拉克涅工艺种的交互完成激活进程。 Building + + + Building + (1,1) + MinifiedThing + +
  • BuildingsMisc
  • +
    - Things/Building/Production/BiofuelRefinery - Graphic_Multi - (2,2) - - Damage/Corner - Damage/Corner - Damage/Corner - Damage/Corner - + ArachnaeSwarm/Building/ARA_EggSac + Graphic_Single + (1.5,1.5) - (2,2) - - 150 - 6 - Building - Impassable + PassThroughOnly + 0.3 false - Production + Normal + Light - 250 - 3000 - 1.0 - -10 + 10 + 50 + 1 + -6 + + true + + false + false + true + true + false + Normal -
  • - CompPowerTrader - 250 -
  • - ComponentIndustrial - 90000 - 25 + Gun_ChainShotgun + 60000 + 20
  • - Plasteel - 120000 - 50 + Gun_AssaultRifle + 60000 + 15
  • - -
  • WoodLog
  • -
  • RawFungus
  • -
  • Meat_Insect
  • -
    - -
  • MealSimple
  • -
    @@ -73,23 +69,52 @@ - 5~10 - false - 7 - 32 + 1 + True + 18 + 23 0.00001 + +
  • + 13 + 28 + 0.00005 +
  • +
  • + CompHeatPusherPowered + 6 +
  • - - Important + 120 + - -
  • WoodLog
  • -
  • RawFungus
  • -
  • Meat_Insect
  • -
    + +
  • Foods
  • +
    + +
  • AllowPlantFood
  • +
    +
    +
    + + + +
  • Foods
  • +
    + +
  • EggsFertilized
  • +
    + +
  • InsectJelly
  • +
  • MealLavish
  • +
  • MealLavish_Veg
  • +
  • MealLavish_Meat
  • +
  • HemogenPack
  • +
  • Chocolate
  • +
    diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 9e8ae6b..c996e05 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -105,6 +105,10 @@ + + + + diff --git a/Source/ArachnaeSwarm/CompInteractiveProducer.cs b/Source/ArachnaeSwarm/CompInteractiveProducer.cs index 00f2c5b..8d65c8a 100644 --- a/Source/ArachnaeSwarm/CompInteractiveProducer.cs +++ b/Source/ArachnaeSwarm/CompInteractiveProducer.cs @@ -23,7 +23,6 @@ namespace ArachnaeSwarm public float totalNutritionNeeded; } - // We do NOT inherit from CompProperties_Refuelable anymore public class CompProperties_InteractiveProducer : CompProperties { public List processes; @@ -35,12 +34,10 @@ namespace ArachnaeSwarm public float maxSafeTemperature = 32f; public float penaltyPerDegreePerTick = 0.00001f; - // Manually added properties from CompProperties_Refuelable public float fuelCapacity = 100f; public bool targetFuelLevelConfigurable = true; public bool showAllowAutoRefuelToggle = true; public string fuelLabel = "Nutrition"; - public Texture2D fuelIcon = null; // Let it default or specify public CompProperties_InteractiveProducer() { @@ -61,11 +58,10 @@ namespace ArachnaeSwarm private int ticksUnderOptimalConditions; private float temperaturePenaltyPercent; - // --- Manually added state from CompRefuelable --- private float configuredTargetFuelLevel = -1f; public bool allowAutoRefuel = true; - // --- Manually added static resources from CompRefuelable --- + // --- Static Resources --- private static readonly Texture2D SetTargetFuelLevelCommand = ContentFinder.Get("UI/Commands/SetTargetFuelLevel"); private static readonly Vector2 FuelBarSize = new Vector2(1f, 0.2f); private static readonly Material FuelBarFilledMat = SolidColorMaterials.SimpleSolidColorMaterial(new Color(0.6f, 0.56f, 0.13f)); @@ -79,7 +75,6 @@ namespace ArachnaeSwarm public bool StorageTabVisible => true; public float NutritionStored => containedNutrition + GetNutritionInContainer(); - // --- Manually added properties from CompRefuelable --- public float TargetFuelLevel { get => configuredTargetFuelLevel < 0f ? Props.fuelCapacity : configuredTargetFuelLevel; @@ -91,16 +86,19 @@ namespace ArachnaeSwarm // --- Initialization & Scribe --- public CompInteractiveProducer() { innerContainer = new ThingOwner(this, false, LookMode.Deep); } - public override void PostMake() + public override void PostSpawnSetup(bool respawningAfterLoad) { - base.PostMake(); - allowedNutritionSettings = new StorageSettings(this); - if (parent.def.building.defaultStorageSettings != null) + base.PostSpawnSetup(respawningAfterLoad); + if (!respawningAfterLoad) { - allowedNutritionSettings.CopyFrom(parent.def.building.defaultStorageSettings); + allowedNutritionSettings = new StorageSettings(this); + if (parent.def.building.defaultStorageSettings != null) + { + allowedNutritionSettings.CopyFrom(parent.def.building.defaultStorageSettings); + } + UpdateFuelFilter(); + TargetFuelLevel = Props.fuelCapacity; } - UpdateFuelFilter(); - TargetFuelLevel = Props.fuelCapacity; // Initialize target level } public override void PostExposeData() @@ -139,9 +137,7 @@ namespace ArachnaeSwarm public override void CompTick() { base.CompTick(); - innerContainer.ThingOwnerTick(); - - if (this.IsHashIntervalTick(60) && NutritionStored < TargetFuelLevel) + if (parent.IsHashIntervalTick(60) && NutritionStored < TargetFuelLevel && allowAutoRefuel) { TryAbsorbNutritiousThing(); } @@ -178,12 +174,120 @@ namespace ArachnaeSwarm } } - // ... (Production Flow methods remain the same) ... + // --- Production Flow --- + public override IEnumerable CompFloatMenuOptions(Pawn selPawn) + { + if (InProduction || !selPawn.CanReach(parent, PathEndMode.InteractionCell, Danger.Deadly)) + { + yield break; + } + if (Props.whitelist != null && !Props.whitelist.Contains(selPawn.kindDef)) + { + yield break; + } + + foreach (var process in Props.processes) + { + yield return new FloatMenuOption("StartProduction".Translate(process.thingDef.label), () => + { + // When the float menu is clicked, we set the selected process on the comp, + // so the JobDriver knows which process to start. + this._selectedProcess = process; + Job job = JobMaker.MakeJob(DefDatabase.GetNamed("ARA_IncubateJob"), parent); + selPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); + }); + } + } + + // This is now called by the JobDriver, without arguments. + public void StartProduction() + { + if (_selectedProcess == null) + { + Log.Error("CompInteractiveProducer tried to start production, but _selectedProcess is null."); + return; + } + productionUntilTick = Find.TickManager.TicksGame + _selectedProcess.productionTicks; + ticksUnderOptimalConditions = 0; + temperaturePenaltyPercent = 0f; + } + + private void FinishProduction() + { + float baseQuality = (_selectedProcess.productionTicks > 0) ? (float)ticksUnderOptimalConditions / _selectedProcess.productionTicks : 0f; + float finalQualityScore = Mathf.Clamp01(baseQuality - temperaturePenaltyPercent); + + for (int i = 0; i < Props.spawnCount.RandomInRange; i++) + { + Thing thing = ThingMaker.MakeThing(_selectedProcess.thingDef); + if (thing.TryGetComp() is CompQuality compQuality) + { + if (finalQualityScore >= 0.99f) compQuality.SetQuality(QualityCategory.Legendary, ArtGenerationContext.Colony); + else if (finalQualityScore >= 0.90f) compQuality.SetQuality(QualityCategory.Masterwork, ArtGenerationContext.Colony); + else if (finalQualityScore >= 0.70f) compQuality.SetQuality(QualityCategory.Excellent, ArtGenerationContext.Colony); + else if (finalQualityScore >= 0.50f) compQuality.SetQuality(QualityCategory.Good, ArtGenerationContext.Colony); + else if (finalQualityScore >= 0.20f) compQuality.SetQuality(QualityCategory.Normal, ArtGenerationContext.Colony); + else if (finalQualityScore >= 0.10f) compQuality.SetQuality(QualityCategory.Poor, ArtGenerationContext.Colony); + else compQuality.SetQuality(QualityCategory.Awful, ArtGenerationContext.Colony); + } + GenPlace.TryPlaceThing(thing, parent.InteractionCell, parent.Map, ThingPlaceMode.Near); + } + + if (Props.destroyOnSpawn) + { + parent.Destroy(); + } + ResetProduction(); + } + + private void ResetProduction() + { + _selectedProcess = null; + productionUntilTick = -1; + } // --- Fuel System --- - private void UpdateFuelFilter() { /* ... */ } - private void TryAbsorbNutritiousThing() { /* ... */ } - public bool IsAcceptableFuel(ThingDef def) { /* ... */ } + private void UpdateFuelFilter() + { + if (Props.fuelAcceptance != null) + { + var filter = allowedNutritionSettings.filter; + filter.SetDisallowAll(); + if (!Props.fuelAcceptance.whitelist.NullOrEmpty()) + { + foreach (var def in Props.fuelAcceptance.whitelist) filter.SetAllow(def, true); + } + if (!Props.fuelAcceptance.blacklist.NullOrEmpty()) + { + foreach (var def in Props.fuelAcceptance.blacklist) filter.SetAllow(def, false); + } + } + } + + private void TryAbsorbNutritiousThing() + { + for (int i = innerContainer.Count - 1; i >= 0; i--) + { + Thing thing = innerContainer[i]; + if (IsAcceptableFuel(thing.def)) + { + float nutrition = thing.GetStatValue(StatDefOf.Nutrition); + int numToAbsorb = Mathf.CeilToInt(Mathf.Min((float)thing.stackCount, 1f)); + containedNutrition += (float)numToAbsorb * nutrition; + thing.SplitOff(numToAbsorb).Destroy(); + return; + } + } + } + + public bool IsAcceptableFuel(ThingDef def) + { + var acceptance = Props.fuelAcceptance; + if (acceptance == null) return true; + if (acceptance.blacklist != null && acceptance.blacklist.Contains(def)) return false; + if (acceptance.whitelist != null && !acceptance.whitelist.NullOrEmpty()) return acceptance.whitelist.Contains(def); + return true; + } // --- IStoreSettingsParent & IThingHolder --- public StorageSettings GetStoreSettings() => allowedNutritionSettings; @@ -218,19 +322,17 @@ namespace ArachnaeSwarm { StringBuilder sb = new StringBuilder(); - // Ported logic from CompRefuelable sb.Append(Props.fuelLabel + ": " + NutritionStored.ToString("F0") + " / " + Props.fuelCapacity.ToString("F0")); if (InProduction) { - float ticksRemaining = _selectedProcess.productionTicks * (NutritionStored / _selectedProcess.totalNutritionNeeded); - sb.Append(" (" + ((int)ticksRemaining).ToStringTicksToPeriod() + ")"); + float nutritionRatePerDay = (_selectedProcess.totalNutritionNeeded / _selectedProcess.productionTicks) * 60000; + sb.Append(" (-" + nutritionRatePerDay.ToString("F1") + "/day)"); } if (Props.targetFuelLevelConfigurable) { sb.Append("\n" + "ConfiguredTargetFuelLevel".Translate(TargetFuelLevel.ToString("F0"))); } - // Our production info if (InProduction) { sb.AppendLine(); @@ -251,18 +353,16 @@ namespace ArachnaeSwarm return sb.ToString(); } - public override IEnumerable GetGizmos() + public override IEnumerable CompGetGizmosExtra() { - foreach (var g in base.GetGizmos()) yield return g; + foreach (var g in base.CompGetGizmosExtra()) yield return g; - // Ported Gizmos from CompRefuelable if (Props.targetFuelLevelConfigurable) { var setTargetGizmo = new Command_SetTargetFuelLevel(); setTargetGizmo.defaultLabel = "CommandSetTargetFuelLevel".Translate(); setTargetGizmo.defaultDesc = "CommandSetTargetFuelLevelDesc".Translate(); setTargetGizmo.icon = SetTargetFuelLevelCommand; - // We need to create a simple wrapper to make it work setTargetGizmo.setter = (level) => this.TargetFuelLevel = level; setTargetGizmo.getter = () => this.TargetFuelLevel; setTargetGizmo.max = this.Props.fuelCapacity; @@ -292,6 +392,46 @@ namespace ArachnaeSwarm } } - // ... (The rest of the methods: FinishProduction, ResetProduction, GetNutritionInContainer etc.) ... + private float GetNutritionInContainer() + { + float total = 0f; + for (int i = 0; i < innerContainer.Count; i++) + { + total += (float)innerContainer[i].stackCount * innerContainer[i].GetStatValue(StatDefOf.Nutrition); + } + return total; + } + } + + // A wrapper for the Gizmo since we are not CompRefuelable + public class Command_SetTargetFuelLevel : Command + { + public System.Action setter; + public System.Func getter; + public float max; + + public override void ProcessInput(Event ev) + { + base.ProcessInput(ev); + List list = new List(); + for (int i = 0; i < (int)max; i += 10) + { + float level = (float)i; + if(level > max) level = max; + + list.Add(new FloatMenuOption(level.ToString("F0"), () => setter(level))); + if(level >= max) break; + } + Find.WindowStack.Add(new FloatMenu(list)); + } + + public override bool InheritInteractionsFrom(Gizmo other) + { + if (other is Command_SetTargetFuelLevel otherGizmo) + { + return getter() == otherGizmo.getter(); + } + return false; + } } } \ No newline at end of file diff --git a/Source/ArachnaeSwarm/JobDriver_StartProduction.cs b/Source/ArachnaeSwarm/JobDriver_StartProduction.cs new file mode 100644 index 0000000..e78624f --- /dev/null +++ b/Source/ArachnaeSwarm/JobDriver_StartProduction.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using RimWorld; +using Verse; +using Verse.AI; + +namespace ArachnaeSwarm +{ + public class JobDriver_StartProduction : 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); + this.FailOnBurningImmobile(BuildingInd); + + yield return Toils_Goto.GotoThing(BuildingInd, PathEndMode.InteractionCell); + + Toil work = ToilMaker.MakeToil("MakeNewToils"); + work.initAction = delegate + { + var comp = Building.GetComp(); + comp.StartProduction(); + }; + work.defaultCompleteMode = ToilCompleteMode.Instant; + yield return work; + } + } +} \ No newline at end of file