Esempio n. 1
0
        private static bool PurchaseConfig(string curCfgName, ProceduralAvionicsTechNode techNode)
        {
            bool success = false;

            if (!HighLogic.CurrentGame.Parameters.Difficulty.BypassEntryPurchaseAfterResearch)
            {
                success = ProceduralAvionicsTechManager.PurchaseConfig(curCfgName, techNode);
            }

            if (success)
            {
                ProceduralAvionicsTechManager.SetMaxUnlockedTech(curCfgName, techNode.name);
            }

            return(success);
        }
        void WindowFunction(int windowID)
        {
            var configNames = ProceduralAvionicsTechManager.GetAvailableConfigs().ToArray();

            selectedConfigIndex = GUILayout.Toolbar(selectedConfigIndex, configNames);
            var guiAvionicsConfigName     = configNames[selectedConfigIndex];
            var currentlyDisplayedConfigs = ProceduralAvionicsTechManager.GetProceduralAvionicsConfig(guiAvionicsConfigName);

            foreach (var techNode in currentlyDisplayedConfigs.TechNodes.Values)
            {
                if (!techNode.IsAvailable)
                {
                    continue;
                }
                if (techNode == CurrentProceduralAvionicsTechNode)
                {
                    GUILayout.Label("Current Config: " + techNode.name);
                    GUILayout.Label("Storage Container: " + (techNode.hasScienceContainer ? "Yes" : "No"));
                }
                else
                {
                    var switchedConfig = false;
                    var unlockCost     = ProceduralAvionicsTechManager.GetUnlockCost(guiAvionicsConfigName, techNode);
                    if (unlockCost == 0)
                    {
                        if (GUILayout.Button("Switch to " + BuildTechName(techNode)))
                        {
                            switchedConfig = true;
                        }
                    }
                    else if (Funding.Instance.Funds < unlockCost)
                    {
                        GUILayout.Label("Can't afford " + BuildTechName(techNode) + BuildCostString(unlockCost));
                    }
                    else if (GUILayout.Button("Purchase " + BuildTechName(techNode) + BuildCostString(unlockCost)))
                    {
                        switchedConfig = true;
                        if (!HighLogic.CurrentGame.Parameters.Difficulty.BypassEntryPurchaseAfterResearch)
                        {
                            switchedConfig = ProceduralAvionicsTechManager.PurchaseConfig(guiAvionicsConfigName, techNode);
                        }
                        if (switchedConfig)
                        {
                            ProceduralAvionicsTechManager.SetMaxUnlockedTech(guiAvionicsConfigName, techNode.name);
                        }
                    }
                    if (switchedConfig)
                    {
                        Log("Configuration window changed, updating part window");
                        UpdateConfigSliders();
                        avionicsTechLevel = techNode.name;
                        CurrentProceduralAvionicsConfig = currentlyDisplayedConfigs;
                        avionicsConfigName = guiAvionicsConfigName;
                        AvionicsConfigChanged();
                    }
                }
            }
            GUILayout.Label(" ");
            if (GUILayout.Button("Close"))
            {
                showGUI = false;
            }

            GUI.DragWindow();
        }
