public void PowerNetworkUpdate(float Voltage)     //Could be optimised to not update when voltage is same as previous voltage
 {
     if (Powered != null)
     {
         if (AdvancedControlToScript)
         {
             Powered.PowerNetworkUpdate(Voltage);
         }
         else
         {
             if (Voltage <= 1)
             {
                 State = PowerStates.Off;
             }
             else if (Voltage > MaximumWorkingVoltage)
             {
                 State = PowerStates.OverVoltage;
             }
             else if (Voltage < MinimumWorkingVoltage)
             {
                 State = PowerStates.LowVoltage;
             }
             else
             {
                 State = PowerStates.On;
             }
             Powered.StateUpdate(State);
         }
     }
 }
Exemple #2
0
 public override void PowerStateUpdate(PowerStates state)
 {
     if (state == PowerStates.On || state == PowerStates.OverVoltage)
     {
         processor.SetState(new ProcessorIdle(processor));
     }
 }
Exemple #3
0
 public override void PowerStateUpdate(PowerStates state)
 {
     if (state == PowerStates.On || state == PowerStates.OverVoltage)
     {
         microwave.SetState(new MicrowaveOpen(microwave));
     }
 }
Exemple #4
0
        public void StateUpdate(PowerStates State)
        {
            if (!isServer)
            {
                return;
            }
            switch (State)
            {
            case PowerStates.On:
                ServerChangeState(true, invokeEvent: false);
                powerState = State;
                break;

            case PowerStates.LowVoltage:
                ServerChangeState(false, invokeEvent: false);
                powerState = State;
                break;

            case PowerStates.OverVoltage:
                ServerChangeState(true, invokeEvent: false);
                powerState = State;
                break;

            default:
                ServerChangeState(false, invokeEvent: false);
                powerState = State;
                break;
            }
        }
Exemple #5
0
 public override void PowerStateUpdate(PowerStates state)
 {
     if (state == PowerStates.Off || state == PowerStates.LowVoltage)
     {
         microwave.SetState(new MicrowaveUnpowered(microwave));
     }
 }
Exemple #6
0
    public void StateUpdate(PowerStates newPowerState)
    {
        if (!isServer)
        {
            return;
        }
        powerState = newPowerState;
        if (mState == LightMountState.Broken ||
            mState == LightMountState.MissingBulb)
        {
            return;
        }

        switch (newPowerState)
        {
        case PowerStates.On:
            ServerChangeLightState(LightMountState.On);
            return;

        case PowerStates.LowVoltage:
            ServerChangeLightState(LightMountState.Emergency);
            return;

        case PowerStates.OverVoltage:
            ServerChangeLightState(LightMountState.BurnedOut);
            return;

        case PowerStates.Off:
            ServerChangeLightState(LightMountState.Emergency);
            return;
        }
    }
        public void StateUpdate(PowerStates State)
        {
            CurrentState = State;
            if (spriteHandler == null)
            {
                spriteHandler = GetComponentInChildren <SpriteHandler>();
            }

            if (APCConnectionHandler == null)
            {
                APCConnectionHandler = GetComponentInChildren <APCPoweredDevice>();
            }

            // For a future iteration, allow the jukebox to be connected to the power grid.

            /*
             * if (State <= PowerStates.On)
             * {
             *      Stop();
             *      TabUpdateMessage.SendToPeepers(gameObject, NetTabType.Jukebox, TabAction.Close);
             * }
             */

            // StateUpdate might happen before start
            if (IsPlaying)
            {
                APCConnectionHandler.Wattusage = InUseWattUsage;
            }
            else
            {
                APCConnectionHandler.Wattusage = StandByWattUsage;
            }
        }
Exemple #8
0
 public override void PowerStateUpdate(PowerStates state)
 {
     if (state == PowerStates.Off || state == PowerStates.LowVoltage)
     {
         processor.SetState(new ProcessorUnpowered(processor));
         processor.EjectContents();
     }
 }
Exemple #9
0
    public void SetPowerState(PowerStates state)
    {
        PowerState exitingState = powerState;

        powerState = powerStates[state];
        exitingState?.OnStateExit(powerState);
        powerState?.OnStateEnter(exitingState);
    }
 public void UpdateSynchronisedState(PowerStates _State)
 {
     State = _State;
     if (Powered != null)
     {
         Powered.StateUpdate(State);
     }
 }
Exemple #11
0
 public void StateUpdate(PowerStates State)
 {
     if (State == PowerStates.Off || State == PowerStates.LowVoltage)
     {
         SetPowered(false);
     }
     else
     {
         SetPowered(true);
     }
 }
