Esempio n. 1
0
        public float ProducePower(float requestedPower)
        {
            if (this.SolarChargers.Count == 0 && this.SolarChargerMk2.Count == 0)
            {
                SolarState = SolarState.None;
                return(0f);
            }

            float solarStatus          = GetSolarStatus(Cyclops);
            float availableSolarEnergy = SolarChargingFactor * solarStatus;

            solarPercentage = solarStatus * 100;

            if (availableSolarEnergy > PowerManager.MinimalPowerValue)
            {
                SolarState = SolarState.SunAvailable;
                float mk1Power = this.SolarChargers.Count * availableSolarEnergy;
                float mk2Power = this.SolarChargerMk2.Count * availableSolarEnergy * PowerManager.Mk2ChargeRateModifier;

                this.SolarChargerMk2.RechargeBatteries(mk1Power + mk2Power);

                return(mk1Power + mk2Power);
            }
            else if (this.ThermalCharginer.ThermalState != ThermalState.HeatAvailable && this.SolarChargerMk2.BatteryHasCharge)
            {
                SolarState = SolarState.BatteryAvailable;
                return(this.SolarChargerMk2.GetBatteryPower(PowerManager.BatteryDrainRate, requestedPower));
            }
            else
            {
                SolarState = SolarState.None;
                return(0f);
            }
        }
Esempio n. 2
0
 public void Tick(SolarState state, float solarRotorPosition, double elapsedTime)
 {
     if (elapsedTime < 4000 && _lastState != null)
     {
         _timestamp += elapsedTime;
         Transition transition = GetTransition(state, solarRotorPosition);
         UpdateHistory(transition);
     }
     _lastState = state;
 }
Esempio n. 3
0
            public SolarState Handle(SolarManager manager)
            {
                SolarState next = Next(manager);

                if (next != null)
                {
                    Transition(this, next, manager);
                }
                else
                {
                    Act(manager);
                    next = this;
                }
                return(next);
            }
Esempio n. 4
0
        private void Init()
        {
            // launch tests
            // TestSuite.AllTests.TestAll();
            // Initialization
            mainBatteriesManager      = new BatteryManager(battery => battery.CubeGrid == Me.CubeGrid);
            connectedBatteriesManager = new BatteryManager(battery => battery.CubeGrid != Me.CubeGrid);
            display      = new SolarDisplay("Main Base Solar LCD Panel", false);
            solarManager = new SolarManager("A");
            dayTracker   = new DayTracker();

            Deserializer deserializer = new Deserializer(Me.CustomData);

            solarManager.Deserialize(deserializer);
            dayTracker.Deserialize(deserializer);
            solarState = SolarState.Deserialize(deserializer.Get("solarState"));
        }
Esempio n. 5
0
        public void Main(string argument, UpdateType updateSource)
        {
            ME   = Me;
            GTS  = GridTerminalSystem;
            ECHO = Echo;
            try {
                if (solarManager == null)
                {
                    Init();
                }
                if (String.IsNullOrEmpty(argument))
                {
                    Tick();
                }
                else
                {
                    if (argument == "reset")
                    {
                        solarState = SolarState.Transition(solarState, new SolarStateReseting(), solarManager);
                    }
                    else if (argument == "idle")
                    {
                        solarState = SolarState.Transition(solarState, new SolarStateIdlingDay(), solarManager);
                    }
                    else if (argument.StartsWith("addPylon"))
                    {
                        string[] args = argument.Split(null as char[], StringSplitOptions.RemoveEmptyEntries);
                        for (int i = 1; i < args.Length; ++i)
                        {
                            solarManager.AddPylon(args[i]);
                        }
                    }
                }
            } catch (Exception e) {
                // Dump the exception content to the
                Echo("An error occurred during script execution.");
                Echo($"Exception: {e}\n---");

                // Rethrow the exception to make the programmable block halt execution properly
                throw;
            }
        }
Esempio n. 6
0
 private TransitionTypeEnum GetTransitionType(SolarState newState)
 {
     if (_lastState == null)
     {
         return(TransitionTypeEnum.Irrelevant);
     }
     else if (_lastState.GetName() == newState.GetName())
     {
         // apparently can't check types directly
         return(TransitionTypeEnum.None);
     }
     else if (_lastState is SolarStateIdlingDay && newState is SolarStateChasing)
     {
         return(TransitionTypeEnum.IdlingToChasing);
     }
     else if (_lastState is SolarStateChasing && newState is SolarStateIdlingDay)
     {
         return(TransitionTypeEnum.ChasingToIdling);
     }
     else if (_lastState is SolarStateChasing && newState is SolarStateIdlingDusk)
     {
         return(TransitionTypeEnum.DayToDusk);
     }
     else if (_lastState is SolarStateIdlingDusk && newState is SolarStateReseting)
     {
         return(TransitionTypeEnum.DuskToNight);
     }
     else if (_lastState is SolarStateIdlingNight && newState is SolarStateIdlingDawn)
     {
         return(TransitionTypeEnum.NightToDawn);
     }
     else if (_lastState is SolarStateIdlingDawn && newState is SolarStateChasing)
     {
         return(TransitionTypeEnum.DawnToDay);
     }
     else
     {
         return(TransitionTypeEnum.Irrelevant);
     }
 }
Esempio n. 7
0
        private void Tick()
        {
            switch (updateCounter % 3)
            {
            case 0:
                mainBatteriesManager.UpdateFromGrid();
                break;

            case 1:
                connectedBatteriesManager.UpdateFromGrid();
                break;

            case 2:
                solarManager.UpdateFromGrid();
                break;
            }
            ++updateCounter;
            solarManager.Tick();
            solarState = solarState.Handle(solarManager);
            dayTracker.Tick(solarState, solarManager.WitnessPosition, Runtime.TimeSinceLastRun.TotalMilliseconds);
            UpdateDisplay();
        }
Esempio n. 8
0
 public static SolarState Transition(SolarState oldState, SolarState newState, SolarManager manager)
 {
     oldState.Stop(manager);
     newState.Start(manager);
     return(newState);
 }
Esempio n. 9
0
 private Transition GetTransition(SolarState newState, float solarRotorPosition) => new Transition
 {
     Type          = GetTransitionType(newState),
     Timestamp     = _timestamp,
     EstimatedTime = EstimateTimeFromPosition(solarRotorPosition)
 };