internal void FastUpdate(CyclopsHelmHUDManager cyclopsHelmHUD)
        {
            if (!powerIconsInitialized)
            {
                AddStatusIcons(cyclopsHelmHUD);
            }
            else
            {
                UpdateStatusIcons();
            }

            PowerRelay powerRelay = Cyclops.powerRelay;

            switch (settings.EnergyDisplay)
            {
            case HelmEnergyDisplay.PowerCellAmount:
                cyclopsHelmHUD.powerText.text = NumberFormatter.FormatValue(powerRelay.GetPower());
                break;

            case HelmEnergyDisplay.PercentageOverPowerCells:
                float percentOver = (powerRelay.GetPower() + this.ChargeManager.GetTotalReservePower()) / powerRelay.GetMaxPower();
                cyclopsHelmHUD.powerText.text = $"{NumberFormatter.FormatValue(percentOver * 100f)}%";
                break;

            case HelmEnergyDisplay.CombinedAmount:
                cyclopsHelmHUD.powerText.text = NumberFormatter.FormatValue(powerRelay.GetPower() + this.ChargeManager.GetTotalReservePower());
                break;

            default:     // HelmEnergyDisplay.PowerCellPercentage:
                float percent = powerRelay.GetPower() / powerRelay.GetMaxPower();
                cyclopsHelmHUD.powerText.text = $"{NumberFormatter.FormatValue(percent * 100f)}%";
                break;
            }
        }
예제 #2
0
        public void Toggle()
        {
            while (true)
            {
                isToggle = !isToggle;
                if (isToggle)
                {
                    if (energyMixin != null && energyMixin.charge > 0f || powerRelay != null && powerRelay.GetPower() > 0f || energyInterface != null && energyInterface.TotalCanProvide(out _) > 0f)
                    {
                        ErrorMessage.AddMessage($"BuilderModule Enabled");
                        Player.main.GetPDA().Close();
                        uGUI_BuilderMenu.Show();
                        handleInputFrame = Time.frameCount;
                        return;
                    }
                    else
                    {
                        ErrorMessage.AddMessage($"Insufficient Power");
                        continue;
                    }
                }

                ErrorMessage.AddMessage($"BuilderModule Disabled");
                OnDisable();
                break;
            }
        }
        public static void Postfix(PowerRelay __instance, ref float __result)
        {
            IPowerInterface powerInterface = __instance.inboundPowerSources.Find((x) => x is BaseInboundRelay || x is OtherConnectionRelay);

            if (powerInterface != null)
            {
                PowerControl powerControl = null;
                switch (powerInterface)
                {
                case BaseInboundRelay baseConnectionRelay:
                    powerControl = baseConnectionRelay.gameObject.GetComponent <PowerControl>();
                    break;

                case OtherConnectionRelay otherConnectionRelay:
                    powerControl = otherConnectionRelay.gameObject.GetComponent <PowerControl>();
                    break;
                }

                PowerRelay endRelay = powerControl.powerRelay.GetEndpoint();

                float endPower  = endRelay.GetPower();
                float powerHere = powerInterface.GetPower();

                if (endPower > powerHere)
                {
                    __result += endPower - powerHere;
                }
            }
        }
        internal void FastUpdate(CyclopsHelmHUDManager cyclopsHelmHUD, int lastPowerInt)
        {
            if (!cyclopsHelmHUD.LOD.IsFull() || Player.main.currentSub != Cyclops)
            {
                return; // Same early exit
            }
            if (totalPowerInfoIcons > 0)
            {
                if (!powerIconsInitialized)
                {
                    AddPowerIcons(cyclopsHelmHUD);
                }
                else
                {
                    UpdatePowerIcons();
                }
            }

            if (lastPowerInt < 0f)
            {
                return;
            }

            PowerRelay powerRelay = Cyclops.powerRelay;

            switch (lastDisplay = settings.EnergyDisplay)
            {
            case HelmEnergyDisplay.PowerCellAmount:
                cyclopsHelmHUD.powerText.text = NumberFormatter.FormatValue(powerRelay.GetPower());
                break;

            case HelmEnergyDisplay.PercentageOverPowerCells:
                float percentOver = (powerRelay.GetPower() + this.ChargeManager.GetTotalReservePower()) / powerRelay.GetMaxPower();
                cyclopsHelmHUD.powerText.text = $"{NumberFormatter.FormatValue(percentOver * 100f)}%";
                break;

            case HelmEnergyDisplay.CombinedAmount:
                cyclopsHelmHUD.powerText.text = NumberFormatter.FormatValue(powerRelay.GetPower() + this.ChargeManager.GetTotalReservePower());
                break;

            default:     // HelmEnergyDisplay.PowerCellPercentage:
                float percent = powerRelay.GetPower() / powerRelay.GetMaxPower();
                cyclopsHelmHUD.powerText.text = $"{NumberFormatter.FormatValue(percent * 100f)}%";
                break;
            }
        }