Exemple #12
0
 public void StateUpdate(PowerStates State)
 {
     if (State == PowerStates.Off || State == PowerStates.LowVoltage)
     {
         isOn = false;
     }
     else
     {
         isOn = true;
     }
 }
 public void StateUpdate(PowerStates State)
 {
     if (State == PowerStates.Off || State == PowerStates.LowVoltage)
     {
         ToggleOn(false);
     }
     else
     {
         ToggleOn(true);
     }
 }
Exemple #14
0
 /// <summary>
 /// Part of interface IAPCPowered. Sets the processor's state according to the given power state.
 /// </summary>
 /// <param name="state">The power state to set the processor's state with.</param>
 public void StateUpdate(PowerStates state)
 {
     EnsureInit();             // This method could be called before the component's Awake().
     if (isServer)             // Since state changes affect animations (and call an Rpc animation function), only server can do this.
     {
         if (currentState == null)
         {
             SetState(new ProcessorUnpowered(this));
         }
         currentState.PowerStateUpdate(state);
     }
 }
Exemple #15
0
    private void UpdateSynchronisedState(PowerStates _State)
    {
        if (_State != State)
        {
            Logger.LogTraceFormat("{0}({1}) state changing {2} to {3}", Category.Electrical, name, transform.position.To2Int(), State, _State);
        }

        State = _State;
        if (Powered != null)
        {
            Powered.StateUpdate(State);
        }
    }
Exemple #16
0
    public void StateUpdate(PowerStates State)
    {
        if (State == PowerStates.Off || State == PowerStates.LowVoltage)
        {
            SyncPowered(powered, false);
        }
        else
        {
            SyncPowered(powered, true);
        }

        if (!powerInit)
        {
            powerInit = true;
        }
    }
 public void StateUpdate(PowerStates State)
 {
     if (CurrentState != State)
     {
         CurrentState = State;
         if (State == PowerStates.Off)
         {
             PoweredDevice.Wattusage = OffWatts;
             SetPowerOff();
         }
         else
         {
             PoweredDevice.Wattusage = OnWatts;
             SetOnline();
         }
     }
 }
Exemple #18
0
        public void StateUpdate(PowerStates State)
        {
            RelatedAPC = GetComponent <APCPoweredDevice>().RelatedAPC;
            if (State == PowerStates.Off || State == PowerStates.LowVoltage)
            {
                SyncPowered(powered, false);
            }
            else
            {
                SyncPowered(powered, true);
            }

            if (!powerInit)
            {
                powerInit = true;
            }
        }
	public void ApplyPowerUp(PowerStates powerState, float modifier, float duration)
	{
		PlayerMovement control = GetComponent<PlayerMovement>();
		m_PowerStateTimers[powerState] = duration;

		switch (powerState)
		{
			case PowerStates.SuperSpeed:
				control._fMoveSpeed = Mathf.Max(control._fMoveSpeed, m_MovementSpeed * modifier);
				break;
			case PowerStates.Invulnerability:
				m_IsInvulnerable = true;
                GetComponentInChildren<Shield>().GetComponent<SpriteRenderer>().enabled = true;
				break;
			default:
				break;
		}
	}
Exemple #20
0
        private void PowerDown()
        {
            if (_powerState != PowerStates.powerOffline)
            {
                if (powerDownFraction <= 0)
                {
                    _powerState = PowerStates.powerOffline;
                }
                else
                {
                    powerDownFraction -= 0.01;
                }

                PartResource megajouleResource = part.Resources.list.FirstOrDefault(r => r.resourceName == FNResourceManager.FNRESOURCE_MEGAJOULES);
                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = Math.Max(0.001, megajouleResource.maxAmount * powerDownFraction);
                    megajouleResource.amount    = Math.Min(megajouleResource.maxAmount, megajouleResource.amount);
                }

                PartResource electricChargeResource = part.Resources.list.FirstOrDefault(r => r.resourceName == "ElectricCharge");
                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = Math.Max(0.001, electricChargeResource.maxAmount * powerDownFraction);
                    electricChargeResource.amount    = Math.Min(electricChargeResource.maxAmount, electricChargeResource.amount);
                }
            }
            else
            {
                PartResource megajouleResource = part.Resources.list.FirstOrDefault(r => r.resourceName == FNResourceManager.FNRESOURCE_MEGAJOULES);
                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = 0.001;
                    megajouleResource.amount    = 0;
                }

                PartResource electricChargeResource = part.Resources.list.FirstOrDefault(r => r.resourceName == "ElectricCharge");
                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = 0.001;
                    electricChargeResource.amount    = 0;
                }
            }
        }
