コード例 #1
0
        private void AttemptTransfer()
        {
            Part targetPart = GetPartClicked();

            // No part was clicked
            if (targetPart == null)
            {
                ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_AbortNoPartSelected"), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                EndTransfer();
            }
            else
            {
                // part cannot be on another vessel
                if (!VesselConnected(targetPart))
                {
                    ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_AbortUnconnected"), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    EndTransfer();
                    return;
                }

                RadioactiveStorageContainer container = targetPart.GetComponent <RadioactiveStorageContainer>();
                if (container == null)
                {
                    ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_AbortNoRadStorage"), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    EndTransfer();
                }
                else
                {
                    ModuleResourceConverter converter = container.GetComponent <ModuleResourceConverter>();
                    FissionReactor          reactor   = container.GetComponent <FissionReactor>();

                    if (core != null && core.CoreTemperature > container.MaxTempForTransfer)
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_AbortTooHot", container.MaxTempForTransfer.ToString("F0")), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    else if (converter != null && converter.ModuleIsActive())
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_AbortToRunningConverter"), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    else if (reactor != null && reactor.ModuleIsActive())
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_AbortToRunningReactor"), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    else
                    {
                        // get available space in the target container
                        double availableSpace    = container.GetResourceAmount(curTransferType, true) - container.GetResourceAmount(curTransferType);
                        double availableResource = this.GetResourceAmount(curTransferType);
                        // transfer as much as possible
                        double amount = this.part.RequestResource(curTransferType, availableSpace);
                        container.part.RequestResource(curTransferType, -amount);
                        ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#LOC_NFElectrical_ModuleRadioactiveStorageContainer_Message_Success", amount.ToString("F1"), curTransferType.ToString()), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                        transferring    = false;
                        curTransferType = "";
                    }
                }
            }
        }
コード例 #2
0
        private void AttemptTransfer()
        {
            Part targetPart = GetPartClicked();

            // No part was clicked
            if (targetPart == null)
            {
                ScreenMessages.PostScreenMessage(new ScreenMessage("No part selected, exiting transfer mode...", 5.0f, ScreenMessageStyle.UPPER_CENTER));
                EndTransfer();
            }
            else
            {
                // part cannot be on another vessel
                if (!VesselConnected(targetPart))
                {
                    ScreenMessages.PostScreenMessage(new ScreenMessage("Cannot transfer to an unconnected vessel, exiting transfer mode...", 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    EndTransfer();
                    return;
                }

                RadioactiveStorageContainer container = targetPart.GetComponent <RadioactiveStorageContainer>();
                if (container == null)
                {
                    ScreenMessages.PostScreenMessage(new ScreenMessage("Selected part can't handle radioactive storage, exiting transfer mode...", 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    EndTransfer();
                }
                else
                {
                    Debug.Log("A");
                    ModuleResourceConverter converter = container.GetComponent <ModuleResourceConverter>();
                    FissionReactor          reactor   = container.GetComponent <FissionReactor>();
                    Debug.Log("B");
                    if (part.temperature > container.MaxTempForTransfer)
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage(String.Format("Selected part must be below {0:F0} K to transfer!", container.MaxTempForTransfer), 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }

                    else if (converter != null && converter.ModuleIsActive())
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage("Cannot transfer into a running converter!", 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    else if (reactor != null && reactor.ModuleIsActive())
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage("Cannot transfer into a running reactor! Seriously a bad idea!", 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    else
                    {
                        Debug.Log("s");
                        // get available space in the target container
                        double availableSpace    = container.GetResourceAmount(curTransferType, true) - container.GetResourceAmount(curTransferType);
                        double availableResource = this.GetResourceAmount(curTransferType);
                        Debug.Log("1");
                        // transfer as much as possible
                        double amount = this.part.RequestResource(curTransferType, availableSpace);
                        container.part.RequestResource(curTransferType, -amount);
                        Debug.Log("2");
                        ScreenMessages.PostScreenMessage(new ScreenMessage(String.Format("Transferred {0:F0} ", amount) + curTransferType + " to container!", 5.0f, ScreenMessageStyle.UPPER_CENTER));
                    }
                }
            }
        }