public float ProducePower(float requestedPower)
        {
            if (this.ThermalChargers.Count == 0 && this.ThermalChargerMk2.Count == 0)
            {
                ThermalState = ThermalState.None;
                return(0f);
            }

            temperature = GetThermalStatus(Cyclops);
            float availableThermalEnergy = ThermalChargingFactor * Time.deltaTime * Cyclops.thermalReactorCharge.Evaluate(temperature);

            if (availableThermalEnergy > PowerManager.MinimalPowerValue)
            {
                ThermalState = ThermalState.HeatAvailable;
                float mk1Power = this.ThermalChargers.Count * availableThermalEnergy;
                float mk2Power = this.ThermalChargerMk2.Count * availableThermalEnergy * PowerManager.Mk2ChargeRateModifier;

                this.ThermalChargerMk2.RechargeBatteries(mk1Power + mk2Power);

                return(mk1Power + mk2Power);
            }
            else if (this.SolarCharger.SolarState != SolarState.SunAvailable && this.ThermalChargerMk2.BatteryHasCharge)
            {
                ThermalState = ThermalState.BatteryAvailable;
                return(this.ThermalChargerMk2.GetBatteryPower(PowerManager.BatteryDrainRate, requestedPower));
            }
            else
            {
                ThermalState = ThermalState.None;
                return(0f);
            }
        }
        /// <summary>
        /// On each update, query the current thermal state, and fire the state changed event if the thermal state has
        /// changed since the previous update.
        /// </summary>
        void Update()
        {
            ThermalState thermalState = currentThermalState;

            if (m_PreviousThermalState.HasValue && (thermalState != m_PreviousThermalState.Value))
            {
                if (stateChanged != null)
                {
                    stateChanged(new ThermalStateChange(m_PreviousThermalState.Value, thermalState));
                }
            }

            m_PreviousThermalState = thermalState;
        }
 /// <summary>
 /// Constructs a thermal state change with the previous and current thermal states.
 /// </summary>
 /// <param name="previousThermalState">The previous thermal state for a state change event.</param>
 /// <param name="currentThermalState">The current thermal state for a state change event.</param>
 public ThermalStateChange(ThermalState previousThermalState, ThermalState currentThermalState)
 {
     m_PreviousThermalState = previousThermalState;
     m_CurrentThermalState  = currentThermalState;
 }
Exemplo n.º 4
0
 public ThermalProgressArgs(float temp, TimeSpan elapsed, ThermalState state)
 {
     Temperature         = temp;
     SecondsSinceStarted = elapsed;
     State = state;
 }