예제 #5
0
        protected override float GetPowerConsumedPerMinute()
        {
            PowerRelay relay          = filter.gameObject.GetComponentInParent <PowerRelay>();
            bool       powered        = relay.GetPower() >= 0.85f;
            bool       working        = filter.timeRemainingWater > 0f || filter.timeRemainingSalt > 0f;
            float      powerPerSecond = DayNightCycle.main.dayNightSpeed * 0.85f;

            return((working && powered) ? powerPerSecond * 60 : 0);
        }
        private void Recharge()
        {
            if (DayNightCycle.main == null || _mono.Manager == null || GetPowerSum() >= GetMaxPower())
            {
                return;
            }

            if (_mono.GetBaseDrainProtection())
            {
                if (GetBasePower() <= _mono.GetBasePowerProtectionGoal())
                {
                    return;
                }
            }

            _passedTime += DayNightCycle.main.deltaTime;

            if (_powerState != FCSPowerStates.Unpowered && _chargeMode == PowerToggleStates.ChargeMode && _passedTime >= 2f)
            {
                float num2 = 0f;
                _passedTime = num2;

                float num3 = DayNightCycle.main.deltaTime * LoadData.BatteryConfiguration.ChargeSpeed * LoadData.BatteryConfiguration.Capacity;
                if (_charge + num3 > LoadData.BatteryConfiguration.Capacity)
                {
                    num3 = LoadData.BatteryConfiguration.Capacity - _charge;
                }
                num2 += num3;

                float num4 = 0f;

                if (num2 > 0f && _connectedRelay.GetPower() > num2)
                {
                    _connectedRelay.ConsumeEnergy(num2, out num4);
                }

                if (num4 > 0f)
                {
                    ChargeBatteries(num4);
                }
            }
        }
예제 #7
0
        static int getMaxAmount(TechInfo techInfo)
        {
            int maxAmount = int.MaxValue;

            if (GameModeUtils.RequiresIngredients())
            {
                foreach (var ing in techInfo.ingredients)
                {
                    maxAmount = Math.Min(maxAmount, getCountAvailable(ing.techType) / ing.amount);
                }

                if (currentPowerRelay?.GetPower() > 5f)
                {
                    maxAmount = Math.Min(maxAmount, (int)(currentPowerRelay.GetPower() / 5f - 1f));
                }
            }

            return(maxAmount);
        }
예제 #8
0
        public static void PostUpdate(uGUI_SeaTruckHUD __instance)
        {
            if (__instance == null)
            {
                return;
            }

            if (!Main.config.bHUDAbsoluteValues)
            {
                return;
            }

            if (Player.main == null)
            {
                return;
            }

            if (!Player.main.inSeatruckPilotingChair)
            {
                return;
            }

            SeaTruckMotor motor = Player.main.GetComponentInParent <SeaTruckMotor>();

            if (motor != null)
            {
                PowerRelay relay = motor.relay;
                if (relay != null)
                {
                    float power       = Mathf.Floor(relay.GetPower());
                    float truckhealth = Mathf.Floor(motor.liveMixin.health);
                    __instance.textHealth.text = truckhealth.ToString();
                    //__instance.textHealth.fontSize = (truckhealth > 9999 ? 20 : 36);
                    __instance.textPower.text     = power.ToString();
                    __instance.textPower.fontSize = (power > 9999 ? 28 : 36);
                }
            }
        }
예제 #9
0
 public float PowerAvailable()
 {
     return(Mathf.RoundToInt(_connectedRelay.GetPower()));
 }
예제 #10
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);
            }
        }
예제 #11
0
 protected override float GetCharge()
 {
     return(target.GetPower());
 }