internal override void DrawWindow(Int32 id)
        {
            SetLocalVariables();

            try { GUILayout.BeginVertical(); }
            catch (Exception) { LogFormatted("DrawWindow: GUILayout not ready yet"); return; }

            if (mbARP.lstResourcesToDisplay.Count == 0)
            {
                GUILayout.Label("No current resources configured to display");
            }
            else
            {
                Int32 ResourceID;
                Rect  rectBar;
                for (int i = 0; i < mbARP.lstResourcesToDisplay.Count; i++)
                {
                    ResourceID = mbARP.lstResourcesToDisplay[i];
                    //Is it a separator - draw and skip?
                    if (ResourceID == 0)
                    {
                        GUILayout.Space(3 + settings.SpacerPadding);
                        GUILayout.Label("", Styles.styleSeparatorH, GUILayout.Width(WindowRect.width - 15), GUILayout.Height(2));
                        GUILayout.Space(settings.SpacerPadding);
                        continue;
                    }

                    //add space at top of window
                    if (i > 0)
                    {
                        GUILayout.Space(4);
                    }

                    GUILayout.BeginHorizontal();

                    //add title
                    Rect rectIcon = Drawing.DrawResourceIcon(lstResources[ResourceID].ResourceDef.name);

                    //If the global alarms setting is on
                    if (settings.AlarmsEnabled)
                    {
                        GUILayout.Space(1);
                        //work out the alarm ico to display
                        GUIContent contAlarm = new GUIContent(Resources.btnAlarm);
                        if (settings.Resources[ResourceID].AlarmEnabled)
                        {
                            contAlarm.image = Resources.btnAlarmEnabled;
                            switch (lstResources[ResourceID].MonitorState)
                            {
                            case ARPResource.MonitorStateEnum.Alert:
                                if (lstResources[ResourceID].AlarmState != ARPResource.AlarmStateEnum.Unacknowledged || DateTime.Now.Millisecond < 500)
                                {
                                    contAlarm.image = Resources.btnAlarmAlert;
                                }
                                break;

                            case ARPResource.MonitorStateEnum.Warn:
                                if (lstResources[ResourceID].AlarmState != ARPResource.AlarmStateEnum.Unacknowledged || DateTime.Now.Millisecond < 500)
                                {
                                    contAlarm.image = Resources.btnAlarmWarn;
                                }
                                break;

                            default:
                                break;
                            }
                        }
                        //Draw the button - if the alarm is unacknowledged then acknowledge, else toggle alarm status
                        if (GUILayout.Button(contAlarm, Styles.styleAlarmButton))
                        {
                            if (lstResources[ResourceID].AlarmState == ARPResource.AlarmStateEnum.Unacknowledged)
                            {
                                lstResources[ResourceID].SetAlarmAcknowledged();
                            }
                            else
                            {
                                settings.Resources[ResourceID].AlarmEnabled = !settings.Resources[ResourceID].AlarmEnabled;
                            }
                        }
                    }
                    //Is this resource selected
                    Boolean Highlight = SelectedResources.ContainsKey(ResourceID) && SelectedResources[ResourceID].AllVisible;

                    //For resources with no stage specifics - or the Resources is set to split display and values are different for all vessel and flow enabled ones
                    if (!settings.SplitLastStage || !lstResources[ResourceID].ResourceConfig.SplitLastStage || settings.ShowBase ||
                        (lstResources[ResourceID].ResourceDef.resourceFlowMode == ResourceFlowMode.ALL_VESSEL ||
                         lstResources[ResourceID].ResourceDef.resourceFlowMode == ResourceFlowMode.STAGE_PRIORITY_FLOW) &&
                        ((!settings.Resources[ResourceID].ShowReserveLevels) ||
                         (!lstResourcesLastStage.ContainsKey(ResourceID)))
                        )
                    {
                        //full width bar
                        rectBar = Drawing.CalcBarRect(rectIcon, Icon2BarOffset_Left, 275, 15);  //was 245
                        if (Drawing.DrawResourceBar(rectBar, lstResources[ResourceID], Styles.styleBarGreen_Back, Styles.styleBarGreen, Styles.styleBarGreen_Thin, settings.ShowRates, Highlight, Styles.styleBarHighlight))
                        {
                            //MonoBehaviourExtended.LogFormatted_DebugOnly("Clicked");
                            SelectedResources.TogglePartResourceVisible(ResourceID);
                        }
                    }
                    else
                    {
                        Int32 FullVesselBarOffset = settings.StageBarOnRight ? Icon2BarOffset_Left : Icon2BarOffset_Right;
                        Int32 StageBarOffset      = settings.StageBarOnRight ? Icon2BarOffset_Right : Icon2BarOffset_Left;

                        //need full Vessel and current stage bars
                        rectBar = Drawing.CalcBarRect(rectIcon, FullVesselBarOffset, 135, 15);  //was 120
                        if (Drawing.DrawResourceBar(rectBar, lstResources[ResourceID], Styles.styleBarGreen_Back, Styles.styleBarGreen, Styles.styleBarGreen_Thin, settings.ShowRates, Highlight, Styles.styleBarHighlight))
                        {
                            SelectedResources.TogglePartResourceVisible(ResourceID);
                        }

                        //get last stage of this resource and set it
                        if (lstResourcesLastStage.ContainsKey(ResourceID))
                        {
                            Highlight = SelectedResources.ContainsKey(ResourceID) && SelectedResources[ResourceID].LastStageVisible;
                            rectBar   = Drawing.CalcBarRect(rectIcon, StageBarOffset, 135, 15); //was 120
                            if (Drawing.DrawResourceBar(rectBar, lstResourcesLastStage[ResourceID], Styles.styleBarBlue_Back, Styles.styleBarBlue, Styles.styleBarBlue_Thin, settings.ShowRates, Highlight, Styles.styleBarHighlight))
                            {
                                SelectedResources.TogglePartResourceVisible(ResourceID, true);
                            }
                        }
                    }
                    GUILayout.EndHorizontal();
                }
            }
            GUILayout.BeginHorizontal();
            ////STAGING STUFF
            if (settings.StagingEnabled)
            {
                ////Keyboard Stage Lock
                //GUIContent contLock = new GUIContent(Resources.btnUnlock, "Keyboard Staging Unlocked\r\nClick to toggle");
                //if (FlightInputHandler.fetch.stageLock)
                //    contLock = new GUIContent(Resources.btnLock, "Keyboard Staging Locked\r\nClick to toggle");
                //if (GUILayout.Button(contLock, Styles.styleAlarmButton))
                //    FlightInputHandler.fetch.stageLock = !FlightInputHandler.fetch.stageLock;

                if (!settings.AutoStagingEnabled)
                {
                    //GUILayout.Label("Stage:", Styles.styleStageTextHead, GUILayout.Width(50));
                    if (GUILayout.Button("Stage:", Styles.styleStageTextHead, GUILayout.Width(50)))
                    {
                        settings.AutoStagingEnabled = !settings.AutoStagingEnabled;
                    }
                    GUIStyle   styleStageNum = new GUIStyle(Styles.styleStageTextHead);
                    GUIContent contStageNum  = new GUIContent(StageManager.CurrentStage.ToString());
                    //styleStageNum.normal.textColor=new Color(173,43,43);
                    //GUIContent contStageNum = new GUIContent(StageManager.CurrentStage.ToString(),"NO Active Engines");
                    //if (THERE ARE ACTIVE ENGINES IN STAGE)
                    //{
                    //contStageNum.tooltip="Active Engines";
                    styleStageNum.normal.textColor = new Color(117, 206, 60);
                    //}

                    GUILayout.Label(contStageNum, styleStageNum, GUILayout.Width(20));

                    if (settings.StagingEnabledInMapView || !MapView.MapIsEnabled)
                    {
                        if (mbARP.blnVesselIsControllable)
                        {
                            if (GUILayout.Button("Activate Stage", "ButtonGeneral", GUILayout.Width(100)))
                            {
                                StageManager.ActivateNextStage();
                            }
                            GUILayout.Space(21 + IconAlarmOffset);
                            //GUILayout.Space(51 + IconAlarmOffset);
                        }
                        else
                        {
                            GUILayout.Label("No Vessel Control", GUILayout.Width(120));
                            GUILayout.Space(1 + IconAlarmOffset);
                            //GUILayout.Space(31 + IconAlarmOffset);
                        }
                    }
                    //GUILayout.Space(48 + IconAlarmOffset);
                    //GUILayout.Space(21 + IconAlarmOffset);
                }
                else
                {
                    if (GUILayout.Button("Auto:", Styles.styleStageTextHead, GUILayout.Width(50)))
                    {
                        settings.AutoStagingEnabled = !settings.AutoStagingEnabled;
                    }
                    GUILayout.Label(StageManager.CurrentStage.ToString(), Styles.styleStageTextHead, GUILayout.Width(20));
                    GUILayout.Label("to", Styles.styleStageTextHead, GUILayout.Width(30));
                    GUILayout.Label(mbARP.AutoStagingTerminateAt.ToString(), Styles.styleStageTextHead, GUILayout.Width(30));
                    DrawHorizontalSlider(ref mbARP.AutoStagingTerminateAt, 0, mbARP.AutoStagingMaxStage);
                    GUILayout.EndHorizontal();
                    GUILayout.BeginHorizontal();

                    String   strButtonArm = "Arm";
                    GUIStyle styleArm     = new GUIStyle(SkinsLibrary.CurrentSkin.button)
                    {
                        fontStyle = FontStyle.Bold
                    };
                    if (mbARP.AutoStagingArmed)
                    {
                        strButtonArm = "Disarm";
                        styleArm.normal.textColor = styleArm.hover.textColor = new Color32(207, 31, 31, 255);
                    }
                    else
                    {
                        styleArm.normal.textColor = styleArm.hover.textColor = new Color32(183, 254, 0, 255);
                    }

                    if (GUILayout.Button(strButtonArm, styleArm, GUILayout.Width(75)))
                    {
                        mbARP.AutoStagingArmed = !mbARP.AutoStagingArmed;
                    }

                    GUIStyle StatusStyle = new GUIStyle(SkinsLibrary.CurrentSkin.label);
                    StatusStyle.normal.textColor = mbARP.AutoStagingStatusColor;
                    //GUILayout.Label(mbARP.AutoStagingStatus, StatusStyle, GUILayout.Width(147 + IconAlarmOffset));
                    GUILayout.Label(mbARP.AutoStagingStatus, StatusStyle, GUILayout.Width(120 + IconAlarmOffset));
                    //GUILayout.Label(mbARP.AutoStagingStatus, StatusStyle, GUILayout.Width(150 + IconAlarmOffset));
                }
            }
            else
            {
                //GUILayout.Space(234 + IconAlarmOffset);
                GUILayout.Space(207 + IconAlarmOffset);
                //GUILayout.Space(237 + IconAlarmOffset);
            }

            // ShowBase Button
            Boolean blnShowBase = settings.ShowBase;

            if (DrawToggle(ref blnShowBase, new GUIContent(Resources.btnViewBaseActive, blnShowBase ? "Back to Vessel Display" : "Show Base Display\r\nAll resource within 2km of active vessel"), SkinsLibrary.GetStyle(SkinsLibrary.CurrentSkin, "ButtonToggle").PaddingChange(1), GUILayout.Width(23)))
            {
                settings.ShowBase = blnShowBase;
            }
            //if (GUILayout.Button(new GUIContent(settings.ShowBase ? Resources.btnViewBaseActive : Resources.btnViewBase, "Toggle Vessel/Base Display"), SkinsLibrary.CurrentSkin.button.PaddingChange(1), GUILayout.Width(23)))
            //{
            //    settings.ShowBase = !settings.ShowBase;
            //}

            // ShowTime Button
            Boolean blnShowTimeRem = settings.ShowTimeRem;

            if (DrawToggle(ref blnShowTimeRem, new GUIContent(Resources.btnViewTimes, blnShowTimeRem ? "Hide time Remianing": "Show Time Remaining"), SkinsLibrary.GetStyle(SkinsLibrary.CurrentSkin, "ButtonToggle").PaddingChange(1), GUILayout.Width(23)))
            {
                settings.ShowTimeRem = blnShowTimeRem;
            }
            //if (GUILayout.Button(new GUIContent(Resources.btnViewTimes, "Toggle Time Remaining"), SkinsLibrary.CurrentSkin.button.PaddingChange(1), GUILayout.Width(23)))
            //{
            //    settings.ShowTimeRem = !settings.ShowTimeRem;
            //}

            // ShowAll Button
            Boolean blnToggleHidden = KSPAlternateResourcePanel.ShowAll;

            if (DrawToggle(ref blnToggleHidden, new GUIContent(Resources.btnViewAll, "Toggle Hidden Resources"), SkinsLibrary.GetStyle(SkinsLibrary.CurrentSkin, "ButtonToggle").PaddingChange(1), GUILayout.Width(23)))
            {
                KSPAlternateResourcePanel.ShowAll = blnToggleHidden;
            }
            //if (GUILayout.Button(new GUIContent(Resources.btnViewAll, "Toggle Hidden Resources"), SkinsLibrary.CurrentSkin.button.PaddingChange(1), GUILayout.Width(23)))
            //{
            //    KSPAlternateResourcePanel.ShowAll = !KSPAlternateResourcePanel.ShowAll;
            //}

            //Settings Toggle button
            GUIContent btnMinMax = new GUIContent(Resources.btnChevronDown, "Show Settings...");

            if (windowSettings.Visible)
            {
                btnMinMax.image = Resources.btnChevronUp; btnMinMax.tooltip = "Hide Settings";
            }
            else if (settings.VersionAttentionFlag && DateTime.Now.Millisecond < 500)
            {
                btnMinMax.image = Resources.btnSettingsAttention;
            }

            if (settings.VersionAttentionFlag)
            {
                btnMinMax.tooltip = "Updated Version Available - " + btnMinMax.tooltip;
            }

            if (GUILayout.Button(btnMinMax, "ButtonSettings", GUILayout.Width(23)))
            {
                windowSettings.Visible = !windowSettings.Visible;
                if (windowSettings.Visible && settings.VersionAttentionFlag)
                {
                    windowSettings.ddlSettingsTab.SelectedIndex = (Int32)ARPWindowSettings.SettingsTabs.About;
                    settings.VersionAttentionFlag = false;
                }
                settings.Save();
            }

            GUILayout.EndHorizontal();

            //End window layout
            GUILayout.EndVertical();

            //If settings window is visible then position it accordingly
            if (mbARP.windowSettings.Visible)
            {
                mbARP.windowSettings.UpdateWindowRect();
            }
        }
