示例#1
0
        public override void Tick()
        {
            base.Tick();
            if (Wearer == null)
            {
                if (onlineComp.Count > 0)
                {
                    OfflineAll();
                }
                shieldCur    = 0;
                energyCur    = 0;
                shieldInit   = shieldInitSec.SecondsToTicks();
                terminalInit = terminalInitSec.SecondsToTicks();
                PostPostTerminalOff();
                return;
            }
            oldWearer = Wearer;
            bool rechargeShield = true;

            if (energyCostPerSec > 0 && !CostEnergy(energyCostPerSec / 60f))
            {//报告离线
                if (terminalInit <= 0)
                {
                    PostPostTerminalOff();
                }
                //离线
                terminalInit = terminalInitSec.SecondsToTicks();
            }
            else if (terminalInit-- == 0)
            {//报告上线
                PostPostTerminalOn();
            }
            else if (terminalInit > 0)
            {
                //正在启动,不进行护盾充能
                rechargeShield = false;
            }


            float need;

            if (rechargeShield)
            {
                //给护盾充能
                if (shieldMax > 0 && shieldRecharge > 0 && savingRate < energyCur / energyCacheMax)
                {
                    if (shieldInit-- > 0)
                    {
                        if (!CostEnergy(shieldRecharge / 60f / shieldConvertRate / 3f))
                        {
                            shieldInit = shieldInitSec.SecondsToTicks();
                        }
                    }
                    else
                    {
                        need = Mathf.Min(shieldRecharge / 60f, shieldMax - shieldCur) / shieldConvertRate;
                        if (need > 0 && CostEnergy(need))
                        {
                            shieldCur += shieldRecharge / 60f;
                        }
                    }
                }
            }


            //给自己充能
            Comp.MapVoidEnergyNet mapNet = MapNet;
            if (mapNet == null)
            {
                return;
            }
            need = Mathf.Min(energyCacheMax - energyCur, energyRecharge / 60f);
            if (need == 0)
            {
                return;
            }
            float geted = mapNet.GetEnergy(need);

            energyCur += geted;
            need      -= geted;
            if (need <= 0 || (!worldConnect && !DebugSettings.godMode))
            {
                return;
            }
            energyCur += WorldNet.GetEnergy(need);
        }