diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 36d7672..b5d2326 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml b/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml index 74d62a1..cf3413a 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_NutrientNetworkBuilding.xml @@ -39,9 +39,22 @@
  • ARA_MorphableResearchBench
  • 80 + 10 0.9 + +
  • + +
  • ARA_BioforgeIncubator
  • +
  • ARA_BioforgeIncubator_Thing
  • +
  • ARA_JellyVat
  • +
  • ARA_GrowthVat
  • +
  • ARA_MorphableResearchBench
  • + + 80 + +
  • 10000.0 @@ -63,6 +76,7 @@
  • ARA_GrowthVat
  • + ARA_Buildings diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index e4961eb..0e25ad9 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -107,6 +107,10 @@ + + + + @@ -121,9 +125,6 @@ - - - diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompLineDrawer.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompLineDrawer.cs new file mode 100644 index 0000000..9bd7783 --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompLineDrawer.cs @@ -0,0 +1,70 @@ +using RimWorld; +using Verse; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace ArachnaeSwarm +{ + public class CompProperties_LineDrawer : CompProperties + { + public List linkableBuildings; + public float maxDistance = 999f; + + public CompProperties_LineDrawer() + { + compClass = typeof(CompLineDrawer); + } + } + + public class CompLineDrawer : ThingComp + { + private CompProperties_LineDrawer Props => (CompProperties_LineDrawer)props; + private List linkedBuildings = new List(); + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + FindAndLinkBuildings(); + } + + public override void CompTick() + { + base.CompTick(); + if (parent.IsHashIntervalTick(120)) + { + FindAndLinkBuildings(); + } + } + + private void FindAndLinkBuildings() + { + int previousCount = linkedBuildings.Count; + + linkedBuildings.Clear(); + if (Props.linkableBuildings.NullOrEmpty()) return; + + var potentialTargets = parent.Map.listerBuildings.allBuildingsColonist.Where(b => + b != parent && + Props.linkableBuildings.Contains(b.def) && + parent.Position.DistanceTo(b.Position) <= Props.maxDistance + ); + + linkedBuildings.AddRange(potentialTargets); + + if (linkedBuildings.Count != previousCount) + { + parent.Map.mapDrawer.MapMeshDirty(parent.Position, MapMeshFlagDefOf.Things, true, false); + } + } + + public override void PostPrintOnto(SectionLayer layer) + { + base.PostPrintOnto(layer); + foreach (var building in linkedBuildings) + { + PowerNetGraphics.PrintWirePieceConnecting(layer, this.parent, building, false); + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompNutrientProvider.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompNutrientProvider.cs index a38fa3a..d447c98 100644 --- a/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompNutrientProvider.cs +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_NutrientNetwork/CompNutrientProvider.cs @@ -3,6 +3,7 @@ using Verse; using System.Linq; using UnityEngine; using System.Text; +using System.Collections.Generic; namespace ArachnaeSwarm { @@ -10,7 +11,7 @@ namespace ArachnaeSwarm { private CompRefuelableNutrition selfRefuelable; private new CompProperties_NutrientProvider Props => (CompProperties_NutrientProvider)props; - + public override void PostSpawnSetup(bool respawningAfterLoad) { base.PostSpawnSetup(respawningAfterLoad); @@ -82,8 +83,6 @@ namespace ArachnaeSwarm float efficiency = Mathf.Clamp(parent.GetStatValue(StatDef.Named("NutrientTransmissionEfficiency")), 0f, Props.maxEfficiency); float finalCost = fuelToTransfer * (1 - efficiency); - // Log.Message($"[NutrientProvider] Found target: {targetBuilding.Building.Label}. Fuel: {consumerComp.Fuel:F0}/{consumerComp.Props.fuelCapacity:F0}. Needs: {fuelNeeded:F2}. Transferring: {fuelToTransfer:F2}. Final cost: {finalCost:F2}"); - selfRefuelable.ConsumeFuel(finalCost); consumerComp.ReceiveFuel(fuelToTransfer); } @@ -97,12 +96,10 @@ namespace ArachnaeSwarm private float GetDesiredFuelLevel(CompRefuelableNutrition comp) { - // If target is 0 (initial default) or max (UI default), treat as "fill to full". if (comp.TargetFuelLevel <= 0.01f || comp.TargetFuelLevel >= comp.Props.fuelCapacity * 0.99f) { return comp.Props.fuelCapacity; } - // Otherwise, respect the player's custom setting. return comp.TargetFuelLevel; } }