Ejemplo n.º 1
0
 private static void DisplayActionButtonsCreate()
 {
     GUILayout.BeginHorizontal();
     if (GUILayout.Button("Create", GUILayout.MaxWidth(80)))
     {
         var kerbalFound = false;
         while (!kerbalFound)
         {
             SelectedKerbal = RMKerbal.CreateKerbal();
             if (SelectedKerbal.Trait == KerbalProfession && SelectedKerbal.Gender == Gender)
             {
                 kerbalFound = true;
             }
         }
         if (!RMLifeSpan.Instance.RMKerbals.AllrmKerbals.ContainsKey(SelectedKerbal.Name))
         {
             RMLifeSpan.Instance.RMKerbals.AllrmKerbals.Add(SelectedKerbal.Name, SelectedKerbal);
         }
         DisplayMode = DisplayModes.Edit;
     }
     if (GUILayout.Button("Cancel", GUILayout.MaxWidth(80)))
     {
         SelectedKerbal = null;
         DisplayMode    = DisplayModes.Index;
     }
     GUILayout.EndHorizontal();
 }
Ejemplo n.º 2
0
        private static void ReContract(RMKerbal disputekerbal)
        {
            if (!Funding.CanAfford((float)disputekerbal.Salary + (float)disputekerbal.OwedSalary))
            {
                return;
            }

            Funding.Instance.AddFunds(-(disputekerbal.Salary + disputekerbal.OwedSalary), TransactionReasons.CrewRecruited);
            disputekerbal.Timelastsalary                 = Planetarium.GetUniversalTime();
            disputekerbal.SalaryContractDispute          = false;
            disputekerbal.SalaryContractDisputeProcessed = true;
            disputekerbal.SalaryContractDisputePeriods   = 0;
            disputekerbal.PayriseRequired                = 0d;
            disputekerbal.OwedSalary = 0d;
            //If they are a tourist (dispute) and not dead (DeepFreeze frozen/comatose) set them back to crew
            if (disputekerbal.Type != ProtoCrewMember.KerbalType.Tourist ||
                disputekerbal.Status == ProtoCrewMember.RosterStatus.Dead)
            {
                return;
            }

            disputekerbal.Type         = ProtoCrewMember.KerbalType.Crew;
            disputekerbal.Kerbal.type  = ProtoCrewMember.KerbalType.Crew;
            disputekerbal.Trait        = disputekerbal.RealTrait;
            disputekerbal.Kerbal.trait = disputekerbal.RealTrait;
            KerbalRoster.SetExperienceTrait(disputekerbal.Kerbal, disputekerbal.Kerbal.trait);
            RMKerbal.RegisterExperienceTrait(disputekerbal);
        }
Ejemplo n.º 3
0
        private static void DeclineDispute(RMKerbal disputekerbal)
        {
            KeyValuePair <string, RMKerbal> kerbal = new KeyValuePair <string, RMKerbal>(disputekerbal.Name, disputekerbal);

            RMLifeSpanAddon.Instance.ResignKerbal(disputekerbal.Kerbal, kerbal);
            disputekerbal.SalaryContractDisputeProcessed = true;
        }
Ejemplo n.º 4
0
        internal static bool IsKerbalInDeepFreezePart(RMKerbal selectedKerbal)
        {
            var result  = false;
            var vessels = FlightGlobals.Vessels.GetEnumerator();

            while (vessels.MoveNext())
            {
                if (vessels.Current == null)
                {
                    continue;
                }
                var crew = vessels.Current.GetVesselCrew().GetEnumerator();
                while (crew.MoveNext())
                {
                    if (crew.Current != selectedKerbal.Kerbal)
                    {
                        continue;
                    }
                    if (crew.Current.KerbalRef.InPart != null)
                    {
                        if (crew.Current.KerbalRef.InPart.Modules.Contains("ModuleDeepFreeze"))
                        {
                            result = true;
                        }
                    }
                    break;
                }
            }


            return(result);
        }
Ejemplo n.º 5
0
 private static void AcceptDispute(RMKerbal disputekerbal)
 {
     // Add requested payrise amount to their regular salary
     disputekerbal.Salary += disputekerbal.PayriseRequired;
     disputekerbal.SalaryContractDispute = true;
     // Calculate and store their backpay.
     disputekerbal.OwedSalary += disputekerbal.Salary;
     disputekerbal.SalaryContractDisputeProcessed = true;
     disputekerbal.PayriseRequired = 0;
 }
