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(); }
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); }
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; }
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); }
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; }
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); }
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); } }
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); } }
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"); }