Exemple #21
0
    private bool newState;     // Used to skip setup after first time set in states. ONLY USED IN ExecuteGameState!


    void Awake()
    {
        Debug.Log("GameController Awake()");
        Debug.logger.logEnabled = true;
        mS = MainStates.Election;
        eS = ElectionStates.PassPresident;
        lS = LegislationStates.None;
        pS = PowerStates.None;
        statePanelScript      = statePanel.GetComponent <StatePanelScript> ();
        confirmButtonScript   = confirmButton.GetComponent <ButtonScript> ();
        jaButtonScript        = jaButton.GetComponent <ButtonScript> ();
        neinButtonScript      = neinButton.GetComponent <ButtonScript> ();
        failCountScript       = FailCounter.GetComponent <FailCountScript> ();
        tileController        = new TileController(6, 11);
        drawCount.text        = tileController.GetDrawCount().ToString();
        discardCount.text     = tileController.GetDiscardCount().ToString();
        gameStateObjectScript = gameStateObject.GetComponent <GameStateObjectScript> ();

        newState = true;
    }
Exemple #22
0
    private void UpdateSynchronisedState(PowerStates _OldState, PowerStates _State)
    {
        EnsureInit();
        if (_State != State)
        {
            Logger.LogTraceFormat("{0}({1}) state changing {2} to {3}", Category.Electrical, name, transform.position.To2Int(), State, _State);
        }

        State = _State;
        if (Powered != null && StateUpdateOnClient)
        {
            if (SelfPowered)
            {
                Powered.StateUpdate(PowerStates.On);
            }
            else
            {
                Powered.StateUpdate(State);
            }
        }
    }
Exemple #23
0
        private void PowerDown()
        {
            if (_powerState != PowerStates.powerOffline)
            {
                if (powerDownFraction <= 0)
                {
                    _powerState = PowerStates.powerOffline;
                }
                else
                {
                    powerDownFraction -= 0.01;
                }

                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = Math.Max(0.0001, megajouleResource.maxAmount * powerDownFraction);
                    megajouleResource.amount    = Math.Min(megajouleResource.maxAmount, megajouleResource.amount);
                }

                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = Math.Max(0.0001, electricChargeResource.maxAmount * powerDownFraction);
                    electricChargeResource.amount    = Math.Min(electricChargeResource.maxAmount, electricChargeResource.amount);
                }
            }
            else
            {
                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = 0.0001;
                    megajouleResource.amount    = 0;
                }

                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = 0.0001;
                    electricChargeResource.amount    = 0;
                }
            }
        }