Ejemplo n.º 6
0
        internal static string RosterVesselDetails(RMKerbal rmkerbal)
        {
            var rosterDetails = "";
            var vessels       = FlightGlobals.Vessels.GetEnumerator();

            while (vessels.MoveNext())
            {
                if (vessels.Current == null)
                {
                    continue;
                }
                var crew = vessels.Current.GetVesselCrew().GetEnumerator();
                while (crew.MoveNext())
                {
                    if (crew.Current != rmkerbal.Kerbal)
                    {
                        continue;
                    }
                    if (rmkerbal.SalaryContractDispute)
                    {
                        if (rmkerbal.Trait == "Tourist")
                        {
                            rosterDetails = "Strike - " + vessels.Current.GetName().Replace("(unloaded)", "");
                        }
                        else
                        {
                            rosterDetails = "Dispute - " + vessels.Current.GetName().Replace("(unloaded)", "");
                        }
                    }
                    else
                    {
                        rosterDetails = "Assigned - " + vessels.Current.GetName().Replace("(unloaded)", "");
                    }
                    break;
                }
            }
            return(rosterDetails);
        }
Ejemplo n.º 7
0
        private static void DisplayKerbal(RMKerbal kerbal)
        {
            GUIStyle labelStyle;

            if (kerbal.Status == ProtoCrewMember.RosterStatus.Dead || kerbal.Status == ProtoCrewMember.RosterStatus.Missing ||
                (kerbal.SalaryContractDispute && kerbal.Trait == "Tourist"))
            {
                labelStyle = RMStyle.LabelStyleRed;
            }
            else if (kerbal.SalaryContractDispute && kerbal.Trait != "Tourist")
            {
                labelStyle = RMStyle.LabelStyleMagenta;
            }
            else if (kerbal.Status == ProtoCrewMember.RosterStatus.Assigned)
            {
                labelStyle = RMStyle.LabelStyleYellow;
            }
            else
            {
                labelStyle = RMStyle.LabelStyle;
            }
            if (InstalledMods.IsDfInstalled && kerbal.Type == ProtoCrewMember.KerbalType.Unowned)
            {
                labelStyle = RMStyle.LabelStyleCyan;
            }

            string buttonToolTip = "Crew Member Name.";

            GUILayout.Label(new GUIContent(kerbal.Name, buttonToolTip), labelStyle, GUILayout.Width(130));
            Rect rect = GUILayoutUtility.GetLastRect();

            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            buttonToolTip = "Crew Member's Current Salary.";
            GUILayout.Label(new GUIContent(kerbal.Salary.ToString("###,##0"), buttonToolTip), labelStyle, GUILayout.Width(55));
            rect = GUILayoutUtility.GetLastRect();
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            buttonToolTip = "Crew Member's Current Outstanding/Owing Salary.";
            GUILayout.Label(new GUIContent(kerbal.OwedSalary.ToString("###,##0"), buttonToolTip), labelStyle, GUILayout.Width(60));
            rect = GUILayoutUtility.GetLastRect();
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            buttonToolTip = "How many Pay periods salary has been in dispute.";
            GUILayout.Label(new GUIContent(kerbal.SalaryContractDisputePeriods.ToString("#0"), buttonToolTip), labelStyle, GUILayout.Width(15));
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            buttonToolTip = "Payrise Requested.";
            GUILayout.Label(new GUIContent(kerbal.PayriseRequired.ToString("###,##0"), buttonToolTip), labelStyle, GUILayout.Width(55));
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            buttonToolTip = "Kerbals usual Profession.";
            GUILayout.Label(new GUIContent(kerbal.RealTrait, buttonToolTip), labelStyle, GUILayout.Width(75));
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            buttonToolTip = "Next Salary payment is due on:";
            GUILayout.Label(new GUIContent(KSPUtil.PrintDate((int)kerbal.TimeSalaryDue, false), buttonToolTip), labelStyle, GUILayout.Width(65));
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }
        }
