Example #1
0
 //VesselOrCrewStuff
 private static Boolean CheckVesselOrCrewForJump(String ID, KACAlarm.AlarmTypeEnum aType)
 {
     if (aType == KACAlarm.AlarmTypeEnum.Crew && StoredCrewExists(ID))
     {
         return(true);
     }
     else if (StoredVesselExists(ID))
     {
         if (settings.AllowJumpToAsteroid)
         {
             return(true);
         }
         else if (StoredVessel(ID).vesselType != VesselType.SpaceObject)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
Example #2
0
        //VesselOrCrewStuff
        private static Boolean CheckVesselOrCrewForJump(String ID, KACAlarm.AlarmTypeEnum aType)
        {
            if (aType == KACAlarm.AlarmTypeEnum.Crew && StoredCrewExists(ID))
            {
                return(true);
            }
            else
            {
                Vessel v = StoredVessel(ID);

                if (v != null)
                {
                    if (v.vesselType != VesselType.SpaceObject && v.DiscoveryInfo.Level != DiscoveryLevels.Owned)
                    {
                        return(false);
                    }
                    else if (settings.AllowJumpToAsteroid)
                    {
                        return(true);
                    }
                    else if (StoredVessel(ID).vesselType != VesselType.SpaceObject)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
        }
Example #3
0
        /// <summary>
        /// Create a new Alarm method for calling via API
        /// </summary>
        /// <param name="AlarmType">Enum of type of alarm</param>
        /// <param name="Name">Text Name of the Alarm</param>
        /// <param name="UT">Universal Time of the Alarm</param>
        /// <returns>Alarms Unique ID</returns>
        public String CreateAlarm(KACAlarm.AlarmTypeEnum AlarmType, String Name, Double UT)
        //public KACAlarm CreateAlarm(String Name)
        {
            KACAlarm tmpAlarm = new KACAlarm(UT);

            tmpAlarm.TypeOfAlarm = AlarmType;
            tmpAlarm.Name        = Name;

            alarms.Add(tmpAlarm);

            return(tmpAlarm.ID);
        }
        internal static KACAlarm LoadFromString3(String AlarmDetails, Double CurrentUT)
        {
            //String is "VesselID|Name|Notes|AlarmTime.UT|AlarmMarginSecs|Type|Enabled|HaltWarp|PauseGame|ActionedAt|Maneuver|Xfer|Target|Options|<ENDLINE>");

            String[] vars = AlarmDetails.Split("|".ToCharArray(), StringSplitOptions.None);

            MonoBehaviourExtended.LogFormatted("AlarmExtract");
            for (int i = 0; i < vars.Length; i++)
            {
                MonoBehaviourExtended.LogFormatted("{0}:{1}", i, vars[i]);
            }

            String SaveName        = HighLogic.CurrentGame.Title;
            String VesselID        = vars[0];
            String Name            = KACUtils.DecodeVarStrings(vars[1]);
            String Notes           = KACUtils.DecodeVarStrings(vars[2]);
            Double UT              = Convert.ToDouble(vars[3]);
            Double AlarmMarginSecs = Convert.ToDouble(vars[4]);

            KACAlarm.AlarmTypeEnum TypeOfAlarm = (KACAlarm.AlarmTypeEnum)Enum.Parse(typeof(KACAlarm.AlarmTypeEnum), vars[5]);
            Boolean Enabled    = Convert.ToBoolean(vars[6]);
            Boolean HaltWarp   = Convert.ToBoolean(vars[7]);
            Boolean PauseGame  = Convert.ToBoolean(vars[8]);
            Double  ActionedAt = Convert.ToDouble(vars[9]);

            List <ManeuverNode> ManNodes = null;
            String      XferOriginBodyName = "", XferTargetBodyName = "";
            ITargetable TargetObject = null;
            String      TargetLoader = "";

            Boolean Triggered = false, Actioned = false, AlarmWindowClosed = false;

            if (vars[10] != "")
            {
                ManNodes = ManNodeDeserializeList(vars[10]);
            }

            if (vars[11] != "")
            {
                try
                {
                    MonoBehaviourExtended.LogFormatted("{0}", vars[11]);
                    String[] XferParts = vars[11].Split(",".ToCharArray());
                    XferOriginBodyName = XferParts[0];
                    XferTargetBodyName = XferParts[1];
                }
                catch (Exception ex)
                {
                    MonoBehaviourExtended.LogFormatted("Unable to load transfer details for {0}", Name);
                    MonoBehaviourExtended.LogFormatted(ex.Message);
                }
            }
            if (vars[12] != "")
            {
                //find the targetable object and set it
                TargetObject = TargetDeserialize(vars[12]);
                if (TargetObject == null && vars[12].StartsWith("Vessel,"))
                {
                    TargetLoader = vars[12];
                }
            }

            //Now do the work to set Actioned/triggered/etc if needed
            //LogFormatted("A:{0},T:{1:0},Act:{2:0}", this.Name, CurrentUT, this.ActionedAt);
            if (ActionedAt > 0 && CurrentUT > ActionedAt)
            {
                MonoBehaviourExtended.LogFormatted("Suppressing Alarm on Load:{0}", Name);
                Triggered         = true;
                Actioned          = true;
                AlarmWindowClosed = true;
            }
            else if (ActionedAt > CurrentUT)
            {
                MonoBehaviourExtended.LogFormatted("Reenabling Alarm on Load:{0}", Name);
                Triggered         = false;
                Actioned          = false;
                ActionedAt        = 0;
                AlarmWindowClosed = false;
            }

            KACAlarm resultAlarm = new KACAlarm(UT);

            resultAlarm.Name            = Name;
            resultAlarm.VesselID        = VesselID;
            resultAlarm.Enabled         = Enabled;
            resultAlarm.Notes           = Notes;
            resultAlarm.AlarmMarginSecs = AlarmMarginSecs;
            resultAlarm.TypeOfAlarm     = TypeOfAlarm;
            if (HaltWarp)
            {
                resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.KillWarp;
            }
            else if (PauseGame)
            {
                resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.PauseGame;
            }

            if (ManNodes != null)
            {
                resultAlarm.ManNodes = ManNodes;
            }
            if (TargetObject != null)
            {
                resultAlarm.TargetObject = TargetObject;
            }
            resultAlarm.TargetLoader = TargetLoader;

            resultAlarm.XferOriginBodyName = XferOriginBodyName;
            resultAlarm.XferTargetBodyName = XferTargetBodyName;

            resultAlarm.Triggered         = Triggered;
            resultAlarm.Actioned          = Actioned;
            resultAlarm.AlarmWindowClosed = AlarmWindowClosed;

            return(resultAlarm);
        }
        // <summary>
        // Basically deserializing the alarm
        // </summary>
        // <param name="AlarmDetails"></param>
        //internal static KACAlarm LoadFromString(String AlarmDetails)
        //{
        //    String[] vars = AlarmDetails.Split("|".ToCharArray());
        //    String VesselID = "";
        //    String SaveName = vars[0];
        //    String Name = vars[1];
        //    Boolean Enabled = Convert.ToBoolean(vars[2]);
        //    Double UT = Convert.ToDouble(vars[3]);
        //    Boolean HaltWarp = Convert.ToBoolean(vars[4]);
        //    Boolean PauseGame = false;
        //    String Notes = "";
        //    if (vars.Length == 6)
        //        Notes = vars[5];
        //    else
        //    {
        //        PauseGame = Convert.ToBoolean(vars[5]);
        //        Notes = vars[6];
        //    }

        //    KACAlarm resultAlarm = new KACAlarm(UT);
        //    resultAlarm.Name = Name;
        //    resultAlarm.Enabled = Enabled;
        //    resultAlarm.Notes = Notes;
        //    resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.MessageOnly;
        //    if (HaltWarp)
        //        resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.KillWarp;
        //    else if (PauseGame)
        //        resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.PauseGame;

        //    return resultAlarm;
        //}

        internal static KACAlarm LoadFromString2(String AlarmDetails)
        {
            String[] vars            = AlarmDetails.Split("|".ToCharArray(), StringSplitOptions.None);
            String   SaveName        = HighLogic.CurrentGame.Title;
            String   VesselID        = vars[0];
            String   Name            = vars[1];
            String   Notes           = vars[2];
            Double   UT              = Convert.ToDouble(vars[3]);
            Double   AlarmMarginSecs = Convert.ToDouble(vars[4]);

            KACAlarm.AlarmTypeEnum TypeOfAlarm = (KACAlarm.AlarmTypeEnum)Enum.Parse(typeof(KACAlarm.AlarmTypeEnum), vars[5]);
            Boolean Enabled   = Convert.ToBoolean(vars[6]);
            Boolean HaltWarp  = Convert.ToBoolean(vars[7]);
            Boolean PauseGame = Convert.ToBoolean(vars[8]);

            String strOptions = vars[9];

            List <ManeuverNode> ManNodes = null;
            String      XferOriginBodyName = "", XferTargetBodyName = "";
            ITargetable TargetObject = null;
            String      TargetLoader = "";

            switch (TypeOfAlarm)
            {
            case KACAlarm.AlarmTypeEnum.Maneuver:
                //Generate the Nodes List from the string
                ManNodes = ManNodeDeserializeList(strOptions);
                break;

            case KACAlarm.AlarmTypeEnum.Transfer:
                try
                {
                    String[] XferParts = strOptions.Split(",".ToCharArray());
                    XferOriginBodyName = XferParts[0];
                    XferTargetBodyName = XferParts[1];
                }
                catch (Exception ex)
                {
                    MonoBehaviourExtended.LogFormatted("Unable to load transfer details for {0}", Name);
                    MonoBehaviourExtended.LogFormatted(ex.Message);
                }
                break;

            case KACAlarm.AlarmTypeEnum.AscendingNode:
            case KACAlarm.AlarmTypeEnum.DescendingNode:
            case KACAlarm.AlarmTypeEnum.LaunchRendevous:
                if (strOptions != "")
                {
                    //find the targetable object and set it
                    TargetObject = TargetDeserialize(strOptions);
                    if (TargetObject == null && strOptions.StartsWith("Vessel,"))
                    {
                        TargetLoader = strOptions;
                    }
                }
                break;

            default:
                break;
            }

            KACAlarm resultAlarm = new KACAlarm(UT);

            resultAlarm.Name            = Name;
            resultAlarm.VesselID        = VesselID;
            resultAlarm.Enabled         = Enabled;
            resultAlarm.Notes           = Notes;
            resultAlarm.AlarmMarginSecs = AlarmMarginSecs;
            resultAlarm.TypeOfAlarm     = TypeOfAlarm;
            if (HaltWarp)
            {
                resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.KillWarp;
            }
            else if (PauseGame)
            {
                resultAlarm.AlarmAction = KACAlarm.AlarmActionEnum.PauseGame;
            }

            if (ManNodes != null)
            {
                resultAlarm.ManNodes = ManNodes;
            }
            if (TargetObject != null)
            {
                resultAlarm.TargetObject = TargetObject;
            }
            resultAlarm.TargetLoader = TargetLoader;

            resultAlarm.XferOriginBodyName = XferOriginBodyName;
            resultAlarm.XferTargetBodyName = XferTargetBodyName;

            return(resultAlarm);
        }
        /// <summary>
        /// Code to reset the settings etc when the new button is hit
        /// </summary>
        private void NewAddAlarm()
        {
            //Set time variables
            timeRaw.BuildFromUT(600);
            strRawUT = "";
            _ShowAddMessages = false;

            //option for xfer mode
            if (settings.XferUseModelData)
                intXferType = 0;
            else
                intXferType = 1;

            //default margin
            timeMargin.BuildFromUT(settings.AlarmDefaultMargin);

            //set default strings
            if (KACWorkerGameState.CurrentVessel != null)
                strAlarmName = KACWorkerGameState.CurrentVessel.vesselName + "";
            else
                strAlarmName = "No Vessel";
            strAlarmNotes = "";
            AddNotesHeight = 100;

            AddActions = settings.AlarmDefaultAction.Duplicate();
            //blnHaltWarp = true;

            //set initial alarm type based on whats on the flight path
            if (KACWorkerGameState.ManeuverNodeExists)
                AddType = KACAlarm.AlarmTypeEnum.Maneuver;//AddAlarmType.Node;
            else if (KACWorkerGameState.SOIPointExists)
                AddType = KACAlarm.AlarmTypeEnum.SOIChange;//AddAlarmType.Node;
            else
                AddType = KACAlarm.AlarmTypeEnum.Raw;//AddAlarmType.Node;

            //trigger the work to set each type
            AddTypeChanged();

            //build the XFer parents list
            SetUpXferParents();
            intXferCurrentParent = 0;
            SetupXferOrigins();
            intXferCurrentOrigin = 0;

            if (KACWorkerGameState.CurrentVessel != null)
            {
                //if the craft is orbiting a body on the parents list then set it as the default
                if (XferParentBodies.Contains(KACWorkerGameState.CurrentVessel.mainBody.referenceBody))
                {
                    intXferCurrentParent = XferParentBodies.IndexOf(KACWorkerGameState.CurrentVessel.mainBody.referenceBody);
                    SetupXferOrigins();
                    intXferCurrentOrigin = XferOriginBodies.IndexOf(KACWorkerGameState.CurrentVessel.mainBody);
                }
            }
            //set initial targets
            SetupXFerTargets();
            intXferCurrentTarget = 0;

            intSelectedCrew = 0;
            intSelectedContract = 0;
            strCrewUT = "";

            ddlKERNodeMargin.SelectedIndex = (Int32)settings.DefaultKERMargin;

            //ddlAddAlarm.SelectedIndex = ddlAddAlarm.Items.IndexOf(settings.AlarmsSoundName);
            //PlaySound = settings.AlarmPlaySound;
        }
        internal void WindowLayout_AddTypeApPe()
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("apsis Type:", KACResources.styleAddHeading);
            int intOption = 0;
            if (AddType != KACAlarm.AlarmTypeEnum.Apoapsis) intOption = 1;
            if (DrawRadioList(ref intOption, "Apoapsis", "Periapsis"))
            {
                if (intOption == 0)
                    AddType = KACAlarm.AlarmTypeEnum.Apoapsis;
                else
                {
                    AddType = KACAlarm.AlarmTypeEnum.Periapsis;
                }
                AddTypeChanged();

            }

            GUILayout.EndHorizontal();
        }
        /// <summary>
        /// Draw the Add Window contents
        /// </summary>
        /// <param name="WindowID"></param>
        internal void FillAddWindow(int WindowID)
        {
            GUILayout.BeginVertical();

            //AddType =  (KACAlarm.AlarmType)GUILayout.Toolbar((int)AddType, strAddTypes,KACResources.styleButton);
            GUIContent[] guiButtons = guiTypes;
            //if (ViewAlarmsOnly) guiButtons = guiTypesView;
            switch (MonoName)
            {
                case "KACSpaceCenter":
                    guiButtons = guiTypesSpaceCenter; break;
                case "KACTrackingStation":
                    guiButtons = guiTypesTrackingStation; break;
                case "KACEditor":
                    guiButtons = guiTypesEditor; break;
                default:
                    break;
            }
            if (DrawButtonList(ref AddType,guiButtons))
            {
                //if the choice was the Ap/Pe one then work out the best next choice
                if(AddType== KACAlarm.AlarmTypeEnum.Apoapsis) {

                    if(!KACWorkerGameState.ApPointExists && KACWorkerGameState.PePointExists)
                        AddType = KACAlarm.AlarmTypeEnum.Periapsis;
                    else if(KACWorkerGameState.ApPointExists && KACWorkerGameState.PePointExists &&
                            ((KACWorkerGameState.CurrentVessel == null) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToAp) > ((KACWorkerGameState.CurrentVessel == null ) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToPe))
                        AddType = KACAlarm.AlarmTypeEnum.Periapsis;
                }
                AddTypeChanged();
            }

            //if (AddType == KACAlarm.AlarmType.Apoapsis || AddType == KACAlarm.AlarmType.Periapsis)
            //    WindowLayout_AddTypeApPe();
            //if (AddType == KACAlarm.AlarmType.AscendingNode || AddType == KACAlarm.AlarmType.DescendingNode)
            //    WindowLayout_AddTypeANDN();

            //calc height for common stuff
            intHeight_AddWindowCommon = 71;
            if (AddType != KACAlarm.AlarmTypeEnum.Raw && AddType!= KACAlarm.AlarmTypeEnum.Crew && AddType != KACAlarm.AlarmTypeEnum.ScienceLab) //add stuff for margins
                intHeight_AddWindowCommon += 28;
            if (ScenesForAttachOption.Contains(KACWorkerGameState.CurrentGUIScene) && TypesForAttachOption.Contains(AddType) && KACWorkerGameState.CurrentVessel != null) //add stuff for attach to ship
                    intHeight_AddWindowCommon += 30;
            if (KACWorkerGameState.CurrentGUIScene == GameScenes.TRACKSTATION)
                intHeight_AddWindowCommon += 18;

            //layout the right fields for the common components
            Boolean blnAttachPre = blnAlarmAttachToVessel;
            //WindowLayout_CommonFields2(ref strAlarmName, ref blnAlarmAttachToVessel, ref AddAction, ref timeMargin, AddType, intHeight_AddWindowCommon);
            WindowLayout_CommonFields3(ref strAlarmName, ref blnAlarmAttachToVessel, ref AddActions, ref timeMargin, AddType, intHeight_AddWindowCommon);

            Double dblTimeToPoint = 0;

            //layout the specific pieces for each type of alarm
            switch (AddType)
            {
                case KACAlarm.AlarmTypeEnum.Raw:
                    if (blnAttachPre!=blnAlarmAttachToVessel) BuildRawStrings();
                    WindowLayout_AddPane_Raw();
                    break;
                case KACAlarm.AlarmTypeEnum.Maneuver:
                    WindowLayout_AddPane_Maneuver();
                    break;
                case KACAlarm.AlarmTypeEnum.SOIChange:
                    dblTimeToPoint = (KACWorkerGameState.CurrentVessel==null) ? 0 : KACWorkerGameState.CurrentVessel.orbit.UTsoi - KACWorkerGameState.CurrentTime.UT;
                    WindowLayout_AddPane_NodeEvent(KACWorkerGameState.SOIPointExists,dblTimeToPoint);
                    //WindowLayout_AddPane_SOI2();
                    break;
                case KACAlarm.AlarmTypeEnum.Transfer:
                case KACAlarm.AlarmTypeEnum.TransferModelled:
                    if (blnAttachPre != blnAlarmAttachToVessel) BuildTransferStrings();
                    WindowLayout_AddPane_Transfer();
                    break;
                case KACAlarm.AlarmTypeEnum.Apoapsis:
                    WindowLayout_AddTypeApPe();

                    if (!KACWorkerGameState.ApPointExists && HighLogic.CurrentGame.Mode == Game.Modes.CAREER &&
                        GameVariables.Instance.GetOrbitDisplayMode(ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.TrackingStation)) != GameVariables.OrbitDisplayMode.PatchedConics)
                    {
                        GUILayout.Label("Apoapsis Alarms cannot be set without upgrading the Tracking Station", GUILayout.ExpandWidth(true));
                    }
                    else
                    {
                        dblTimeToPoint = (KACWorkerGameState.CurrentVessel == null) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToAp;
                        WindowLayout_AddPane_NodeEvent(KACWorkerGameState.ApPointExists && !KACWorkerGameState.CurrentVessel.LandedOrSplashed, dblTimeToPoint);
                    }
                    break;
                case KACAlarm.AlarmTypeEnum.Periapsis:
                    WindowLayout_AddTypeApPe();
                    if (!KACWorkerGameState.PePointExists && HighLogic.CurrentGame.Mode == Game.Modes.CAREER &&
                        GameVariables.Instance.GetOrbitDisplayMode(ScenarioUpgradeableFacilities.GetFacilityLevel(SpaceCenterFacility.TrackingStation)) != GameVariables.OrbitDisplayMode.PatchedConics)
                    {
                        GUILayout.Label("Periapsis Alarms cannot be set without upgrading the Tracking Station", GUILayout.ExpandWidth(true));
                    }
                    else
                    {
                    dblTimeToPoint = (KACWorkerGameState.CurrentVessel == null ) ? 0 : KACWorkerGameState.CurrentVessel.orbit.timeToPe;
                    WindowLayout_AddPane_NodeEvent(KACWorkerGameState.PePointExists && !KACWorkerGameState.CurrentVessel.LandedOrSplashed, dblTimeToPoint);
                    }
                    break;
                case KACAlarm.AlarmTypeEnum.AscendingNode:
                    WindowLayout_AddTypeANDN();
                    if (KACWorkerGameState.CurrentVesselTarget==null)
                    {
                        WindowLayout_AddPane_AscendingNodeEquatorial();
                    }
                    else if (KACWorkerGameState.CurrentVessel.orbit.referenceBody == KACWorkerGameState.CurrentVesselTarget.GetOrbit().referenceBody) {
                        //Must be orbiting Same parent body for this to make sense
                        WindowLayout_AddPane_AscendingNode();
                    }
                    else
                    {
                        GUILayout.Label("Target Not Currently Orbiting Same Parent", KACResources.styleAddXferName, GUILayout.Height(18));
                        GUILayout.Label("", KACResources.styleAddXferName, GUILayout.Height(18));
                        GUILayout.Label("There is no Ascending Node between orbits", KACResources.styleAddXferName, GUILayout.Height(18));
                    }
                    break;
                case KACAlarm.AlarmTypeEnum.DescendingNode:
                    WindowLayout_AddTypeANDN();
                    if (KACWorkerGameState.CurrentVesselTarget==null)
                    {
                        WindowLayout_AddPane_DescendingNodeEquatorial();
                    }
                    else if (KACWorkerGameState.CurrentVessel.orbit.referenceBody == KACWorkerGameState.CurrentVesselTarget.GetOrbit().referenceBody)
                    {
                        //Must be orbiting Same parent body for this to make sense
                        WindowLayout_AddPane_DescendingNode();
                    }
                    else
                    {
                        GUILayout.Label("Target Not Currently Orbiting Same Parent", KACResources.styleAddXferName, GUILayout.Height(18));
                        GUILayout.Label("", KACResources.styleAddXferName, GUILayout.Height(18));
                        GUILayout.Label("There is no Ascending Node between orbits", KACResources.styleAddXferName, GUILayout.Height(18));
                    }
                    break;
                case KACAlarm.AlarmTypeEnum.LaunchRendevous:
                    WindowLayout_AddTypeANDN();
                    if (KACWorkerGameState.CurrentVessel.orbit.referenceBody == KACWorkerGameState.CurrentVesselTarget.GetOrbit().referenceBody)
                    {
                        //Must be orbiting Same parent body for this to make sense
                        WindowLayout_AddPane_LaunchRendevous();
                    }
                    else
                    {
                        GUILayout.Label("Target Not Currently Orbiting Same Parent", KACResources.styleAddXferName, GUILayout.Height(18));
                        GUILayout.Label("", KACResources.styleAddXferName, GUILayout.Height(18));
                        GUILayout.Label("There is no Ascending Node between orbits", KACResources.styleAddXferName, GUILayout.Height(18));
                    }

                    break;
                case KACAlarm.AlarmTypeEnum.Closest:
                    WindowLayout_AddTypeDistanceChoice();
                    WindowLayout_AddPane_ClosestApproach();
                    break;
                case KACAlarm.AlarmTypeEnum.Distance:
                    WindowLayout_AddTypeDistanceChoice();
                    WindowLayout_AddPane_TargetDistance();
                    break;
                case KACAlarm.AlarmTypeEnum.Crew:
                    WindowLayout_AddPane_Crew();
                    break;
                case KACAlarm.AlarmTypeEnum.Contract:
                case KACAlarm.AlarmTypeEnum.ContractAuto:
                    WindowLayout_AddPane_Contract();
                    break;
                case KACAlarm.AlarmTypeEnum.ScienceLab:
                    WindowLayout_AddPane_ScienceLab();
                    break;
                default:
                    break;
            }

            GUILayout.EndVertical();

            SetTooltipText();
        }