Exemple #24
0
        private void UpdateMegaWattPowerBuffer()
        {
            if (maxStableMegaWattPower != _previousMaxStableMegaWattPower)
            {
                _powerState = PowerStates.powerChange;
            }

            _previousMaxStableMegaWattPower = maxStableMegaWattPower;

            if (maxStableMegaWattPower > 0 && (TimeWarp.fixedDeltaTime != previousDeltaTime || _powerState != PowerStates.powerOnline))
            {
                _powerState = PowerStates.powerOnline;

                var megaWattBufferingBonus = attachedPowerSource.PowerBufferBonus * maxStableMegaWattPower;
                requiredMegawattCapacity = Math.Max(0.0001, TimeWarp.fixedDeltaTime * maxStableMegaWattPower + megaWattBufferingBonus);
                var previousMegawattCapacity = Math.Max(0.0001, previousDeltaTime * maxStableMegaWattPower + megaWattBufferingBonus);

                if (megajouleResource != null)
                {
                    var mageJouleRatio = megajouleResource.amount / megajouleResource.maxAmount;
                    megajouleResource.maxAmount = requiredMegawattCapacity;

                    megajouleResource.amount = requiredMegawattCapacity > previousMegawattCapacity
                        ? Math.Max(0, Math.Min(requiredMegawattCapacity, megajouleResource.amount + requiredMegawattCapacity - previousMegawattCapacity))
                        : Math.Max(0, Math.Min(requiredMegawattCapacity, mageJouleRatio * requiredMegawattCapacity));
                }

                if (part.Resources.Contains(FNResourceManager.STOCK_RESOURCE_ELECTRICCHARGE))
                {
                    PartResource electricChargeResource = part.Resources[FNResourceManager.STOCK_RESOURCE_ELECTRICCHARGE];
                    var          electricChargeRatio    = electricChargeResource.amount / electricChargeResource.maxAmount;
                    electricChargeResource.maxAmount = requiredMegawattCapacity;

                    electricChargeResource.amount = requiredMegawattCapacity > previousMegawattCapacity
                        ? Math.Max(0, Math.Min(requiredMegawattCapacity, electricChargeResource.amount + requiredMegawattCapacity - previousMegawattCapacity))
                        : Math.Max(0, Math.Min(requiredMegawattCapacity, electricChargeRatio * requiredMegawattCapacity));
                }
            }
            previousDeltaTime = TimeWarp.fixedDeltaTime;
        }
    public void StateUpdate(PowerStates State)
    {
        CurrentState = State;
        if (spriteRenderer == null)
        {
            spriteRenderer = GetComponentInChildren <SpriteRenderer>();
        }

        if (APCConnectionHandler == null)
        {
            APCConnectionHandler = GetComponentInChildren <APCPoweredDevice>();
        }

        if (spriteRenderer.sprite == SPRITE_ON)
        {
            APCConnectionHandler.Wattusage = InUseWattUsage;
        }
        else
        {
            APCConnectionHandler.Wattusage = StandByWattUsage;
        }
    }
        private void UpdateMegaWattPowerBuffer(double maxStableMegaWattPower)
        {
            if (maxStableMegaWattPower != _previousMaxStableMegaWattPower)
            {
                _powerState = PowerStates.powerChange;
            }

            _previousMaxStableMegaWattPower = maxStableMegaWattPower;

            if (maxStableMegaWattPower > 0 && (TimeWarp.fixedDeltaTime != previousTimeWarp || _powerState != PowerStates.powerOnline))
            {
                _powerState = PowerStates.powerOnline;

                var powerBufferingBonus = attachedThermalSource.PowerBufferBonus * maxStableMegaWattPower;
                requiredMegawattCapacity = (float)Math.Max(0.0001, TimeWarp.fixedDeltaTime * maxStableMegaWattPower + powerBufferingBonus);
                var previousMegawattCapacity = Math.Max(0.0001f, previousTimeWarp * maxStableMegaWattPower + powerBufferingBonus);

                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = requiredMegawattCapacity;

                    if (maxStableMegaWattPower > 0.1)
                    {
                        megajouleResource.amount = requiredMegawattCapacity > previousMegawattCapacity
                                ? Math.Max(0, Math.Min(requiredMegawattCapacity, megajouleResource.amount + requiredMegawattCapacity - previousMegawattCapacity))
                                : Math.Max(0, Math.Min(requiredMegawattCapacity, (megajouleResource.amount / megajouleResource.maxAmount) * requiredMegawattCapacity));
                    }
                }

                if (part.Resources.Contains(FNResourceManager.STOCK_RESOURCE_ELECTRICCHARGE))
                {
                    PartResource electricChargeResource = part.Resources[FNResourceManager.STOCK_RESOURCE_ELECTRICCHARGE];
                    electricChargeResource.maxAmount = requiredMegawattCapacity;
                    electricChargeResource.amount    = maxStableMegaWattPower <= 0 ? 0 : Math.Min(electricChargeResource.maxAmount, electricChargeResource.amount);
                }
            }
            previousTimeWarp = TimeWarp.fixedDeltaTime;
        }