Ejemplo n.º 8
0
        private static void DisplayRosterViewer()
        {
            try
            {
                // We have changed to an Update refreshed list, so I've moved filtering and sorting to the beginning of the routine, instead of the end.
                FilterRosterList(FilteredBy);
                SortRosterList(RMAddon.AllCrewSort);
                DisplayRosterHeader();

                _scrollViewerPosition = GUILayout.BeginScrollView(_scrollViewerPosition, RMStyle.ScrollStyle, GUILayout.Height(230), GUILayout.Width(680));
                //foreach (ProtoCrewMember kerbal in RMAddon.AllCrew
                foreach (var rmkerbal in RMAddon.AllCrew)
                {
                    var kerbal     = rmkerbal.Value.Kerbal;
                    var labelStyle = GetLabelStyle(kerbal, rmkerbal);

                    // What vessel is this Kerbal Assigned to?
                    var rosterDetails = "";
                    if (kerbal.rosterStatus == ProtoCrewMember.RosterStatus.Assigned)
                    {
                        rosterDetails = RosterVesselDetails(rmkerbal.Value);
                    }
                    else if (InstalledMods.IsDfInstalled && kerbal.type == ProtoCrewMember.KerbalType.Unowned)
                    {
                        // This kerbal could be frozen.  Lets find out...
                        rosterDetails = GetFrozenDetials(kerbal);
                        labelStyle    = RMStyle.LabelStyleCyan;
                    }
                    else if (rmkerbal.Value.SalaryContractDispute)
                    {
                        // This kerbal is in contract dispute
                        rosterDetails = rmkerbal.Value.Trait == "Tourist" ? "Contract Cancelled - Strike" : "Contract Dispute";
                    }
                    else
                    {
                        // Since the kerbal has no vessel assignment, lets show what their status...
                        rosterDetails = kerbal.rosterStatus.ToString();
                    }
                    GUILayout.BeginHorizontal();
                    // Column Name (is a Button)
                    var          buttonText    = kerbal.name;
                    const string buttonToolTip = "Opens the Edit section for this kerbal.";
                    var          btnStyle      = SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal ? RMStyle.ButtonStyleLeft : RMStyle.ButtonToggledStyleLeft;
                    if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), btnStyle, GUILayout.Width(160)))
                    {
                        if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbal)
                        {
                            //Find the RMKerbal entry for the selected kerbal.
                            SelectedKerbal = RMLifeSpan.Instance.RMKerbals.AllrmKerbals.FirstOrDefault(a => a.Key == kerbal.name).Value;
                            if (SelectedKerbal == null)
                            //Didn't find the RMKerbal entry? Should never happen? Create a new one just in case.
                            {
                                SelectedKerbal = new RMKerbal(Planetarium.GetUniversalTime(), kerbal, true, false);
                                RMLifeSpan.Instance.RMKerbals.AllrmKerbals.Add(kerbal.name, SelectedKerbal);
                            }
                            else
                            {
                                SelectedKerbal.IsNew = false;
                            }
                            SetProfessionFlag();
                            Gender      = SelectedKerbal.Gender;
                            DisplayMode = DisplayModes.Edit;
                        }
                        else
                        {
                            SelectedKerbal = null;
                            DisplayMode    = DisplayModes.Index;
                            Gender         = ProtoCrewMember.Gender.Male;
                        }
                    }
                    var rect = GUILayoutUtility.GetLastRect();
                    if (Event.current.type == EventType.Repaint && ShowToolTips)
                    {
                        ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
                    }

                    // Column Gender
                    GUILayout.Label(kerbal.gender.ToString(), labelStyle, GUILayout.Width(50));
                    if (RMLifeSpan.Instance.RMGameSettings.EnableAging)
                    {
                        var kerbalInfo = RMLifeSpan.Instance.RMKerbals.AllrmKerbals.FirstOrDefault(a => a.Key == kerbal.name);
                        if (kerbalInfo.Key != null)
                        {
                            GUILayout.Label(kerbalInfo.Value.Age.ToString("##0"), labelStyle, GUILayout.Width(35));
                        }
                    }
                    // Column Salary
                    GUILayout.Label(rmkerbal.Value.SalaryContractDispute ? rmkerbal.Value.RealTrait : kerbal.trait, labelStyle, GUILayout.Width(75));
                    // Column Skill level
                    GUILayout.Label(kerbal.experienceLevel.ToString(), labelStyle, GUILayout.Width(35));
                    // column Experience
                    GUILayout.Label(kerbal.experience.ToString(CultureInfo.InvariantCulture), labelStyle, GUILayout.Width(75));
                    // Column Status
                    var statusWidth = GUILayout.Width(240);
                    if (RMLifeSpan.Instance.RMGameSettings.EnableAging)
                    {
                        statusWidth = GUILayout.Width(200);
                    }
                    GUILayout.Label(rosterDetails, labelStyle, statusWidth);
                    GUILayout.EndHorizontal();
                    GUI.enabled = true;
                }

                GUILayout.EndScrollView();
            }
            catch (Exception ex)
            {
                Utilities.LogMessage(string.Format(" in RosterListViewer.  Error:  {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true);
            }
        }
Ejemplo n.º 9
0
        internal static void Display(int windowId)
        {
            // Reset Tooltip active flag...
            ToolTipActive = false;

            var rect = new Rect(371, 4, 16, 16);

            if (GUI.Button(rect, new GUIContent("", "Close Window")))
            {
                ToolTip = "";
                RMSettings.RestoreTempSettings();
                ShowWindow = false;
            }
            if (Event.current.type == EventType.Repaint && ShowToolTips)
            {
                ToolTip = RMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10);
            }

            // Store settings in case we cancel later...
            //RMSettings.StoreTempSettings();

            GUILayout.BeginVertical();
            _scrollViewerPosition = GUILayout.BeginScrollView(_scrollViewerPosition, GUILayout.Height(280), GUILayout.Width(375));
            GUILayout.BeginVertical();

            DisplayOptions();

            DisplayHighlighting();

            DisplayToolTips();

            DisplayConfiguration();

            GUILayout.EndVertical();
            GUILayout.EndScrollView();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Save"))
            {
                //If EnableAging has been turned ON when it was previously OFF, we reset age processing, otherwise they could all die instantly.
                if (RMLifeSpan.Instance.RMGameSettings.EnableAging && RMSettings.PrevEnableAging == false)
                {
                    Utilities.LogMessage("RosterManagerWindowSettings.Display Save settings, aging has been enabled. Reset all birthdays.", "info", RMSettings.VerboseLogging);
                    var currentTime = Planetarium.GetUniversalTime();
                    foreach (var rmkerbal in RMLifeSpan.Instance.RMKerbals.AllrmKerbals)
                    {
                        rmkerbal.Value.TimelastBirthday = currentTime;
                        rmkerbal.Value.TimeNextBirthday = RMKerbal.BirthdayNextDue(currentTime);
                    }
                }
                //If EnableSalaries has been turned OFF when it was previously ON, reset any kerbals from tourist back to active.
                if (!RMLifeSpan.Instance.RMGameSettings.EnableSalaries && RMSettings.PrevEnableSalaries)
                {
                    Utilities.LogMessage("RosterManagerWindowSettings.Display Save settings, salaries have been turned off. Reset all salary related fields for all kerbals.", "info", RMSettings.VerboseLogging);
                    foreach (var rmkerbal in RMLifeSpan.Instance.RMKerbals.AllrmKerbals)
                    {
                        if (rmkerbal.Value.Type == ProtoCrewMember.KerbalType.Tourist && rmkerbal.Value.Kerbal.rosterStatus != ProtoCrewMember.RosterStatus.Dead)
                        {
                            rmkerbal.Value.Type         = ProtoCrewMember.KerbalType.Crew;
                            rmkerbal.Value.Kerbal.type  = ProtoCrewMember.KerbalType.Crew;
                            rmkerbal.Value.Trait        = rmkerbal.Value.RealTrait;
                            rmkerbal.Value.Kerbal.trait = rmkerbal.Value.RealTrait;
                            KerbalRoster.SetExperienceTrait(rmkerbal.Value.Kerbal, rmkerbal.Value.Trait);
                            RMKerbal.RegisterExperienceTrait(rmkerbal.Value);
                        }
                        rmkerbal.Value.SalaryContractDispute          = false;
                        rmkerbal.Value.SalaryContractDisputePeriods   = 0;
                        rmkerbal.Value.SalaryContractDisputeProcessed = true;
                    }
                }
                //If EnableSalaries has been turned ON when it was previously OFF, reset all kerbals salary time to now.
                if (RMLifeSpan.Instance.RMGameSettings.EnableSalaries && RMSettings.PrevEnableSalaries == false)
                {
                    Utilities.LogMessage("RosterManagerWindowSettings.Display Save settings, salaries have been turned on. Reset all salary related fields for all kerbals.", "info", RMSettings.VerboseLogging);
                    var currentTime = Planetarium.GetUniversalTime();
                    foreach (var rmkerbal in RMLifeSpan.Instance.RMKerbals.AllrmKerbals)
                    {
                        rmkerbal.Value.Timelastsalary = currentTime;
                        rmkerbal.Value.TimeSalaryDue  = RMKerbal.SalaryNextDue(currentTime);
                    }
                }
                RMSettings.SaveSettings();
                ShowWindow = false;
            }
            if (GUILayout.Button("Cancel"))
            {
                // We've canclled, so restore original settings.
                RMSettings.RestoreTempSettings();
                ShowWindow = false;
            }
            GUILayout.EndHorizontal();
            GUILayout.EndVertical();

            GUI.DragWindow(new Rect(0, 0, Screen.width, 30));
            RMSettings.RepositionWindows("WindowSettings");
        }