示例#1
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     netPort          = map.GetComponent <Comp.MapVoidEnergyNet>();
     compTempControl  = GetComp <Comp.VoidNetTempController>();
     compFlickable    = GetComp <CompFlickable>();
     energyCostPerSec = compTempControl.prop.energyCostPerSec;
 }
示例#2
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);
        }