Exemple #27
0
        private void UpdateMegaWattPowerBuffer(double maxStableMegaWattPower)
        {
            if (maxStableMegaWattPower != _previousMaxStableMegaWattPower)
            {
                _powerState = PowerStates.powerChange;
            }

            _previousMaxStableMegaWattPower = maxStableMegaWattPower;

            if (maxStableMegaWattPower > 0 && (TimeWarp.fixedDeltaTime != previousTimeWarp || _powerState != PowerStates.powerOnline))
            {
                _powerState = PowerStates.powerOnline;

                var powerBufferingBonus = attachedThermalSource.PowerBufferBonus * maxStableMegaWattPower;
                requiredMegawattCapacity = (float)Math.Max(0.0001, TimeWarp.fixedDeltaTime * maxStableMegaWattPower + powerBufferingBonus);
                var previousMegawattCapacity = Math.Max(0.0001f, previousTimeWarp * maxStableMegaWattPower + powerBufferingBonus);

                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = requiredMegawattCapacity;

                    if (maxStableMegaWattPower > 0.1)
                    {
                        megajouleResource.amount = requiredMegawattCapacity > previousMegawattCapacity
                                ? Math.Max(0, Math.Min(requiredMegawattCapacity, megajouleResource.amount + requiredMegawattCapacity - previousMegawattCapacity))
                                : Math.Max(0, Math.Min(requiredMegawattCapacity, (megajouleResource.amount / megajouleResource.maxAmount) * requiredMegawattCapacity));
                    }
                }

                PartResource electricChargeResource = part.Resources.list.FirstOrDefault(r => r.resourceName == "ElectricCharge");
                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = requiredMegawattCapacity;
                    electricChargeResource.amount    = maxStableMegaWattPower <= 0 ? 0 : Math.Min(electricChargeResource.maxAmount, electricChargeResource.amount);
                }
            }
            previousTimeWarp = TimeWarp.fixedDeltaTime;
        }
    public void StateUpdate(PowerStates State)
    {
        switch (State)
        {
        case PowerStates.On:
            Trigger(true);
            return;

        case PowerStates.LowVoltage:
            ServerChangeLightState(LightState.Emergency);
            wallMount.SwitchChangeState(false);
            return;

        case PowerStates.OverVoltage:
            Trigger(true);
            return;

        case PowerStates.Off:
            ServerChangeLightState(LightState.Emergency);
            wallMount.SwitchChangeState(false);
            return;
        }
    }
