public override void CompTick() { base.CompTick(); if (flickableComp != null && !flickableComp.SwitchIsOn) { return; } //这里包括了其他组件的基础待机耗能 float energtCostPerTick = CompsEnergyCost; //cost if (InitCompleted) { if (energtCostPerTick > energyCache) { initCountdown = initTicks; foreach (VoidNetBuildCompBase compBase in voidNetBuildCompBases) { compBase.NotifyPostOffline(); } } else { energyCache -= energtCostPerTick; } } else { if (energtCostPerTick > energyCache) { initCountdown = initTicks; } else { energyCache -= energtCostPerTick; initCountdown--; } } //recharge energyCache += VoidNet.GetEnergy(Mathf.Min(energyRechargePerSec / 60f, energyCacheMax - energyCache)); if (DebugSettings.godMode) { energyCache = energyCacheMax; } }
private void TryRepair() { try { if (!repairing || VoidNet == null) { return; } int cur = parent.HitPoints; if (MaxHitPoints <= cur) { repairing = false; remainder = 0; return; } int gt = Find.TickManager.TicksGame; float needHeal = Mathf.Min((float)MaxHitPoints * RepairRatePerSec * (gt - lastRepairTick).TicksToSeconds(), (float)(MaxHitPoints - cur) - remainder); float heal = VoidEnergyConvertRate * VoidNet.GetEnergy(needHeal / VoidEnergyConvertRate) + remainder;//别忘了加上零头 remainder = heal % 1; if (heal >= 1) { parent.HitPoints = Mathf.Min(MaxHitPoints, cur + Mathf.FloorToInt(heal)); } lastRepairTick = gt; if (TwiceCheck && MaxHitPoints <= parent.HitPoints) { repairing = false; remainder = 0; } } catch (System.Exception e) { if (Prefs.DevMode) { Log.Warning(e.Message); } throw; } }