diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index eeffb18..9da37bc 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/Assemblies/ArachnaeSwarm.pdb b/1.6/1.6/Assemblies/ArachnaeSwarm.pdb index 0627f59..3b3c8bc 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.pdb and b/1.6/1.6/Assemblies/ArachnaeSwarm.pdb differ diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 56b0905..1db2803 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -241,6 +241,7 @@ + @@ -259,6 +260,7 @@ + diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs index 3f266cd..63e1854 100644 --- a/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducer.cs @@ -55,16 +55,16 @@ namespace ArachnaeSwarm [StaticConstructorOnStartup] public class CompQueuedInteractiveProducer : ThingComp { - private List productionOrders = new List(); + protected List productionOrders = new List(); public ProcessDef selectedProcess; - private CompRefuelableNutrition _fuelComp; - private CompAffectedByFacilities _facilitiesComp; - private List _cachedProcesses; + protected CompRefuelableNutrition _fuelComp; + protected CompAffectedByFacilities _facilitiesComp; + protected List _cachedProcesses; public CompProperties_QueuedInteractiveProducer Props => (CompProperties_QueuedInteractiveProducer)props; - private CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp()); - private CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp()); + protected CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp()); + protected CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp()); public List Processes { @@ -225,7 +225,7 @@ namespace ArachnaeSwarm return (finalQuality, progress, order.temperaturePenaltyPercent); } - private void FinishProduction(QueuedProcessOrder order) + protected virtual void FinishProduction(QueuedProcessOrder order) { if (order.process == null) { diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducerWithFlux.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducerWithFlux.cs index 4634d08..64f8591 100644 --- a/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducerWithFlux.cs +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_CompInteractiveProducer/CompQueuedInteractiveProducerWithFlux.cs @@ -25,7 +25,7 @@ namespace ArachnaeSwarm public float NeutronFlux => neutronFlux; public float RawFlux => neutronFlux; public FluxMode CurrentFluxMode => fluxMode; - public float FluxEfficiency => IFluxController.GetEfficiency(neutronFlux); + public float FluxEfficiency => IFluxControllerExtensions.GetEfficiency(neutronFlux); public bool IsAutoMode => fluxMode != FluxMode.Manual; public bool IsIncubating => IsAnyOrderActive; public bool IsDormant => neutronFlux < 0.05f; diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawner.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawner.cs index 87d90b8..e7e5739 100644 --- a/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawner.cs +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawner.cs @@ -23,16 +23,16 @@ namespace ArachnaeSwarm public class CompQueuedPawnSpawner : ThingComp { - private List productionOrders = new List(); + protected List productionOrders = new List(); public QueuedPawnSpawnEntry selectedEntry; - private CompRefuelableNutrition _fuelComp; - private CompAffectedByFacilities _facilitiesComp; + protected CompRefuelableNutrition _fuelComp; + protected CompAffectedByFacilities _facilitiesComp; public CompProperties_QueuedPawnSpawner Props => (CompProperties_QueuedPawnSpawner)props; - private CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp()); - private CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp()); + protected CompRefuelableNutrition FuelComp => _fuelComp ?? (_fuelComp = parent.GetComp()); + protected CompAffectedByFacilities FacilitiesComp => _facilitiesComp ?? (_facilitiesComp = parent.GetComp()); public override void Initialize(CompProperties props) { diff --git a/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawnerWithFlux.cs b/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawnerWithFlux.cs index 4e3dcd9..60cf8de 100644 --- a/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawnerWithFlux.cs +++ b/Source/ArachnaeSwarm/Building_Comps/ARA_SpawnPawnFromList/CompQueuedPawnSpawnerWithFlux.cs @@ -25,7 +25,7 @@ namespace ArachnaeSwarm public float NeutronFlux => neutronFlux; public float RawFlux => neutronFlux; public FluxMode CurrentFluxMode => fluxMode; - public float FluxEfficiency => IFluxController.GetEfficiency(neutronFlux); + public float FluxEfficiency => IFluxControllerExtensions.GetEfficiency(neutronFlux); public bool IsAutoMode => fluxMode != FluxMode.Manual; public bool IsIncubating => IsAnyOrderActive; public bool IsDormant => neutronFlux < 0.05f; diff --git a/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs b/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs index bf5a2e9..00973ab 100644 --- a/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs +++ b/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs @@ -116,10 +116,10 @@ namespace ArachnaeSwarm } } - public override bool ShouldAutoRefuelNow => + public new bool ShouldAutoRefuelNow => allowAutoRefuel && TargetFuelLevel > 0.01f && (Fuel < TargetFuelLevel * 0.75f || Fuel == 0f); - public override bool ShouldAutoRefuelNowIgnoringFuelPct => + public new bool ShouldAutoRefuelNowIgnoringFuelPct => allowAutoRefuel && TargetFuelLevel > 0.01f && Fuel < TargetFuelLevel; // 覆盖基类属性,确保 WorkGiver 扫描时拦截 diff --git a/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs b/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs index b8ac223..74b916d 100644 --- a/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs +++ b/Source/ArachnaeSwarm/Buildings/Building_EquipmentOotheca/Building_EquipmentOotheca.cs @@ -35,9 +35,12 @@ namespace ArachnaeSwarm // === 属性 === public IFluxController FluxController => this; public float NeutronFlux => neutronFlux; + public float RawFlux => neutronFlux; public FluxMode FluxMode => fluxMode; - public float FluxEfficiency => IFluxController.GetEfficiency(neutronFlux); + public FluxMode CurrentFluxMode => fluxMode; + public float FluxEfficiency => IFluxControllerExtensions.GetEfficiency(neutronFlux); public bool IsAutoMode => fluxMode != FluxMode.Manual; + public bool IsIncubating => isIncubating; public bool IsDormant => neutronFlux < 0.05f; public CompRefuelableNutrition FuelComp => GetComp(); @@ -85,7 +88,7 @@ namespace ArachnaeSwarm private void InitializeNutrientInfo() { } // 清理完毕 // === Tick方法(带活性系统)=== - public override void Tick() + protected override void Tick() { base.Tick(); diff --git a/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs b/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs index 179f056..32714ac 100644 --- a/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs +++ b/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs @@ -37,9 +37,12 @@ namespace ArachnaeSwarm // === 属性 === public IFluxController FluxController => this; public float NeutronFlux => neutronFlux; + public float RawFlux => neutronFlux; public FluxMode FluxMode => fluxMode; - public float FluxEfficiency => IFluxController.GetEfficiency(neutronFlux); + public FluxMode CurrentFluxMode => fluxMode; + public float FluxEfficiency => IFluxControllerExtensions.GetEfficiency(neutronFlux); public bool IsAutoMode => fluxMode != FluxMode.Manual; + public bool IsIncubating => isIncubating; public bool IsDormant => neutronFlux < 0.05f; public CompRefuelableNutrition FuelComp => GetComp(); @@ -195,7 +198,7 @@ namespace ArachnaeSwarm } // === Tick方法 === - public override void Tick() + protected override void Tick() { base.Tick(); diff --git a/Source/ArachnaeSwarm/Buildings/IFluxController.cs b/Source/ArachnaeSwarm/Buildings/IFluxController.cs index 50f8d91..9823c3f 100644 --- a/Source/ArachnaeSwarm/Buildings/IFluxController.cs +++ b/Source/ArachnaeSwarm/Buildings/IFluxController.cs @@ -1,3 +1,5 @@ +using UnityEngine; + namespace ArachnaeSwarm { /// @@ -24,6 +26,21 @@ namespace ArachnaeSwarm string GetModeShort(); } + /// + /// IFluxController 扩展方法 + /// + public static class IFluxControllerExtensions + { + /// + /// 计算通量效率(非线性曲线) + /// + public static float GetEfficiency(float flux) + { + // 使用平方根曲线:0% -> 0, 50% -> 0.707, 100% -> 1.0 + return Mathf.Sqrt(Mathf.Clamp01(flux)); + } + } + /// /// 活性模式枚举(共享) ///