Esempio n. 3
0
        private void WindowFunction(int windowID)
        {
            GUILayout.BeginHorizontal();

            bool oldShowInfo = _showInfo1;

            _showInfo1 = GUILayout.Toggle(_showInfo1, "ⓘ", HighLogic.Skin.button, GUILayout.ExpandWidth(false), GUILayout.Height(20));
            if (oldShowInfo != _showInfo1)
            {
                var settings = HighLogic.CurrentGame.Parameters.CustomParams <RP0Settings>();
                settings.AvionicsWindow_ShowInfo1 = _showInfo1;
                _shouldResetUIHeight = true;
            }

            if (_showInfo1)
            {
                GUILayout.Label(info1Text);
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginVertical(HighLogic.Skin.box);
            GUILayout.Label("Choose the avionics type:", HighLogic.Skin.label);
            int oldConfigIdx = _selectedConfigIndex;

            _selectedConfigIndex = GUILayout.Toolbar(_selectedConfigIndex, _avionicsConfigNames, HighLogic.Skin.button);
            if (oldConfigIdx != _selectedConfigIndex)
            {
                _shouldResetUIHeight = true;
            }

            string curCfgName = _avionicsConfigNames[_selectedConfigIndex];
            ProceduralAvionicsConfig curCfg = ProceduralAvionicsTechManager.GetProceduralAvionicsConfig(curCfgName);

            GUILayout.BeginHorizontal();

            oldShowInfo = _showInfo2;
            _showInfo2  = GUILayout.Toggle(_showInfo2, "ⓘ", HighLogic.Skin.button, GUILayout.ExpandWidth(false), GUILayout.Height(20));
            if (oldShowInfo != _showInfo2)
            {
                var settings = HighLogic.CurrentGame.Parameters.CustomParams <RP0Settings>();
                settings.AvionicsWindow_ShowInfo2 = _showInfo2;
                _shouldResetUIHeight = true;
            }

            if (_showInfo2)
            {
                GUILayout.Label(curCfg.description);
            }
            GUILayout.EndHorizontal();
            GUILayout.EndVertical();

            GUILayout.Space(7);

            GUILayout.BeginVertical(HighLogic.Skin.box);
            GUILayout.Label("Choose the tech level:", HighLogic.Skin.label);
            foreach (var techNode in curCfg.TechNodes.Values)
            {
                if (!techNode.IsAvailable)
                {
                    continue;
                }

                bool switchedConfig = false;
                int  unlockCost     = ProceduralAvionicsTechManager.GetUnlockCost(curCfgName, techNode);
                if (unlockCost == 0)
                {
                    bool isCurrent = techNode == CurrentProceduralAvionicsTechNode;
                    if (isCurrent)
                    {
                        GUILayout.Toggle(true, BuildTechName(techNode), HighLogic.Skin.button);
                        GUILayout.Label("Sample container: " + (techNode.hasScienceContainer ? "Yes" : "No"), HighLogic.Skin.label);
                        GUILayout.Label("Can hibernate: " + (techNode.disabledPowerFactor > 0 ? "Yes" : "No"), HighLogic.Skin.label);
                    }
                    else if (GUILayout.Button("Switch to " + BuildTechName(techNode), HighLogic.Skin.button))
                    {
                        switchedConfig = true;
                    }
                }
                else if (Funding.Instance.Funds < unlockCost)
                {
                    GUILayout.Label($"Can't afford {BuildTechName(techNode)} {BuildCostString(unlockCost)}", HighLogic.Skin.label);
                }
                else if (GUILayout.Button($"Purchase {BuildTechName(techNode)} {BuildCostString(unlockCost)}", HighLogic.Skin.button))
                {
                    switchedConfig = true;
                    if (!HighLogic.CurrentGame.Parameters.Difficulty.BypassEntryPurchaseAfterResearch)
                    {
                        switchedConfig = ProceduralAvionicsTechManager.PurchaseConfig(curCfgName, techNode);
                    }
                    if (switchedConfig)
                    {
                        ProceduralAvionicsTechManager.SetMaxUnlockedTech(curCfgName, techNode.name);
                    }
                }

                if (switchedConfig)
                {
                    Log("Configuration window changed, updating part window");
                    _shouldResetUIHeight   = true;
                    _showROTankSizeWarning = false;
                    SetupConfigNameFields();
                    avionicsTechLevel = techNode.name;
                    CurrentProceduralAvionicsConfig = curCfg;
                    avionicsConfigName = curCfgName;
                    AvionicsConfigChanged();
                    MonoUtilities.RefreshContextWindows(part);
                }
            }
            GUILayout.EndVertical();

            GUILayout.Space(7);

            GUILayout.BeginVertical(HighLogic.Skin.box);
            GUILayout.BeginHorizontal();

            oldShowInfo = _showInfo3;
            _showInfo3  = GUILayout.Toggle(_showInfo3, "ⓘ", HighLogic.Skin.button, GUILayout.ExpandWidth(false), GUILayout.Height(20));
            if (oldShowInfo != _showInfo3)
            {
                var settings = HighLogic.CurrentGame.Parameters.CustomParams <RP0Settings>();
                settings.AvionicsWindow_ShowInfo3 = _showInfo3;
                _shouldResetUIHeight = true;
            }

            if (_showInfo3)
            {
                GUILayout.Label(info3Text);
            }
            GUILayout.EndHorizontal();

            if (!IsScienceCore)
            {
                GUILayout.BeginHorizontal(GUILayout.MaxWidth(250));
                GUILayout.Label("Controllable mass: ", HighLogic.Skin.label, GUILayout.Width(150));
                _sControllableMass = GUILayout.TextField(_sControllableMass, HighLogic.Skin.textField);
                GUILayout.Label("t", HighLogic.Skin.label);
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal(GUILayout.MaxWidth(250));
            GUILayout.Label("EC amount: ", HighLogic.Skin.label, GUILayout.Width(150));
            _sECAmount = GUILayout.TextField(_sECAmount, HighLogic.Skin.textField);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal(GUILayout.MaxWidth(250));
            GUILayout.Label("Additional tank volume: ", HighLogic.Skin.label, GUILayout.Width(150));
            GUI.enabled   = _seekVolumeMethod != null;
            _sExtraVolume = GUILayout.TextField(_sExtraVolume, HighLogic.Skin.textField);
            GUI.enabled   = true;
            GUILayout.Label("l", HighLogic.Skin.label);
            GUILayout.EndHorizontal();

            if (_showROTankSizeWarning)
            {
                GUILayout.Label("ROTanks does not currently support automatic resizing to correct dimensions. Increase the part size manually until it has sufficient volume.", HighLogic.Skin.label);
            }

            GUILayout.EndVertical();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Apply", HighLogic.Skin.button))
            {
                ApplyAvionicsSettings();
            }

            if (GUILayout.Button("Close", HighLogic.Skin.button))
            {
                showGUI = false;
            }
            GUILayout.EndHorizontal();

            GUI.DragWindow();
        }