示例#2
0
        internal override void DrawWindow(int id)
        {
            TransfersCount = 0;
            if (SkinsLibrary.CurrentSkin.name == "Unity")
            {
                GUI.Box(new Rect(0, 0, WindowWidthForBars - 1, WindowRect.height - 1), "", SkinsLibrary.CurrentSkin.window);
            }

            GUILayout.BeginVertical();
            GUI.Label(new Rect(0, 0, WindowWidthForBars + WindowWidthForFlowControl - 1, 18), this.PartRef.partInfo.title, Styles.stylePartWindowHead);
            GUILayout.Space(18);
            int i = 0;

            foreach (int key in this.ResourceList.Keys)
            {
                Boolean  TransferExists = mbARP.lstTransfers.ItemExists(this.PartID, key);
                Boolean  TransferActive = false;
                GUIStyle Highlight      = Styles.styleBarHighlight;
                if (TransferExists)
                {
                    if (mbARP.lstTransfers.GetItem(this.PartID, key).transferState == TransferStateEnum.In)
                    {
                        Highlight = Styles.styleBarHighlightGreen;
                    }
                    else if (mbARP.lstTransfers.GetItem(this.PartID, key).transferState == TransferStateEnum.Out)
                    {
                        Highlight = Styles.styleBarHighlightRed;
                    }

                    TransferActive = mbARP.lstTransfers.GetItem(this.PartID, key).Active;
                }

                GUILayout.Space(2);
                if (i > 0)
                {
                    GUILayout.Space(2);
                }
                GUILayout.BeginHorizontal();
                GUILayout.Space(5);
                //add title
                Rect rectIcon = Drawing.DrawResourceIcon(this.ResourceList[key].ResourceDef.name);
                GUILayout.Space(2);

                Rect rectBar = Drawing.CalcBarRect(rectIcon, Icon2BarOffset, 120, 15);
                if (Drawing.DrawResourceBar(rectBar, this.ResourceList[key],
                                            Styles.styleBarGreen_Back, Styles.styleBarGreen, Styles.styleBarGreen_Thin,
                                            settings.ShowRatesForParts, TransferActive, Highlight))
                {
                    //if (this.ResourceList[key].ResourceDef.resourceTransferMode != ResourceTransferMode.NONE)
                    if (this.ResourceList[key].ResourceDef.resourceTransferMode != ResourceTransferMode.NONE &&
                        (
                            HighLogic.CurrentGame.Mode != Game.Modes.CAREER ||
                            GameVariables.Instance.UnlockedFuelTransfer(ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.ResearchAndDevelopment))
                        )
                        )
                    {
                        //toggle the transfer line
                        if (TransferExists)
                        {
                            mbARP.lstTransfers.RemoveItem(this.PartID, key);
                            TransferExists = false;
                        }
                        else
                        {
                            mbARP.lstTransfers.AddItem(this.PartRef, this.ResourceList[key].ResourceDef, TransferStateEnum.None);
                        }
                    }
                }

                if (this.ResourceList[key].ResourceDef.resourceFlowMode != ResourceFlowMode.NO_FLOW)
                {
                    if (Drawing.DrawFlowControlButton(rectBar, this.PartRef.Resources.Get(key).flowState))
                    {
                        this.PartRef.Resources.Get(key).flowState = !this.PartRef.Resources.Get(key).flowState;
                    }
                }

                GUILayout.EndHorizontal();

                if (TransferExists)
                {
                    TransfersCount++;
                    ARPTransfer tmpTransfer = mbARP.lstTransfers.GetItem(this.PartID, key);
                    GUILayout.Space(1);
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(8);
                    GUIStyle styleTransfer = new GUIStyle(SkinsLibrary.CurrentSkin.label);
                    styleTransfer.fixedHeight    = 19;
                    styleTransfer.padding.top    = -8;
                    styleTransfer.padding.bottom = 0;
                    //GUILayout.Label("Transfer: " + tmpTransfer.transferState, styleTransfer);
                    GUILayout.Label("Transfer: ", styleTransfer);

                    GUILayout.Space(21);


                    GUIStyle styleTransferButton = new GUIStyle(SkinsLibrary.CurrentSkin.button);
                    styleTransferButton.fixedHeight = 19;
                    styleTransferButton.fixedWidth  = 40;
                    styleTransferButton.onNormal    = styleTransferButton.active;
                    styleTransferButton.padding     = new RectOffset(0, 0, 0, 0);
                    styleTransferButton.margin      = new RectOffset(0, 0, 0, 0);


                    String  strOut     = (tmpTransfer.transferState == TransferStateEnum.Out && tmpTransfer.Active) ? "Stop" : "Out";
                    String  strIn      = (tmpTransfer.transferState == TransferStateEnum.In && tmpTransfer.Active) ? "Stop" : "In";
                    Boolean blnTempOut = GUILayout.Toggle(tmpTransfer.transferState == TransferStateEnum.Out, strOut, styleTransferButton);
                    Boolean blnTempIn  = GUILayout.Toggle(tmpTransfer.transferState == TransferStateEnum.In, strIn, styleTransferButton);

                    if (blnTempOut && (tmpTransfer.transferState != TransferStateEnum.Out))
                    {
                        //if there are any transfers in place for this resource then turn off the Out
                        //if (mbARP.lstTransfers.Any(x => x.ResourceID == key && x.Active))
                        //    mbARP.lstTransfers.SetStateNone(key);
                        //else
                        //    mbARP.lstTransfers.SetStateNone(key, TransferStateEnum.Out);

                        tmpTransfer.transferState = TransferStateEnum.Out;
                    }
                    else if (blnTempIn && (tmpTransfer.transferState != TransferStateEnum.In))
                    {
                        //if there are any transfers in place for this resource then turn off the In
                        //if (mbARP.lstTransfers.Any(x => x.ResourceID == key && x.Active))
                        //    mbARP.lstTransfers.SetStateNone(key);
                        //else
                        //    mbARP.lstTransfers.SetStateNone(key, TransferStateEnum.In);

                        tmpTransfer.transferState = TransferStateEnum.In;
                    }
                    else if (!blnTempIn && !blnTempOut && (tmpTransfer.transferState != TransferStateEnum.None))
                    {
                        tmpTransfer.transferState = TransferStateEnum.None;
                    }

                    //if (tmpTransfer.Active)
                    //{
                    //    GUILayout.Space(20);
                    //    if (GUILayout.Button("Stop", styleTransferButton))
                    //    {
                    //        //mbARP.lstTransfers.SetStateNone(key);
                    //        mbARP.lstTransfers.SetStateNone(key);
                    //    }
                    //}
                    //else
                    //{
                    //    //if (GUILayout.Button("Out", styleTransferButton)) { tmpTransfer.transferState = TransferStateEnum.Out; }
                    //    //if (GUILayout.Button("In", styleTransferButton)) { tmpTransfer.transferState = TransferStateEnum.In; }
                    //    //if (GUILayout.Button("None", styleTransferButton)) { tmpTransfer.transferState = TransferStateEnum.None; }
                    //    Boolean blnTempOut = GUILayout.Toggle(tmpTransfer.transferState == TransferStateEnum.Out, "Out", styleTransferButton);
                    //    Boolean blnTempIn = GUILayout.Toggle(tmpTransfer.transferState == TransferStateEnum.In, "In", styleTransferButton);
                    //    if (blnTempOut && (tmpTransfer.transferState != TransferStateEnum.Out))
                    //    {
                    //        if (mbARP.lstTransfers.Any(x=>x.transferState== TransferStateEnum.In))
                    //            mbARP.lstTransfers.SetStateNone(key);
                    //        else
                    //            mbARP.lstTransfers.SetStateNone(key, TransferStateEnum.Out);

                    //        tmpTransfer.transferState = TransferStateEnum.Out;
                    //    }
                    //    else if (blnTempIn && (tmpTransfer.transferState != TransferStateEnum.In))
                    //    {
                    //        if (mbARP.lstTransfers.Any(x => x.transferState == TransferStateEnum.Out))
                    //            mbARP.lstTransfers.SetStateNone(key);
                    //        else
                    //            mbARP.lstTransfers.SetStateNone(key, TransferStateEnum.In);

                    //        tmpTransfer.transferState = TransferStateEnum.In;
                    //    }
                    //    else if (!blnTempIn && !blnTempOut && (tmpTransfer.transferState != TransferStateEnum.None))
                    //        tmpTransfer.transferState = TransferStateEnum.None;
                    //}
                    GUILayout.EndHorizontal();
                }

                i++;
            }
        }