Exemple #29
0
        /// <summary>
        /// Triggers on device power state change
        /// </summary>
        /// <param name="newState">New state</param>
        void IAPCPowered.StateUpdate(PowerStates newState)
        {
            //Ignore if state hasn't changed
            if (newState == currentState)
            {
                return;
            }

            //Show processing state change
            if (foodToBeProcessed?.Count > 0)
            {
                //Any state other than off
                if (currentState == PowerStates.Off)
                {
                    Chat.AddLocalMsgToChat("The seed extractor begins processing", (Vector2Int)registerObject.WorldPosition, this.gameObject);
                }
                //Off state
                else if (newState == PowerStates.Off)
                {
                    Chat.AddLocalMsgToChat("The seed extractor shuts down!", (Vector2Int)registerObject.WorldPosition, this.gameObject);
                }
            }
            currentState = newState;
        }
            public void GetStatus()
            {
                if (root_device != null)
                {
                    //searching sub devices for a power switching service
                    SubDevice.Service power_switch = root_device.GetServiceByType("urn:schemas-upnp-org:service:SwitchPower:1");
                    if (power_switch != null)
                    {
                        Console.WriteLine("Found the power switch service.");
                        Console.WriteLine("service control url: " + url_base + power_switch.ControlUrl);
                        Console.WriteLine("service type: [" + power_switch.ServiceType + "]");
                        string soap_method = "GetStatus";
                        string soap_body = "<?xml version=\"1.0\"?>\r\n";
                        soap_body += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n";
                        soap_body += "<s:Body>\r\n";
                        soap_body += "<m:" + soap_method + " xmlns:m=\"" + power_switch.ServiceType + "\">\r\n";
                        soap_body += "</m:" + soap_method + ">\r\n";
                        soap_body += "</s:Body>\r\n";
                        soap_body += "</s:Envelope>\r\n";
                        string soap_action = power_switch.ServiceType + "#" + soap_method;
                        SOAP soap = new SOAP(url_base + power_switch.ControlUrl, soap_body, soap_action);
                        soap.RequestFinished += delegate(SOAP request_finished_soap, bool request_successful)
                        {
                            bool successful = false;
                            if (request_successful)
                            {
                                //TODO ===||
                                //        \/
                                //XmlNamespaceManager nsMgr = new XmlNamespaceManager(myXmlDoc.NameTable);
                                //nsMgr.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/");
                                //nsMgr.AddNamespace("m", power_switch.ServiceType);
                                //XmlNode urlNodes = doc.SelectNodes("/s:Body/s:m");
                                //Console.WriteLine("Soap Response: \n" + request_finished_soap.Response);
                                string[] seps = { "\r\n" };
                                string[] lines = request_finished_soap.Response.Split(seps, StringSplitOptions.RemoveEmptyEntries);
                                if (lines.Length > 0)
                                {
                                    if (lines[0] == "HTTP/1.1 200 OK")
                                    {
                                        if (request_finished_soap.Response.IndexOf(soap_method + "Response") != -1)
                                        {
                                            int stats_start = request_finished_soap.Response.IndexOf("<ResultStatus>");
                                            if (stats_start != -1)
                                            {
                                                string status_string = request_finished_soap.Response.Substring(stats_start + "<ResultStatus>".Length);
                                                int status_end = status_string.IndexOf("</ResultStatus>");
                                                if (status_end != -1)
                                                {
                                                    status_string = status_string.Substring(0, status_end);
                                                    if (status_string == "1")
                                                        status = PowerStates.On;
                                                    else status = PowerStates.Off;

                                                    successful = true;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else Console.WriteLine("Soap Request failed.");
                            if (GettingStatusCompleted != null)
                                GettingStatusCompleted(this, successful);
                        };
                        soap.StartRequest();
                    }
                }
            }
            public void SwitchPower(PowerStates state)
            {
                if (root_device != null)
                {
                    //searching sub devices for power switching service
                    SubDevice.Service power_switch = root_device.GetServiceByType("urn:schemas-upnp-org:service:SwitchPower:1");
                    if (power_switch != null)
                    {
                        Console.WriteLine("Found the power switch service.");
                        Console.WriteLine("service control url: " + url_base + power_switch.ControlUrl);
                        Console.WriteLine("service type: [" + power_switch.ServiceType + "]");
                        string soap_method = "SetTarget";
                        string soap_body = "<?xml version=\"1.0\"?>\r\n";
                        soap_body += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\r\n";
                        soap_body += "<s:Body>\r\n";
                        soap_body += "<m:" + soap_method + " xmlns:m=\"" + power_switch.ServiceType + "\">\r\n";
                        if (state == PowerStates.On)
                            soap_body += "<newTargetValue>1</newTargetValue>";
                        else soap_body += "<newTargetValue>0</newTargetValue>";
                        soap_body += "</m:" + soap_method + ">\r\n";
                        soap_body += "</s:Body>\r\n";
                        soap_body += "</s:Envelope>\r\n";
                        string soap_action = power_switch.ServiceType + "#" + soap_method;
                        SOAP soap = new SOAP(url_base + power_switch.ControlUrl, soap_body, soap_action);
                        soap.RequestFinished += delegate(SOAP request_finished_soap, bool request_successful)
                        {
                            bool successful = false;
                            if (request_successful)
                            {
                                //Console.WriteLine("Soap Response: \n" + request_finished_soap.Response);
                                string[] seps = { "\r\n" };
                                string[] lines = request_finished_soap.Response.Split(seps, StringSplitOptions.RemoveEmptyEntries);
                                if (lines.Length > 0)
                                {
                                    if (lines[0] == "HTTP/1.1 200 OK")
                                    {
                                        if (request_finished_soap.Response.IndexOf(soap_method + "Response") != -1)
                                        {
                                            successful = true;
                                            status = state;
                                        }
                                    }
                                }
                            }
                            else Console.WriteLine("Soap Request failed.");
                            if (SwitchingPowerCompleted != null)
                                SwitchingPowerCompleted(this, successful);
                        };
                        soap.StartRequest();

                    }
                }
            }
Exemple #32
0
 public void StateUpdate(PowerStates State)
 {
 }
        private void PowerDown()
        {
            if (_powerState != PowerStates.powerOffline)
            {
                if (powerDownFraction <= 0)
                    _powerState = PowerStates.powerOffline;
                else
                    powerDownFraction -= 0.01;

                PartResource megajouleResource = part.Resources.list.FirstOrDefault(r => r.resourceName == FNResourceManager.FNRESOURCE_MEGAJOULES);
                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = Math.Max(0.001, megajouleResource.maxAmount * powerDownFraction);
                    megajouleResource.amount = Math.Min(megajouleResource.maxAmount, megajouleResource.amount);
                }

                PartResource electricChargeResource = part.Resources.list.FirstOrDefault(r => r.resourceName == "ElectricCharge");
                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = Math.Max(0.001, electricChargeResource.maxAmount * powerDownFraction);
                    electricChargeResource.amount = Math.Min(electricChargeResource.maxAmount, electricChargeResource.amount);
                }
            }
            else
            {
                PartResource megajouleResource = part.Resources.list.FirstOrDefault(r => r.resourceName == FNResourceManager.FNRESOURCE_MEGAJOULES);
                if (megajouleResource != null)
                {
                    megajouleResource.maxAmount = 0.001;
                    megajouleResource.amount = 0;
                }

                PartResource electricChargeResource = part.Resources.list.FirstOrDefault(r => r.resourceName == "ElectricCharge");
                if (electricChargeResource != null)
                {
                    electricChargeResource.maxAmount = 0.001;
                    electricChargeResource.amount = 0;
                }
            }
        }
        public override void OnFixedUpdate()
        {
            base.OnFixedUpdate();
            if (IsEnabled && myAttachedReactor != null && FNRadiator.hasRadiatorsForVessel(vessel))
            {
                updateGeneratorPower();

                // check if MaxStableMegaWattPower is changed
                var maxStableMegaWattPower = MaxStableMegaWattPower;
                if (maxStableMegaWattPower != _previousMaxStableMegaWattPower)
                    _powerState = PowerStates.powerChange;

                _previousMaxStableMegaWattPower = maxStableMegaWattPower;

                if (maxStableMegaWattPower > 0 && (TimeWarp.fixedDeltaTime != previousTimeWarp || _powerState != PowerStates.powerOnline))
                {
                    _powerState = PowerStates.powerOnline;

                    var powerBufferingBonus = myAttachedReactor.PowerBufferBonus * maxStableMegaWattPower;
                    var requiredMegawattCapacity = Math.Max(0.0001, TimeWarp.fixedDeltaTime * maxStableMegaWattPower + powerBufferingBonus);
                    var previousMegawattCapacity = Math.Max(0.0001, previousTimeWarp * maxStableMegaWattPower + powerBufferingBonus);

                    if (megajouleResource != null)
                    {
                        megajouleResource.maxAmount = requiredMegawattCapacity;

                        if (maxStableMegaWattPower > 0.1)
                        {
                            megajouleResource.amount = requiredMegawattCapacity > previousMegawattCapacity
                                    ? Math.Max(0, Math.Min(requiredMegawattCapacity, megajouleResource.amount + requiredMegawattCapacity - previousMegawattCapacity))
                                    : Math.Max(0, Math.Min(requiredMegawattCapacity, (megajouleResource.amount / megajouleResource.maxAmount) * requiredMegawattCapacity));
                        }
                    }

                    //PartResource wasteheatResource = part.Resources.list.FirstOrDefault(r => r.resourceName == FNResourceManager.FNRESOURCE_WASTEHEAT);
                    //if (wasteheatResource != null)
                    //{
                    //    var previousMaxAmount = wasteheatResource.maxAmount;
                    //    wasteheatResource.maxAmount = TimeWarp.fixedDeltaTime * part.mass * 1000;
                    //    this.part.RequestResource(FNResourceManager.FNRESOURCE_WASTEHEAT, previousTimeWarp > TimeWarp.fixedDeltaTime ? previousMaxAmount - wasteheatResource.maxAmount : 0);
                    //}

                    PartResource electricChargeResource = part.Resources.list.FirstOrDefault(r => r.resourceName == "ElectricCharge");
                    if (electricChargeResource != null)
                    {
                        //if (maxStableMegaWattPower <= 0)
                        electricChargeResource.maxAmount = requiredMegawattCapacity;
                        electricChargeResource.amount = maxStableMegaWattPower <= 0 ? 0 : Math.Min(electricChargeResource.maxAmount, electricChargeResource.amount);
                    }
                }
                previousTimeWarp = TimeWarp.fixedDeltaTime;

                // don't produce any power when our reactor has stopped
                if (maxStableMegaWattPower <= 0)
                {
                    PowerDown();
                    return;
                }
                else
                    powerDownFraction = 1;

                double electrical_power_currently_needed;

                if (myAttachedReactor.ShouldApplyBalance(chargedParticleMode ? ElectricGeneratorType.charged_particle : ElectricGeneratorType.thermal))
                {
                    var chargedPowerPerformance = myAttachedReactor.EfficencyConnectedChargedEnergyGenrator * myAttachedReactor.ChargedPowerRatio;
                    var thermalPowerPerformance = myAttachedReactor.EfficencyConnectedThermalEnergyGenrator * (1 - myAttachedReactor.ChargedPowerRatio);

                    var totalPerformance = chargedPowerPerformance + thermalPowerPerformance;
                    var balancePerformanceRatio = (chargedParticleMode ? chargedPowerPerformance / totalPerformance : thermalPowerPerformance / totalPerformance);

                    electrical_power_currently_needed = (getCurrentUnfilledResourceDemand(FNResourceManager.FNRESOURCE_MEGAJOULES) + getSpareResourceCapacity(FNResourceManager.FNRESOURCE_MEGAJOULES)) * balancePerformanceRatio;
                }
                else
                    electrical_power_currently_needed = getCurrentUnfilledResourceDemand(FNResourceManager.FNRESOURCE_MEGAJOULES)  + getSpareResourceCapacity(FNResourceManager.FNRESOURCE_MEGAJOULES);

                double electricdt = 0;
                double electricdtps = 0;
                double max_electricdtps = 0;

                if (!chargedParticleMode) // thermal mode
                {
                    double carnotEff = 1.0 - coldBathTemp / hotBathTemp;
                    _totalEff = carnotEff * pCarnotEff * myAttachedReactor.ThermalEnergyEfficiency;

                    myAttachedReactor.NotifyActiveThermalEnergyGenrator(_totalEff, ElectricGeneratorType.thermal);

                    if (_totalEff <= 0 || coldBathTemp <= 0 || hotBathTemp <= 0 || maxThermalPower <= 0) return;

                    double thermal_power_currently_needed = electrical_power_currently_needed / _totalEff; // _totalEff;

                    double thermal_power_requested = Math.Max(Math.Min(maxThermalPower, thermal_power_currently_needed) * TimeWarp.fixedDeltaTime, 0.0);

                    requestedPower_f = (float)thermal_power_requested / TimeWarp.fixedDeltaTime;

                    double input_power = consumeFNResource(thermal_power_requested, FNResourceManager.FNRESOURCE_THERMALPOWER);

                    if (!(myAttachedReactor.EfficencyConnectedChargedEnergyGenrator > 0) && input_power < thermal_power_requested)
                        input_power += consumeFNResource(thermal_power_requested - input_power, FNResourceManager.FNRESOURCE_CHARGED_PARTICLES);

                    double wastedt = input_power * _totalEff;

                    consumeFNResource(wastedt, FNResourceManager.FNRESOURCE_WASTEHEAT);
                    electricdt = input_power * _totalEff;
                    electricdtps = Math.Max(electricdt / TimeWarp.fixedDeltaTime, 0.0);
                    max_electricdtps = maxThermalPower * _totalEff;
                }
                else // charged particle mode
                {
                    _totalEff = isupgraded ? upgradedDirectConversionEff : directConversionEff;

                    myAttachedReactor.NotifyActiveChargedEnergyGenrator(_totalEff, ElectricGeneratorType.charged_particle);

                    if (_totalEff <= 0) return;

                    double charged_power_currently_needed = electrical_power_currently_needed; // _totalEff / ;

                    var charged_power_requested = Math.Max(Math.Min(maxChargedPower, charged_power_currently_needed) * TimeWarp.fixedDeltaTime, 0.0);

                    requestedPower_f = (float)charged_power_requested / TimeWarp.fixedDeltaTime;

                    double input_power = consumeFNResource(charged_power_requested, FNResourceManager.FNRESOURCE_CHARGED_PARTICLES);

                    electricdt = input_power * _totalEff;
                    electricdtps = Math.Max(electricdt / TimeWarp.fixedDeltaTime, 0.0);
                    double wastedt = input_power * _totalEff;
                    max_electricdtps = maxChargedPower * _totalEff;
                    consumeFNResource(wastedt, FNResourceManager.FNRESOURCE_WASTEHEAT);
                }
                outputPower = -(float)supplyFNResourceFixedMax(electricdtps * TimeWarp.fixedDeltaTime, max_electricdtps * TimeWarp.fixedDeltaTime, FNResourceManager.FNRESOURCE_MEGAJOULES) / TimeWarp.fixedDeltaTime;
            }
            else
            {
                previousTimeWarp = TimeWarp.fixedDeltaTime;
                if (IsEnabled && !vessel.packed)
                {
                    if (!FNRadiator.hasRadiatorsForVessel(vessel))
                    {
                        IsEnabled = false;
                        Debug.Log("[WarpPlugin] Generator Shutdown: No radiators available!");
                        ScreenMessages.PostScreenMessage("Generator Shutdown: No radiators available!", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                        PowerDown();
                    }

                    if (myAttachedReactor == null)
                    {
                        IsEnabled = false;
                        Debug.Log("[WarpPlugin] Generator Shutdown: No reactor available!");
                        ScreenMessages.PostScreenMessage("Generator Shutdown: No reactor available!", 5.0f, ScreenMessageStyle.UPPER_CENTER);
                        PowerDown();
                    }
                }
                else
                {
                    PowerDown();
                }
            }
        }
Exemple #35
0
 public override void PowerStateUpdate(PowerStates state)
 {
 }