Example #1
0
        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;
            }
        }
Example #2
0
        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;
            }
        }