示例#1
0
        public virtual void Update()
        {
            if (_connectedRelay == null)
            {
                return;
            }

            //_energyToConsume = EnergyConsumptionPerSecond * DayNightCycle.main.deltaTime;
            bool requiresEnergy    = GameModeUtils.RequiresPower();
            bool hasPowerToConsume = !requiresEnergy || (this.AvailablePower >= EnergyConsumptionPerSecond);

            if (hasPowerToConsume && _prevPowerState != FCSPowerStates.Powered)
            {
                OnPowerResume?.Invoke();
                _prevPowerState = FCSPowerStates.Powered;
            }
            else if (!hasPowerToConsume && _prevPowerState != FCSPowerStates.Unpowered)
            {
                OnPowerOutage?.Invoke();
                _prevPowerState = FCSPowerStates.Unpowered;
            }

            //if (this.NotAllowToOperate)
            //    return;

            //if (!hasPowerToConsume)
            //    return;

            //if (requiresEnergy)
            //    _connectedRelay.ConsumeEnergy(_energyToConsume, out float amountConsumed);
        }
示例#2
0
        private void Update()
        {
            if (this.NotAllowToOperate)
            {
                return;
            }

            _energyToConsume = EnergyConsumptionPerSecond * DayNightCycle.main.deltaTime;
            var  batteryChargePull = DayNightCycle.main.deltaTime * chargeSpeed * _powercellData.GetCapacity();
            bool requiresEnergy    = GameModeUtils.RequiresPower();
            bool hasPowerToConsume = !requiresEnergy || (this.AvailablePower >= _energyToConsume);

            if (hasPowerToConsume && !_prevPowerState)
            {
                OnPowerResume?.Invoke();
                _prevPowerState = true;
            }
            else if (!hasPowerToConsume && _prevPowerState)
            {
                OnPowerOutage?.Invoke();
                _prevPowerState = false;
            }

            if (!hasPowerToConsume)
            {
                return;
            }


            if (requiresEnergy)
            {
                if (_connectedRelay.GetPower() <= _energyToConsume)
                {
                    _powercellData.RemoveCharge(_energyToConsume);
                    return;
                }

                if (!GetHasBreakerTripped())
                {
                    _connectedRelay.ConsumeEnergy(_energyToConsume, out float amountConsumed);
                }


                if (!_powercellData.IsFull())
                {
                    if (_connectedRelay.GetPower() >= batteryChargePull)
                    {
                        _chargeTimer -= Time.deltaTime;

                        if (_chargeTimer < 0)
                        {
                            _connectedRelay.ConsumeEnergy(batteryChargePull, out float amountPConsumed);
                            _powercellData.AddCharge(amountPConsumed);
                            QuickLogger.Debug($"Charging Battery: {amountPConsumed} units", true);
                            _chargeTimer = 5f;
                        }
                    }
                }
                //QuickLogger.Debug($"Power Consumed: {amountConsumed}");

                _mono.DisplayManager.UpdateVisuals(_powercellData);
            }
        }