internal void CrewTransferStopAction() { // This adds the kerbal(s) to the destination part(s) try { // Add Source Crewmember to target part if (FromCrewMember != null && ToPart.CrewCapacity > ToPart.protoModuleCrew.Count) { AddCrewMember(FromCrewMember, ToPart, ToSeat); } // Add Target Crewmember to source part if (ToCrewMember != null && FromPart.CrewCapacity > FromPart.protoModuleCrew.Count) { AddCrewMember(ToCrewMember, FromPart, FromSeat); } SMAddon.SmVessel.TransferCrewObj.IvaDelayActive = true; SMAddon.FireEventTriggers(); } catch (Exception ex) { SmUtils.LogMessage( $"in CrewTransferAction. Error moving crewmember. Error: {ex.Message} \r\n\r\n{ex.StackTrace}", SmUtils.LogType.Error, true); } }
internal void FillVesselCrew() { foreach (var part in _partsByResource["Crew"]) { FillPartCrew(part.CrewCapacity - part.protoModuleCrew.Count, part); } SMAddon.FireEventTriggers(); }
internal static void Display(int windowId) { // Reset Tooltip active flag... ToolTipActive = false; ShowToolTips = Settings.RosterToolTips; Rect rect = new Rect(396, 4, 16, 16); if (GUI.Button(rect, new GUIContent("", "Close Window"))) { OnCreate = false; SelectedKerbal = null; ToolTip = ""; if (HighLogic.LoadedScene == GameScenes.SPACECENTER) { SMAddon.OnSMRosterToggle(); } else { Settings.ShowRoster = false; } } if (Event.current.type == EventType.Repaint && ShowToolTips == true) { ToolTip = Utilities.SetActiveTooltip(rect, Settings.RosterPosition, GUI.tooltip, ref ToolTipActive, 0, 0); } try { GUIStyle style = GUI.skin.button; var defaultColor = style.normal.textColor; GUILayout.BeginVertical(); RosterListViewer(); if (OnCreate) { CreateKerbalViewer(); } else if (SelectedKerbal != null) { EditKerbalViewer(); } else { if (GUILayout.Button("Create Kerbal", GUILayout.MaxWidth(120))) { OnCreate = true; } } GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); } catch (Exception ex) { Utilities.LogMessage(string.Format(" in Roster Window. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), "Error", true); } }
internal static void Display(int windowId) { // Reset Tooltip active flag... Rect rect = new Rect(); ToolTipActive = false; ShowToolTips = Settings.SettingsToolTips; rect = new Rect(371, 4, 16, 16); if (GUI.Button(rect, new GUIContent("", "Close Window"))) { ToolTip = ""; if (HighLogic.LoadedScene == GameScenes.SPACECENTER) { SMAddon.OnSMSettingsToggle(); } else { Settings.ShowSettings = false; } } if (Event.current.type == EventType.Repaint && ShowToolTips == true) { ToolTip = Utilities.SetActiveTooltip(rect, Settings.SettingsPosition, GUI.tooltip, ref ToolTipActive, 0, 0); } GUILayout.BeginVertical(); DisplayTabButtons(); ScrollViewerPosition = GUILayout.BeginScrollView(ScrollViewerPosition, GUILayout.Height(280), GUILayout.Width(375)); GUILayout.BeginVertical(); DisplaySelectedTab(); GUILayout.EndVertical(); GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Save")) { Settings.SaveIntervalSec = int.Parse(txtSaveInterval); Settings.Save(); Settings.ShowSettings = false; } if (GUILayout.Button("Cancel")) { // We've canclled, so restore original settings. Settings.RestoreTempSettings(); Settings.ShowSettings = false; } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); }
internal void CloseHatch(bool fireEvent = false) { Module.HatchEvents["CloseHatch"].active = false; Module.HatchEvents["OpenHatch"].active = true; Module.HatchOpen = false; if (fireEvent) { SMAddon.FireEventTriggers(); } }
internal void EmptyVesselCrew() { foreach (var part in _partsByResource["Crew"]) { for (int i = part.protoModuleCrew.Count - 1; i >= 0; i--) { RemoveCrewMember(part.protoModuleCrew[i], part); } SMAddon.FireEventTriggers(); } }
internal void GetHatches() { _hatches.Clear(); try { if (!SMSettings.EnableCls || !SMConditions.CanShowShipManifest()) { return; } if (!SMAddon.GetClsAddon()) { return; } SMAddon.UpdateClsSpaces(); if (!SMAddon.GetClsVessel()) { return; } List <ICLSPart> .Enumerator hParts = SMAddon.ClsAddon.Vessel.Parts.GetEnumerator(); while (hParts.MoveNext()) { if (hParts.Current == null) { continue; } List <PartModule> .Enumerator hModules = hParts.Current.Part.Modules.GetEnumerator(); while (hModules.MoveNext()) { if (hModules.Current == null) { continue; } PartModule pModule = (PartModule)hModules.Current; if (pModule.moduleName != "ModuleDockingHatch") { continue; } ModHatch pHatch = new ModHatch { HatchModule = (PartModule)hModules.Current, ClsPart = hParts.Current }; _hatches.Add(pHatch); } hModules.Dispose(); } hParts.Dispose(); } catch (Exception ex) { SmUtils.LogMessage($"Error in GetHatches().\r\nError: {ex}", SmUtils.LogType.Error, true); } }
internal static void AddCrewMember(ProtoCrewMember kerbal, Part part) { part.AddCrewmember(kerbal); kerbal.rosterStatus = ProtoCrewMember.RosterStatus.Assigned; if (part.internalModel != null) { if (kerbal.seat != null) { kerbal.seat.SpawnCrew(); } } SMAddon.FireEventTriggers(); }
internal static void Display(int windowId) { Title = SmUtils.SmTags["#smloc_settings_001"]; // set input locks when mouseover window... //_inputLocked = GuiUtils.PreventClickthrough(ShowWindow, Position, _inputLocked); // Reset Tooltip active flag... ToolTipActive = false; Rect rect = new Rect(Position.width - 20, 4, 16, 16); // "Close Window.\r\nSettings will not be immediately saved,\r\n but will be remembered while in game."))) if (GUI.Button(rect, new GUIContent("", SmUtils.SmTags["#smloc_settings_tt_001"]))) { ToolTip = ""; if (HighLogic.LoadedScene == GameScenes.SPACECENTER) { SMAddon.OnSmSettingsClicked(); } else { SMSettings.MemStoreTempSettings(); ShowWindow = false; } } if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } GUILayout.BeginVertical(); DisplayTabButtons(); _displayViewerPosition = GUILayout.BeginScrollView(_displayViewerPosition, SMStyle.ScrollStyle, GUILayout.Height(300), GUILayout.Width(380)); GUILayout.BeginVertical(); DisplaySelectedTab(_displayViewerPosition); GUILayout.EndVertical(); GUILayout.EndScrollView(); DisplayActionButtons(); GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); SMAddon.RepositionWindow(ref Position); }
private static void DisplayActionButtons() { GUILayout.BeginHorizontal(); // Save //GUIContent label = new GUIContent("Save", "Save the current settings to file."); GUIContent label = new GUIContent(SmUtils.Localize("#smloc_settings_002"), SmUtils.Localize("#smloc_settings_tt_002")); if (GUILayout.Button(label, GUILayout.Height(20))) { ToolTip = ""; SMSettings.SaveIntervalSec = int.Parse(TabConfig.TxtSaveInterval); SMSettings.SaveSettings(); // Sync SM to CLS override settings with CLS if (SMSettings.EnableCls && HighLogic.LoadedSceneIsFlight) { SMSettings.UpdateClsOverride(); } if (HighLogic.LoadedScene == GameScenes.SPACECENTER) SMAddon.OnSmSettingsClicked(); else ShowWindow = false; } Rect rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); // Cancel //label = new GUIContent("Cancel", "Cancel the changes made.\nSettings will revert to before changes were made."); label = new GUIContent(SmUtils.Localize("#smloc_settings_003"), SmUtils.Localize("#smloc_settings_tt_003")); if (GUILayout.Button(label, GUILayout.Height(20))) { ToolTip = ""; // We've canclled, so restore original settings. SMSettings.MemRestoreTempSettings(); if (HighLogic.LoadedScene == GameScenes.SPACECENTER) SMAddon.OnSmSettingsClicked(); else ShowWindow = false; } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); GUILayout.EndHorizontal(); }
internal void FillCrew() { //Utilities.LogMessage("Entering FillCrew", Utilities.LogType.Info, true); List <Part> .Enumerator parts = PartsByResource[SMConditions.ResourceType.Crew.ToString()].GetEnumerator(); while (parts.MoveNext()) { if (parts.Current == null) { continue; } //Utilities.LogMessage(string.Format("Processing FillCrew with part {0}", parts.Current.partInfo.name), Utilities.LogType.Info, true); SMPart.FillCrew(parts.Current); } parts.Dispose(); SMAddon.FireEventTriggers(); }
internal void EmptyCrew() { List <Part> .Enumerator parts = PartsByResource[SMConditions.ResourceType.Crew.ToString()].GetEnumerator(); while (parts.MoveNext()) { if (parts.Current == null) { continue; } for (int i = parts.Current.protoModuleCrew.Count - 1; i >= 0; i--) { TransferCrew.RemoveCrewMember(parts.Current.protoModuleCrew[i], parts.Current); } SMAddon.FireEventTriggers(); } parts.Dispose(); }
internal static void FillCrew(Part part) { //Utilities.LogMessage(string.Format("Entering Fill Crew with part {0}", part.partInfo.name), Utilities.LogType.Info, true); if (IsCrewFull(part)) { return; } while (part.CrewCapacity > SMUtils.GetPartCrewCount(part)) { ProtoCrewMember kerbal = HighLogic.CurrentGame.CrewRoster.GetNextOrNewKerbal(); part.AddCrewmember(kerbal); //Utilities.LogMessage(string.Format("Filling crew in part {0}", part.partInfo.name), Utilities.LogType.Info, true); if (kerbal.seat != null) { kerbal.seat.SpawnCrew(); } } SMAddon.FireEventTriggers(); }
internal static void OpenAllHatches() { // TODO: for realism, add a closing/opening sound // ReSharper disable once SuspiciousTypeConversion.Global List <IModuleDockingHatch> .Enumerator iModules = SMAddon.SmVessel.Hatches.Select(iHatch => (IModuleDockingHatch)iHatch.HatchModule) .Where(iModule => iModule.IsDocked).ToList().GetEnumerator(); while (iModules.MoveNext()) { if (iModules.Current == null) { continue; } iModules.Current.HatchEvents["CloseHatch"].active = true; iModules.Current.HatchEvents["OpenHatch"].active = false; iModules.Current.HatchOpen = true; } iModules.Dispose(); SMAddon.FireEventTriggers(); }
internal void RefreshLists() { //Utilities.LogMessage("Entered: SMVessel.RefreshLists", Utilities.LogType.Info, SMSettings.VerboseLogging); if (Vessel == null) { return; } SMConditions.ListsUpdating = true; UpdatePartsByResource(); GetSelectedResourcesParts(); UpdateDockedVessels(); // now lets reconcile the selected parts based on the new list of resources... WindowManifest.ResolveResourcePartSelections(SMAddon.SmVessel.SelectedResources); // Now lets update the Resource Xfer Objects... TransferPump.UpdateDisplayPumps(); // now SM settings / hatches. if (SMSettings.EnableCls && SMConditions.CanShowShipManifest()) { if (SMAddon.GetClsAddon()) { SMAddon.UpdateClsSpaces(); if (SMAddon.GetClsVessel()) { GetHatches(); } } } // Control Window datasources GetDockedVessels(); GetHatches(); GetAntennas(); GetLights(); GetSolarPanels(); GetLabs(); WindowRoster.GetRosterList(); //Utilities.LogMessage("Exiting: SMVessel.RefreshLists", Utilities.LogType.Info, SMSettings.VerboseLogging); SMConditions.ListsUpdating = false; }
internal void CrewTransferStartAction() { // This removes the kerbal(s) from the current (source) part(s) try { if (FromCrewMember != null) { RemoveCrewMember(FromCrewMember, FromPart); } if (ToCrewMember != null) { RemoveCrewMember(ToCrewMember, ToPart); } SMAddon.FireEventTriggers(); } catch (Exception ex) { SmUtils.LogMessage( $"in CrewTransferStartAction. Error moving crewmember. Error: {ex.Message} \r\n\r\n{ex.StackTrace}", SmUtils.LogType.Error, true); } }
/// <summary> /// Removes Highlighting on parts belonging to the selected resource list. /// </summary> /// <param name="resourceParts"></param> internal static void ClearResourceHighlighting(List <Part> resourceParts) { if (resourceParts == null) { return; } List <Part> .Enumerator list = resourceParts.GetEnumerator(); while (list.MoveNext()) { ClearPartHighlight(list.Current); } list.Dispose(); if (!SMSettings.EnableCls || !SMSettings.EnableClsHighlighting || !SMAddon.GetClsVessel()) { return; } if (resourceParts.Count > 0 && resourceParts[0] != null) { SMAddon.ClsAddon.Vessel.Highlight(false); } }
internal static void HighlightClsVessel(bool enabled, bool force = false) { try { if (SMAddon.ClsAddon.Vessel == null) { SMAddon.UpdateClsSpaces(); } if (SMAddon.ClsAddon.Vessel == null) { return; } List <ICLSSpace> .Enumerator spaces = SMAddon.ClsAddon.Vessel.Spaces.GetEnumerator(); while (spaces.MoveNext()) { if (spaces.Current == null) { continue; } List <ICLSPart> .Enumerator parts = spaces.Current.Parts.GetEnumerator(); while (parts.MoveNext()) { parts.Current?.Highlight(enabled, force); } parts.Dispose(); } spaces.Dispose(); } catch (Exception ex) { if (!SMAddon.FrameErrTripped) { SMUtils.LogMessage( string.Format(" in HighlightCLSVessel (repeating error). Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); SMAddon.FrameErrTripped = true; } } }
internal static void DumpCrew(Part part) { if (!part.vessel.IsRecoverable) { return; } while (part.protoModuleCrew.Count > 0) { ProtoCrewMember kerbal = part.protoModuleCrew.FirstOrDefault(); if (kerbal != null) { part.RemoveCrewmember(kerbal); kerbal.rosterStatus = ProtoCrewMember.RosterStatus.Available; if (kerbal.seat != null) { kerbal.seat.SpawnCrew(); } } } SMAddon.FireEventTriggers(); }
internal static void Display(int windowId) { Title = SMUtils.Localize("#smloc_control_001"); // set input locks when mouseover window... //_inputLocked = GuiUtils.PreventClickthrough(ShowWindow, Position, _inputLocked); // Reset Tooltip active flag... ToolTipActive = false; Rect rect = new Rect(Position.width - 20, 4, 16, 16); if (GUI.Button(rect, new GUIContent("", SMUtils.Localize("#smloc_window_tt_001")))) // "Close Window" { ShowWindow = false; ToolTip = ""; } if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } // This is a scroll panel (we are using it to make button lists...) GUILayout.BeginVertical(); DisplayWindowTabs(); // This is a scroll panel (we are using it to make button lists...) _displayViewerPosition = GUILayout.BeginScrollView(_displayViewerPosition, SMStyle.ScrollStyle, GUILayout.Height(200), GUILayout.Width(380)); DisplaySelectedTab(_displayViewerPosition); GUILayout.EndScrollView(); DisplayTabActions(); GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); SMAddon.RepositionWindow(ref Position); }
internal static void Display(int windowId) { Title = SMUtils.Localize("#smloc_roster_001"); // set input locks when mouseover window... //_inputLocked = GuiUtils.PreventClickthrough(ShowWindow, Position, _inputLocked); // Reset Tooltip active flag... ToolTipActive = false; Rect rect = new Rect(Position.width - 20, 4, 16, 16); if (GUI.Button(rect, new GUIContent("", SMUtils.Localize("#smloc_window_tt_001")))) // "Close Window" { OnCreate = false; SelectedKerbal = null; ToolTip = ""; if (HighLogic.LoadedScene == GameScenes.SPACECENTER) { SMAddon.OnSmRosterClicked(); } else { ShowWindow = false; } } if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } try { GUILayout.BeginVertical(); DisplayRosterFilter(); DisplayRosterListViewer(); if (OnCreate) { CreateKerbalViewer(); } else if (SelectedKerbal != null) { EditKerbalViewer(); } else { GUILayout.BeginHorizontal(); GUI.enabled = SMSettings.EnableCrewModify; GUIContent guilabel = new GUIContent(SMUtils.Localize("#smloc_roster_002"), GUI.enabled // "Create Kerbal" ? SMUtils.Localize("#smloc_roster_tt_001") // Realistic Control is On. Create a Kerbal is disabled. : SMUtils.Localize("#smloc_roster_tt_022")); // "Opens the Kerbal creation editor." if (GUILayout.Button(guilabel, GUILayout.MaxWidth(120), GUILayout.Height(20))) { OnCreate = true; } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } GUILayout.EndHorizontal(); GUI.enabled = true; } GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); SMAddon.RepositionWindow(ref Position); } catch (Exception ex) { SMUtils.LogMessage(string.Format(" in Roster Window. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } }
internal void RespawnCrew() { this.Vessel.SpawnCrew(); SMAddon.FireEventTriggers(); }
internal static void LoadSettings() { LoadColors(); if (Settings == null) { LoadSettingsFile(); } if (Settings != null) { ConfigNode windowsNode = Settings.HasNode("SM_Windows") ? Settings.GetNode("SM_Windows") : Settings.AddNode("SM_Windows"); ConfigNode realismNode = Settings.HasNode("SM_Realism") ? Settings.GetNode("SM_Realism") : Settings.AddNode("SM_Realism"); ConfigNode highlightNode = Settings.HasNode("SM_Highlight") ? Settings.GetNode("SM_Highlight") : Settings.AddNode("SM_Highlight"); ConfigNode toolTipsNode = Settings.HasNode("SM_ToolTips") ? Settings.GetNode("SM_ToolTips") : Settings.AddNode("SM_ToolTips"); ConfigNode soundsNode = Settings.HasNode("SM_Sounds") ? Settings.GetNode("SM_Sounds") : Settings.AddNode("SM_Sounds"); ConfigNode configNode = Settings.HasNode("SM_Config") ? Settings.GetNode("SM_Config") : Settings.AddNode("SM_Config"); ConfigNode hiddenNode = Settings.HasNode("SM_Hidden") ? Settings.GetNode("SM_Hidden") : Settings.AddNode("SM_Hidden"); // Lets get our rectangles... WindowManifest.Position = GetRectangle(windowsNode, "ManifestPosition", WindowManifest.Position); WindowTransfer.Position = GetRectangle(windowsNode, "TransferPosition", WindowTransfer.Position); WindowDebugger.Position = GetRectangle(windowsNode, "DebuggerPosition", WindowDebugger.Position); WindowSettings.Position = GetRectangle(windowsNode, "SettingsPosition", WindowSettings.Position); WindowControl.Position = GetRectangle(windowsNode, "ControlPosition", WindowControl.Position); WindowRoster.Position = GetRectangle(windowsNode, "RosterPosition", WindowRoster.Position); // now the settings // Realism Settings RealismMode = realismNode.HasValue("RealismMode") ? int.Parse(realismNode.GetValue("RealismMode")) : RealismMode; RealXfers = realismNode.HasValue("RealXfers") ? bool.Parse(realismNode.GetValue("RealXfers")) : RealXfers; RealControl = realismNode.HasValue("RealControl") ? bool.Parse(realismNode.GetValue("RealControl")) : RealControl; EnableCrew = realismNode.HasValue("EnableCrew") ? bool.Parse(realismNode.GetValue("EnableCrew")) : EnableCrew; EnableKerbalRename = realismNode.HasValue("EnableKerbalRename") ? bool.Parse(realismNode.GetValue("EnableKerbalRename")) : EnableKerbalRename; EnableChangeProfession = realismNode.HasValue("EnableChangeProfession") ? bool.Parse(realismNode.GetValue("EnableChangeProfession")) : EnableChangeProfession; EnableCrewModify = realismNode.HasValue("EnableCrewModify") ? bool.Parse(realismNode.GetValue("EnableCrewModify")) : EnableCrewModify; EnablePfCrews = realismNode.HasValue("EnablePfCrews") ? bool.Parse(realismNode.GetValue("EnablePfCrews")) : EnablePfCrews; EnableStockCrewXfer = realismNode.HasValue("EnableStockCrewTransfer") ? bool.Parse(realismNode.GetValue("EnableStockCrewTransfer")) : EnableStockCrewXfer; EnableScience = realismNode.HasValue("EnableScience") ? bool.Parse(realismNode.GetValue("EnableScience")) : EnableScience; EnableResources = realismNode.HasValue("EnableResources") ? bool.Parse(realismNode.GetValue("EnableResources")) : EnableResources; EnablePfResources = realismNode.HasValue("EnablePFResources") ? bool.Parse(realismNode.GetValue("EnablePFResources")) : EnablePfResources; EnableCls = realismNode.HasValue("EnableCLS") ? bool.Parse(realismNode.GetValue("EnableCLS")) : EnableCls; OverrideStockCrewXfer = realismNode.HasValue("OverrideStockCrewTransfer") ? bool.Parse(realismNode.GetValue("OverrideStockCrewTransfer")) : OverrideStockCrewXfer; EnableClsAllowTransfer = realismNode.HasValue("EnableClsAllowTransfer") ? bool.Parse(realismNode.GetValue("EnableClsAllowTransfer")) : EnableClsAllowTransfer; FlowRate = realismNode.HasValue("FlowRate") ? double.Parse(realismNode.GetValue("FlowRate")) : FlowRate; FlowCost = realismNode.HasValue("FlowCost") ? double.Parse(realismNode.GetValue("FlowCost")) : FlowCost; MinFlowRate = realismNode.HasValue("MinFlowRate") ? double.Parse(realismNode.GetValue("MinFlowRate")) : MinFlowRate; MaxFlowRate = realismNode.HasValue("MaxFlowRate") ? double.Parse(realismNode.GetValue("MaxFlowRate")) : MaxFlowRate; MaxFlowTimeSec = realismNode.HasValue("MaxFlowTimeSec") ? int.Parse(realismNode.GetValue("MaxFlowTimeSec")) : MaxFlowTimeSec; EnableXferCost = realismNode.HasValue("EnableXferCost") ? bool.Parse(realismNode.GetValue("EnableXferCost")) : EnableXferCost; LockSettings = realismNode.HasValue("LockSettings") ? bool.Parse(realismNode.GetValue("LockSettings")) : LockSettings; // Highlighting settings EnableHighlighting = highlightNode.HasValue("EnableHighlighting") ? bool.Parse(highlightNode.GetValue("EnableHighlighting")) : EnableHighlighting; OnlySourceTarget = highlightNode.HasValue("OnlySourceTarget") ? bool.Parse(highlightNode.GetValue("OnlySourceTarget")) : OnlySourceTarget; EnableClsHighlighting = highlightNode.HasValue("EnableCLSHighlighting") ? bool.Parse(highlightNode.GetValue("EnableCLSHighlighting")) : EnableClsHighlighting; EnableEdgeHighlighting = highlightNode.HasValue("EnableEdgeHighlighting") ? bool.Parse(highlightNode.GetValue("EnableEdgeHighlighting")) : EnableClsHighlighting; ResourcePartColor = hiddenNode.HasValue("ResourcePartColor") ? hiddenNode.GetValue("ResourcePartColor") : ResourcePartColor; // ToolTip Settings ShowToolTips = toolTipsNode.HasValue("ShowToolTips") ? bool.Parse(toolTipsNode.GetValue("ShowToolTips")) : ShowToolTips; WindowManifest.ShowToolTips = toolTipsNode.HasValue("ManifestToolTips") ? bool.Parse(toolTipsNode.GetValue("ManifestToolTips")) : WindowManifest.ShowToolTips; WindowTransfer.ShowToolTips = toolTipsNode.HasValue("TransferToolTips") ? bool.Parse(toolTipsNode.GetValue("TransferToolTips")) : WindowTransfer.ShowToolTips; WindowSettings.ShowToolTips = toolTipsNode.HasValue("SettingsToolTips") ? bool.Parse(toolTipsNode.GetValue("SettingsToolTips")) : WindowSettings.ShowToolTips; TabRealism.ShowToolTips = toolTipsNode.HasValue("RealismToolTips") ? bool.Parse(toolTipsNode.GetValue("RealismToolTips")) : TabRealism.ShowToolTips; TabHighlight.ShowToolTips = toolTipsNode.HasValue("HighlightingToolTips") ? bool.Parse(toolTipsNode.GetValue("HighlightingToolTips")) : TabHighlight.ShowToolTips; TabToolTips.ShowToolTips = toolTipsNode.HasValue("ToolTipsToolTips") ? bool.Parse(toolTipsNode.GetValue("ToolTipsToolTips")) : TabToolTips.ShowToolTips; TabSounds.ShowToolTips = toolTipsNode.HasValue("SoundsToolTips") ? bool.Parse(toolTipsNode.GetValue("SoundsToolTips")) : TabSounds.ShowToolTips; TabConfig.ShowToolTips = toolTipsNode.HasValue("ConfigToolTips") ? bool.Parse(toolTipsNode.GetValue("ConfigToolTips")) : TabConfig.ShowToolTips; WindowRoster.ShowToolTips = toolTipsNode.HasValue("RosterToolTips") ? bool.Parse(toolTipsNode.GetValue("RosterToolTips")) : WindowRoster.ShowToolTips; WindowControl.ShowToolTips = toolTipsNode.HasValue("ControlToolTips") ? bool.Parse(toolTipsNode.GetValue("ControlToolTips")) : WindowControl.ShowToolTips; TabHatch.ShowToolTips = toolTipsNode.HasValue("HatchToolTips") ? bool.Parse(toolTipsNode.GetValue("HatchToolTips")) : TabHatch.ShowToolTips; TabSolarPanel.ShowToolTips = toolTipsNode.HasValue("PanelToolTips") ? bool.Parse(toolTipsNode.GetValue("PanelToolTips")) : TabSolarPanel.ShowToolTips; TabAntenna.ShowToolTips = toolTipsNode.HasValue("AntennaToolTips") ? bool.Parse(toolTipsNode.GetValue("AntennaToolTips")) : TabAntenna.ShowToolTips; TabLight.ShowToolTips = toolTipsNode.HasValue("LightToolTips") ? bool.Parse(toolTipsNode.GetValue("LightToolTips")) : TabLight.ShowToolTips; WindowDebugger.ShowToolTips = toolTipsNode.HasValue("DebuggerToolTips") ? bool.Parse(toolTipsNode.GetValue("DebuggerToolTips")) : WindowDebugger.ShowToolTips; // Sounds Settings PumpSoundStart = soundsNode.HasValue("PumpSoundStart") ? soundsNode.GetValue("PumpSoundStart") : PumpSoundStart; PumpSoundRun = soundsNode.HasValue("PumpSoundRun") ? soundsNode.GetValue("PumpSoundRun") : PumpSoundRun; PumpSoundStop = soundsNode.HasValue("PumpSoundStop") ? soundsNode.GetValue("PumpSoundStop") : PumpSoundStop; CrewSoundStart = soundsNode.HasValue("CrewSoundStart") ? soundsNode.GetValue("CrewSoundStart") : CrewSoundStart; CrewSoundRun = soundsNode.HasValue("CrewSoundRun") ? soundsNode.GetValue("CrewSoundRun") : CrewSoundRun; CrewSoundStop = soundsNode.HasValue("CrewSoundStop") ? soundsNode.GetValue("CrewSoundStop") : CrewSoundStop; PumpSoundVol = soundsNode.HasValue("PumpSoundVol") ? double.Parse(soundsNode.GetValue("PumpSoundVol")) : PumpSoundVol; CrewSoundVol = soundsNode.HasValue("CrewSoundVol") ? double.Parse(soundsNode.GetValue("CrewSoundVol")) : CrewSoundVol; // Config Settings EnableBlizzyToolbar = configNode.HasValue("EnableBlizzyToolbar") ? bool.Parse(configNode.GetValue("EnableBlizzyToolbar")) : EnableBlizzyToolbar; WindowDebugger.ShowWindow = configNode.HasValue("ShowDebugger") ? bool.Parse(configNode.GetValue("ShowDebugger")) : WindowDebugger.ShowWindow; VerboseLogging = configNode.HasValue("VerboseLogging") ? bool.Parse(configNode.GetValue("VerboseLogging")) : VerboseLogging; AutoSave = configNode.HasValue("AutoSave") ? bool.Parse(configNode.GetValue("AutoSave")) : AutoSave; SaveIntervalSec = configNode.HasValue("SaveIntervalSec") ? int.Parse(configNode.GetValue("SaveIntervalSec")) : SaveIntervalSec; AutoDebug = configNode.HasValue("AutoDebug") ? bool.Parse(configNode.GetValue("AutoDebug")) : AutoDebug; DebugLogPath = configNode.HasValue("DebugLogPath") ? configNode.GetValue("DebugLogPath") : DebugLogPath; ErrorLogLength = configNode.HasValue("ErrorLogLength") ? configNode.GetValue("ErrorLogLength") : ErrorLogLength; SaveLogOnExit = configNode.HasValue("SaveLogOnExit") ? bool.Parse(configNode.GetValue("SaveLogOnExit")) : SaveLogOnExit; UseUnityStyle = configNode.HasValue("UseUnityStyle") ? bool.Parse(configNode.GetValue("UseUnityStyle")) : UseUnityStyle; // Hidden Settings // Hidden Highlighting SourcePartColor = hiddenNode.HasValue("SourcePartColor") ? hiddenNode.GetValue("SourcePartColor") : SourcePartColor; TargetPartColor = hiddenNode.HasValue("TargetPartColor") ? hiddenNode.GetValue("TargetPartColor") : TargetPartColor; TargetPartCrewColor = hiddenNode.HasValue("TargetPartCrewColor") ? hiddenNode.GetValue("TargetPartCrewColor") : TargetPartCrewColor; MouseOverColor = hiddenNode.HasValue("MouseOverColor") ? hiddenNode.GetValue("MouseOverColor") : MouseOverColor; // Hidden config CrewXferDelaySec = hiddenNode.HasValue("CrewXferDelaySec") ? double.Parse(hiddenNode.GetValue("CrewXferDelaySec")) : CrewXferDelaySec; IvaUpdateFrameDelay = hiddenNode.HasValue("IvaUpdateFrameDelay") ? int.Parse(hiddenNode.GetValue("IvaUpdateFrameDelay")) : IvaUpdateFrameDelay; // Okay, set the Settings loaded flag Loaded = true; MemStoreTempSettings(); } // Enable/Disable crewed parts CrewTransferDialog SetStockCrewTransferState(); // Force Styles to refresh/load. SMStyle.WindowStyle = null; // Lets make sure that the windows can be seen on the screen. (supports different resolutions) SMAddon.RepositionWindows(); }
internal static void Display(int windowId) { Title = $"{SmUtils.SmTags["#smloc_debug_000"]}: {SMSettings.CurVersion}"; // set input locks when mouseover window... //_inputLocked = GuiUtils.PreventClickthrough(ShowWindow, Position, _inputLocked); // Reset Tooltip active flag... ToolTipActive = false; Rect rect = new Rect(Position.width - 20, 4, 16, 16); if (GUI.Button(rect, new GUIContent("", SmUtils.SmTags["#smloc_window_tt_001"]))) // "Close Window" { ShowWindow = false; SMSettings.MemStoreTempSettings(); ToolTip = ""; } if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } GUILayout.BeginVertical(); SmUtils.DebugScrollPosition = GUILayout.BeginScrollView(SmUtils.DebugScrollPosition, SMStyle.ScrollStyle, GUILayout.Height(300), GUILayout.Width(500)); GUILayout.BeginVertical(); List <string> .Enumerator errors = SmUtils.LogItemList.GetEnumerator(); while (errors.MoveNext()) { if (errors.Current == null) { continue; } GUILayout.TextArea(errors.Current, GUILayout.Width(460)); } errors.Dispose(); GUILayout.EndVertical(); GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); if (GUILayout.Button(SmUtils.SmTags["#smloc_debug_001"], GUILayout.Height(20))) //"Clear log" { SmUtils.LogItemList.Clear(); SmUtils.LogItemList.Add($"Info: Log Cleared at {DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)} UTC."); } if (GUILayout.Button(SmUtils.SmTags["#smloc_debug_002"], GUILayout.Height(20))) // "Save Log" { // Create log file and save. Savelog(); } if (GUILayout.Button(SmUtils.SmTags["#smloc_debug_003"], GUILayout.Height(20))) // "Close" { // Create log file and save. ShowWindow = false; SMSettings.MemStoreTempSettings(); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); SMAddon.RepositionWindow(ref Position); }
internal static void DisplayWindowTabs() { Rect rect; GUILayout.BeginHorizontal(); GUIContent label; if (SMSettings.EnableCls) { label = new GUIContent(SMUtils.Localize("#smloc_control_002"), SMUtils.Localize("#smloc_control_tt_001")); GUIStyle hatchesStyle = _selectedTab == Tab.Hatch ? SMStyle.ButtonToggledStyle : SMStyle.ButtonStyle; if (GUILayout.Button(label, hatchesStyle, GUILayout.Height(20))) // "Hatches" { try { SMAddon.UpdateClsSpaces(); SMAddon.SmVessel.GetHatches(); _selectedTab = Tab.Hatch; } catch (Exception ex) { SMUtils.LogMessage( string.Format(" opening Hatches Tab. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } } GUI.enabled = true; label = new GUIContent(SMUtils.Localize("#smloc_control_003"), SMUtils.Localize("#smloc_control_tt_002")); GUIStyle panelsStyle = _selectedTab == Tab.Panel ? SMStyle.ButtonToggledStyle : SMStyle.ButtonStyle; if (GUILayout.Button(label, panelsStyle, GUILayout.Height(20))) // "Solar Panels" { try { SMAddon.SmVessel.GetSolarPanels(); _selectedTab = Tab.Panel; } catch (Exception ex) { SMUtils.LogMessage( string.Format(" opening Solar Panels Tab. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } label = new GUIContent(SMUtils.Localize("#smloc_control_004"), SMUtils.Localize("#smloc_control_tt_003")); GUIStyle antennaStyle = _selectedTab == Tab.Antenna ? SMStyle.ButtonToggledStyle : SMStyle.ButtonStyle; if (GUILayout.Button(label, antennaStyle, GUILayout.Height(20))) // "Antennas" { try { SMAddon.SmVessel.GetAntennas(); _selectedTab = Tab.Antenna; } catch (Exception ex) { SMUtils.LogMessage( string.Format(" opening Antennas Tab. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } label = new GUIContent(SMUtils.Localize("#smloc_control_005"), SMUtils.Localize("#smloc_control_tt_004")); GUIStyle lightsStyle = _selectedTab == Tab.Light ? SMStyle.ButtonToggledStyle : SMStyle.ButtonStyle; if (GUILayout.Button(label, lightsStyle, GUILayout.Height(20))) // "Lights" { try { SMAddon.SmVessel.GetLights(); _selectedTab = Tab.Light; } catch (Exception ex) { SMUtils.LogMessage( string.Format(" opening Lights Tab. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } label = new GUIContent(SMUtils.Localize("#smloc_control_006"), SMUtils.Localize("#smloc_control_tt_005")); GUIStyle labsStyle = _selectedTab == Tab.Lab ? SMStyle.ButtonToggledStyle : SMStyle.ButtonStyle; if (GUILayout.Button(label, labsStyle, GUILayout.Height(20))) // "Labs" { try { SMAddon.SmVessel.GetLabs(); _selectedTab = Tab.Lab; } catch (Exception ex) { SMUtils.LogMessage( string.Format(" opening Labs Tab. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } } rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } GUILayout.EndHorizontal(); }
internal static void Display(Vector2 displayViewerPosition) { // Reset Tooltip active flag... ToolTipActive = false; _canShowToolTips = WindowSettings.ShowToolTips && ShowToolTips; Position = WindowSettings.Position; int scrollX = 20; GUI.enabled = true; GUILayout.Label(SmUtils.SmTags["#smloc_settings_highlight_000"], SMStyle.LabelTabHeader); GUILayout.Label("____________________________________________________________________________________________", SMStyle.LabelStyleHardRule, GUILayout.Height(10), GUILayout.Width(guiRuleWidth)); // EnableHighlighting Mode GUILayout.BeginHorizontal(); //_label = "Enable Highlighting"; //_toolTip = "Enables highlighting of all parts that contain the resource(s) selected in the Manifest Window."; //_toolTip += "\r\nThis is a global setting. Does not affect mouseover highlighting."; _label = SmUtils.SmTags["#smloc_settings_highlight_001"]; _toolTip = SmUtils.SmTags["#smloc_settings_highlight_tt_001"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableHighlighting = GUILayout.Toggle(SMSettings.EnableHighlighting, _guiLabel, GUILayout.Width(guiToggleWidth)); GUILayout.EndHorizontal(); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } if (SMSettings.EnableHighlighting != SMSettings.PrevEnableHighlighting && HighLogic.LoadedSceneIsFlight) { if (SMSettings.EnableCls) { if (SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Crew.ToString())) { // Update spaces and reassign the resource to observe new settings. SMHighlighter.HighlightClsVessel(SMSettings.EnableHighlighting, true); SMAddon.UpdateClsSpaces(); SMAddon.SmVessel.SelectedResources.Clear(); SMAddon.SmVessel.SelectedResources.Add(SMConditions.ResourceType.Crew.ToString()); } } } // OnlySourceTarget Mode GUI.enabled = true; GUI.enabled = SMSettings.EnableHighlighting; GUILayout.BeginHorizontal(); GUILayout.Space(guiIndent); //_label = "Highlight Only Source / Target Parts"; //_toolTip = "Disables general highlighting of parts for a selected Resource or resources."; //_toolTip += "\r\nRestricts highlighting of parts to only the part or parts selected in the Transfer Window."; //_toolTip += "\r\nRequires 'Enable Highlighting' to be On."; _label = SmUtils.SmTags["#smloc_settings_highlight_002"]; _toolTip = SmUtils.SmTags["#smloc_settings_highlight_tt_002"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.OnlySourceTarget = GUILayout.Toggle(SMSettings.OnlySourceTarget, _guiLabel, GUILayout.Width(guiToggleWidth)); GUILayout.EndHorizontal(); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } if (SMSettings.OnlySourceTarget && (!SMSettings.PrevOnlySourceTarget || SMSettings.EnableClsHighlighting)) { SMSettings.EnableClsHighlighting = false; if (HighLogic.LoadedSceneIsFlight && SMSettings.EnableCls && SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Crew.ToString())) { // Update spaces and reassign the resource to observe new settings. SMHighlighter.HighlightClsVessel(false, true); SMAddon.UpdateClsSpaces(); SMAddon.SmVessel.SelectedResources.Clear(); SMAddon.SmVessel.SelectedResources.Add(SMConditions.ResourceType.Crew.ToString()); } } // Enable CLS Highlighting Mode if (!SMSettings.EnableHighlighting || !SMSettings.EnableCls) { GUI.enabled = false; } else { GUI.enabled = true; } GUILayout.BeginHorizontal(); GUILayout.Space(guiIndent); //_label = "Enable CLS Highlighting"; //_toolTip = "Changes highlighting behavior if CLS is enabled & Crew selected in Manifest Window."; //_toolTip += "\r\nHighlights the parts associated with livable/passable spaces on vessel."; //_toolTip += "\r\nRequires 'Enable Highlighting' to be On and is mutually exclusive with "; //_toolTip += "\r\n'Highlight Only Source / Target Parts'."; _label = SmUtils.SmTags["#smloc_settings_highlight_003"]; _toolTip = SmUtils.SmTags["#smloc_settings_highlight_tt_003"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableClsHighlighting = GUILayout.Toggle(SMSettings.EnableClsHighlighting, _guiLabel, GUILayout.Width(guiToggleWidth)); GUILayout.EndHorizontal(); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } if (SMSettings.EnableClsHighlighting && (!SMSettings.PrevEnableClsHighlighting || SMSettings.OnlySourceTarget)) { SMSettings.OnlySourceTarget = false; } if (HighLogic.LoadedSceneIsFlight && SMSettings.EnableCls && SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Crew.ToString()) && WindowTransfer.ShowWindow) { if (SMSettings.EnableClsHighlighting != SMSettings.PrevEnableClsHighlighting) { SMHighlighter.HighlightClsVessel(SMSettings.EnableClsHighlighting); } } // Enable Edge Highlighting Mode GUI.enabled = SMSettings.EnableHighlighting; GUILayout.BeginHorizontal(); //_label = "Enable Edge Highlighting (On Mouse Overs)"; //_toolTip = "Changes highlighting behavior when you mouseover a part button in Transfer Window."; //_toolTip += "\r\nCauses the edge of the part to glow, making it easier to see."; //_toolTip += "\r\nRequires Edge Highlighting to be enabled in the KSP Game settings."; _label = SmUtils.SmTags["#smloc_settings_highlight_004"]; _toolTip = SmUtils.SmTags["#smloc_settings_highlight_tt_004"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableEdgeHighlighting = GUILayout.Toggle(SMSettings.EnableEdgeHighlighting, _guiLabel, GUILayout.Width(guiToggleWidth)); GUILayout.EndHorizontal(); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } if (SMSettings.EnableEdgeHighlighting != SMSettings.PrevEnableEdgeHighlighting && HighLogic.LoadedSceneIsFlight) { if (SMSettings.EnableEdgeHighlighting == false) { if (SMAddon.SmVessel.SelectedResources.Count > 0) { List <Part> .Enumerator parts = SMAddon.SmVessel.SelectedResourcesParts.GetEnumerator(); while (parts.MoveNext()) { if (parts.Current == null) { continue; } SMHighlighter.EdgeHighight(parts.Current, false); } parts.Dispose(); } } } GUI.enabled = true; }
internal void CrewTransferAction() { try { // Both parts have internal models... if (FromPart.internalModel != null && ToPart.internalModel != null) { if (ToSeat.taken) { // Remove the crew members from the part(s)... RemoveCrewMember(FromCrewMember, FromPart); // Swap places if there is no standing room available if (ToPart.CrewCapacity == ToPart.protoModuleCrew.Count) { RemoveCrewMember(ToCrewMember, ToPart); FromPart.AddCrewmemberAt(ToCrewMember, FromPart.internalModel.seats.IndexOf(FromSeat)); // Add the crew members back into the part(s) at their new seats. ToPart.AddCrewmemberAt(FromCrewMember, ToPart.internalModel.seats.IndexOf(ToSeat)); } else { // Just move. RemoveCrewMember(FromCrewMember, FromPart); AddCrewMember(FromCrewMember, ToPart); } SMAddon.FireEventTriggers(); } else { // Just move. RemoveCrewMember(FromCrewMember, FromPart); ToPart.AddCrewmemberAt(FromCrewMember, ToPart.internalModel.seats.IndexOf(ToSeat)); SMAddon.FireEventTriggers(); } } else // one or both parts do not have an internal model { // no portraits, so let's just move kerbals... if (ToCrewMember != null) { RemoveCrewMember(FromCrewMember, FromPart); RemoveCrewMember(ToCrewMember, ToPart); AddCrewMember(FromCrewMember, ToPart); AddCrewMember(ToCrewMember, FromPart); } else { RemoveCrewMember(FromCrewMember, FromPart); AddCrewMember(FromCrewMember, ToPart); } SMAddon.FireEventTriggers(); } if (SMSettings.EnableStockCrewXfer) { // Now let's deal with third party mod support... SourceAction = new GameEvents.HostedFromToAction <ProtoCrewMember, Part>(FromCrewMember, FromPart, ToPart); FireSourceXferEvent = true; //If a swap, we need to handle that too... if (ToCrewMember != null) { TargetAction = new GameEvents.HostedFromToAction <ProtoCrewMember, Part>(ToCrewMember, ToPart, FromPart); FireTargetXferEvent = true; } } FromPart.vessel.SpawnCrew(); // not sure if these help. We have been experiencing issues with "ghost" kerbals & EVAs/docking/undocking after Crew Moves. // trying this to see if it "cleans up" any internal tracking inside of KSP... FromPart.RegisterCrew(); ToPart.RegisterCrew(); SMAddon.SmVessel.RespawnCrew(); SMAddon.SmVessel.TransferCrewObj.IvaDelayActive = true; } catch (Exception ex) { SmUtils.LogMessage( $"in CrewTransferAction. Error moving crewmember. Error: {ex.Message} \r\n\r\n{ex.StackTrace}", SmUtils.LogType.Error, true); } }
internal static void Display(Vector2 displayViewerPosition) { // Reset Tooltip active flag... ToolTipActive = false; _canShowToolTips = WindowSettings.ShowToolTips && ShowToolTips; Position = WindowSettings.Position; int scrollX = 20; GUI.enabled = true; if (!SMSettings.LockSettings) { // "Realism Settings / Options" GUILayout.Label(SmUtils.SmTags["#smloc_settings_realism_001"], SMStyle.LabelTabHeader); } else { // "Realism Settings / Options (Locked. To unlock, edit SMSettings.dat file)" GUILayout.Label( new GUIContent(SmUtils.SmTags["#smloc_settings_realism_002"], SmUtils.SmTags["#smloc_settings_realism_tt_001"]), SMStyle.LabelTabHeader); } GUILayout.Label("____________________________________________________________________________________________", SMStyle.LabelStyleHardRule, GUILayout.Height(10), GUILayout.Width(guiRuleWidth)); bool isEnabled = !SMSettings.LockSettings; //RealismMode Buttons. DisplayRealismButtons(); GUILayout.Label("____________________________________________________________________________________________", SMStyle.LabelStyleHardRule, GUILayout.Height(10), GUILayout.Width(guiRuleWidth)); // RealXfers Mode GUI.enabled = isEnabled; //_label = "Realistic Transfers"; //_toolTip = "Turns on/off Realistic Resource Transfers."; //_toolTip += "\r\nWhen ON, Resource fills, Dumps, Crew and Science transfers will behave realistically"; //_toolTip += "\r\nWhen Off, Allows Fills, Dumps, Repeating Science,"; //_toolTip += "\r\ninstantaneous Xfers, Crew Xfers anywwhere, etc."; _label = SmUtils.SmTags["#smloc_settings_realism_008"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_007"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.RealXfers = GUILayout.Toggle(SMSettings.RealXfers, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } // RealControl Mode GUI.enabled = isEnabled; //_label = "Realistic Control"; //_toolTip = "Turns on/off Realistic Shipboard Control."; //_toolTip += "\r\nWhen ON, you must have crew aboard, or a valid comm link to a control station or satellite"; //_toolTip += "\r\nWhen Off, you have full control of the vessel at any time (subject to the availability of resources)."; _label = SmUtils.SmTags["#smloc_settings_realism_009"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_008"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.RealControl = GUILayout.Toggle(SMSettings.RealControl, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } // EnableCrew Modifications GUI.enabled = isEnabled; GUILayout.BeginHorizontal(); //_label = "Enable Roster Modifications"; //_toolTip = "Enables/Disable Crew Modifications in the Roster Window."; //_toolTip += "\r\nWhen ON, You cannot Edit, Create, or Respawn Crew members."; //_toolTip += "\r\nWhen Off, You can Edit, Create, or Respawn Crew members."; _label = SmUtils.SmTags["#smloc_settings_realism_010"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_009"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableCrewModify = GUILayout.Toggle(SMSettings.EnableCrewModify, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); //_label = "Enable Kerbal Renaming"; //_toolTip = "Allows renaming a Kerbal."; _label = SmUtils.SmTags["#smloc_settings_realism_011"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_010"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableKerbalRename = GUILayout.Toggle(SMSettings.EnableKerbalRename, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.BeginHorizontal(); //_label = "Enable Profession management"; //_toolTip = "When On, SM allows you to change a Kerbal's profession."; _label = SmUtils.SmTags["#smloc_settings_realism_012"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_011"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableChangeProfession = GUILayout.Toggle(SMSettings.EnableChangeProfession, _guiLabel, GUILayout.Width(guiToggleWidth)); GUILayout.EndHorizontal(); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUI.enabled = true; // Enable stock Crew Xfers GUI.enabled = SMSettings.EnableCrew && isEnabled; GUILayout.BeginHorizontal(); //_label = "Enable Stock Crew Xfers"; //_toolTip = "Turns On/Off the stock Crew Transfer mechanism."; //_toolTip += "\r\nWhen ON stock crew transfers will be Allowed."; //_toolTip += "\r\nWhen OFF Stock Crew transfers are disabled."; _label = SmUtils.SmTags["#smloc_settings_realism_013"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_012"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableStockCrewXfer = GUILayout.Toggle(SMSettings.EnableStockCrewXfer, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // EnableCrew Xfer Mode GUI.enabled = isEnabled; GUILayout.BeginHorizontal(); //_label = "Enable SM Crew Xfers"; //_toolTip = "Turns on/off Crew transfers using SM."; //_toolTip += "\r\nWhen ON, The Crew option will appear in your resource list."; //_toolTip += "\r\nWhen Off, Crew transfers are not possible using SM."; _label = SmUtils.SmTags["#smloc_settings_realism_014"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_013"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableCrew = GUILayout.Toggle(SMSettings.EnableCrew, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (!SMSettings.EnableCrew && HighLogic.LoadedSceneIsFlight) { if (SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Crew.ToString())) { // Clear Resource selection. SMHighlighter.ClearResourceHighlighting(SMAddon.SmVessel.SelectedResourcesParts); SMAddon.SmVessel.SelectedResources.Clear(); WindowTransfer.ShowWindow = false; } } // Set Gui.enabled for child settings to resources... GUI.enabled = SMSettings.EnableCrew && isEnabled; // EnablePFResources Mode GUILayout.BeginHorizontal(); GUILayout.Space(20); //_label = "Enable Crew Fill and Empty Ops in Pre-Flight"; //_toolTip = "Turns on/off Fill and Empty Crew when in preflight."; //_toolTip += "\r\nWhen ON, Fill & Empty Crew vessel wide are possible (shows in the Resource list)."; //_toolTip += "\r\nWhen Off, Fill and Empty Crew vessel wide will not appear in the resource list."; _label = SmUtils.SmTags["#smloc_settings_realism_015"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_014"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnablePfCrews = GUILayout.Toggle(SMSettings.EnablePfCrews, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // Enable stock Crew Xfer Override GUI.enabled = SMSettings.EnableCrew && isEnabled && SMSettings.EnableStockCrewXfer; GUILayout.BeginHorizontal(); //_label = "Override Stock Crew Xfers"; //_toolTip = "Turns on/off Overriding the stock Crew Transfer mechanism with the SM style."; //_toolTip += "\r\nWhen ON stock crew transfers will behave like SM style transfers.\n(requires both Stock Crew Transfers & SM Crew Transfers ON)"; //_toolTip += "\r\nWhen Off Stock Crew transfers behave normally if enabled."; _label = SmUtils.SmTags["#smloc_settings_realism_016"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_015"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Space(20); SMSettings.OverrideStockCrewXfer = GUILayout.Toggle(SMSettings.OverrideStockCrewXfer, _guiLabel, GUILayout.Width(300)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // EnableCLS Mode GUILayout.BeginHorizontal(); GUILayout.Space(20); if (!SMSettings.EnableCrew || !SMSettings.ClsInstalled) { GUI.enabled = false; } else { GUI.enabled = isEnabled; } //_label = "Enable CLS (Connected Living Spaces)"; //_toolTip = "Turns on/off Connected Living space support."; //_toolTip += "\r\nWhen ON, Crew can only be xfered to a part in the same 'Living Space'."; //_toolTip += "\r\nWhen Off, Crew transfers are possible to any part that can hold a kerbal."; _label = SmUtils.SmTags["#smloc_settings_realism_017"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_016"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableCls = GUILayout.Toggle(SMSettings.EnableCls, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (SMSettings.EnableCls != SMSettings.PrevEnableCls && HighLogic.LoadedSceneIsFlight) { if (!SMSettings.EnableCls) { SMHighlighter.HighlightClsVessel(false, true); } else if (SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Crew.ToString())) { // Update spaces and reassign the resource to observe new settings. SMAddon.UpdateClsSpaces(); SMAddon.SmVessel.SelectedResources.Clear(); SMAddon.SmVessel.SelectedResources.Add(SMConditions.ResourceType.Crew.ToString()); } } // Enable stock Crew Xfer Override if (!SMSettings.EnableCrew || !SMSettings.ClsInstalled) { GUI.enabled = false; } else { GUI.enabled = isEnabled; } GUILayout.BeginHorizontal(); //_label = "Enable CLS' Allow Unrestricted Crew Xfers switch"; //_toolTip = "Turns on/off Enabling the CLS Switch allowing unrestricted crew transfers."; //_toolTip += "\r\nWhen ON (requires Realism Mode On), SM Manages Stock and CLS aware Crew Transfers."; //_toolTip += "\r\nWhen Off (or Realism is off), the setting in CLS is not touched."; _label = SmUtils.SmTags["#smloc_settings_realism_018"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_017"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Space(20); SMSettings.EnableClsAllowTransfer = GUILayout.Toggle(SMSettings.EnableClsAllowTransfer, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // EnableScience Mode GUILayout.BeginHorizontal(); GUI.enabled = isEnabled; //_label = "Enable Science Xfers"; //_toolTip = "Turns on/off Science Xfers."; //_toolTip += "\r\nWhen ON, Science transfers are possible and show up in the Resource list."; //_toolTip += "\r\nWhen Off, Science transfers will not appear in the resource list."; _label = SmUtils.SmTags["#smloc_settings_realism_019"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_018"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableScience = GUILayout.Toggle(SMSettings.EnableScience, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (!SMSettings.EnableScience && HighLogic.LoadedSceneIsFlight) { // Clear Resource selection. if (SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Science.ToString())) { SMAddon.SmVessel.SelectedResources.Clear(); } } // EnableResources Mode GUILayout.BeginHorizontal(); GUI.enabled = isEnabled; //_label = "Enable Resource Xfers"; //_toolTip = "Turns on/off Resource Xfers."; //_toolTip += "\r\nWhen ON, Resource transfers are possible and display in Manifest Window."; //_toolTip += "\r\nWhen Off, Resources will not appear in the resource list."; _label = SmUtils.SmTags["#smloc_settings_realism_020"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_019"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableResources = GUILayout.Toggle(SMSettings.EnableResources, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (!SMSettings.EnableResources && HighLogic.LoadedSceneIsFlight) { // Clear Resource selection. if (SMAddon.SmVessel.SelectedResources.Count > 0 && !SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Crew.ToString()) && !SMAddon.SmVessel.SelectedResources.Contains(SMConditions.ResourceType.Science.ToString())) { SMAddon.SmVessel.SelectedResources.Clear(); } } // Set Gui.enabled for child settings to resources... GUI.enabled = SMSettings.EnableResources && isEnabled; // EnablePFResources Mode GUILayout.BeginHorizontal(); GUILayout.Space(20); //_label = "Enable Resources in Pre-Flight"; //_toolTip = "Turns on/off Fill and Empty Resources when in preflight."; //_toolTip += "\r\nWhen ON, Fill & Dump resources vessel wide are possible (shows in the Resource list)."; //_toolTip += "\r\nWhen Off, Fill and Dump Resources vessel wide will not appear in the resource list."; _label = SmUtils.SmTags["#smloc_settings_realism_021"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_020"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnablePfResources = GUILayout.Toggle(SMSettings.EnablePfResources, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // EnableXferCost Mode GUILayout.BeginHorizontal(); GUILayout.Space(20); //_label = "Resource Xfers Consume Power"; //_toolTip = "Turns on/off ElectricCharge cost forResource Xfers."; //_toolTip += "\r\nWhen ON, Resource transfers will consume ElectricCharge."; //_toolTip += "\r\nWhen Off, Resources Xfers consume no ElectricCharge."; _label = SmUtils.SmTags["#smloc_settings_realism_022"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_021"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.EnableXferCost = GUILayout.Toggle(SMSettings.EnableXferCost, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // Resource Xfer EC cost GUI.enabled = !SMSettings.LockSettings && SMSettings.EnableResources && SMSettings.EnableXferCost; GUILayout.BeginHorizontal(); GUILayout.Space(35); //_label = "Xfer Power Cost:"; //_toolTip = "Sets the Electrical cost of resource Xfers."; //_toolTip += "\r\nThe higher the number the more ElectricCharge used."; _label = $"{SmUtils.SmTags["#smloc_settings_realism_023"]}:"; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_022"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(125), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } // Lets parse the string to allow decimal points. StrFlowCost = SMSettings.FlowCost.ToString(CultureInfo.InvariantCulture); // add the decimal point if it was typed. StrFlowCost = SmUtils.GetStringDecimal(StrFlowCost); // add the zero if it was typed. StrFlowCost = SmUtils.GetStringZero(StrFlowCost); StrFlowCost = GUILayout.TextField(StrFlowCost, 20, GUILayout.Height(20), GUILayout.Width(80)); //_label = "EC/Unit"; //_toolTip = "Sets the Electrical cost of resource Xfers when Realism Mode is on."; //_toolTip += "\r\nThe higher the number the more ElectricCharge used."; _label = SmUtils.SmTags["#smloc_settings_realism_024"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_022"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(80), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // update decimal bool SmUtils.SetStringDecimal(StrFlowCost); //update zero bool SmUtils.SetStringZero(StrFlowCost); if (float.TryParse(StrFlowCost, out float newCost)) { SMSettings.FlowCost = newCost; } // create xfer Flow Rate slider; // Lets parse the string to allow decimal points. string strFlowRate = SMSettings.FlowRate.ToString(CultureInfo.InvariantCulture); string strMinFlowRate = SMSettings.MinFlowRate.ToString(CultureInfo.InvariantCulture); string strMaxFlowRate = SMSettings.MaxFlowRate.ToString(CultureInfo.InvariantCulture); string strMaxFlowTime = SMSettings.MaxFlowTimeSec.ToString(); // Resource Flow Rate GUI.enabled = !SMSettings.LockSettings && SMSettings.EnableResources && SMSettings.RealXfers; GUILayout.BeginHorizontal(); GUILayout.Space(25); //_label = "Resource Flow Rate:"; //_toolTip = "Sets the rate that resources Xfer when Realistic Transfers is on."; //_toolTip += "\r\nThe higher the number the faster resources move."; //_toolTip += "\r\nYou can also use the slider below to change this value."; _label = $"{SmUtils.SmTags["#smloc_settings_realism_025"]}:"; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_023"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(135), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } strFlowRate = GUILayout.TextField(strFlowRate, 20, GUILayout.Height(20), GUILayout.Width(80)); //_label = "Units/Sec"; //_toolTip = "Sets the rate that resources Xfer when Realism Mode is on."; //_toolTip += "\r\nThe higher the number the faster resources move."; //_toolTip += "\r\nYou can also use the slider below to change this value."; _label = SmUtils.SmTags["#smloc_settings_realism_026"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_023"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(80), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (float.TryParse(strFlowRate, out float newRate)) { SMSettings.FlowRate = (int)newRate; } // Resource Flow rate Slider GUILayout.BeginHorizontal(); GUILayout.Space(30); GUILayout.Label(SMSettings.MinFlowRate.ToString(CultureInfo.InvariantCulture), GUILayout.Width(10), GUILayout.Height(20)); SMSettings.FlowRate = GUILayout.HorizontalSlider((float)SMSettings.FlowRate, (float)SMSettings.MinFlowRate, (float)SMSettings.MaxFlowRate, GUILayout.Width(240), GUILayout.Height(20)); _label = SMSettings.MaxFlowRate.ToString(CultureInfo.InvariantCulture); //_toolTip = "Slide control to change the Resource Flow Rate shown above."; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_024"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(40), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); // Min Flow Rate for Slider GUILayout.BeginHorizontal(); GUILayout.Space(30); //_label = " - Min Flow Rate:"; //_toolTip = "Sets the lower limit (left side) of the Flow rate Slider range."; _label = $" - {SmUtils.SmTags["#smloc_settings_realism_027"]}:"; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_025"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(130), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } strMinFlowRate = GUILayout.TextField(strMinFlowRate, 20, GUILayout.Height(20), GUILayout.Width(80)); //_label = "Units/Sec"; //_toolTip = "Sets the lower limit (left side) of the Flow rate Slider range."; _label = SmUtils.SmTags["#smloc_settings_realism_026"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_025"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(80), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (float.TryParse(strMinFlowRate, out newRate)) { SMSettings.MinFlowRate = (int)newRate; } // Max Flow Rate for Slider GUILayout.BeginHorizontal(); GUILayout.Space(30); //_label = " - Max Flow Rate:"; //_toolTip = "Sets the upper limit (right side) of the Flow rate Slider range."; _label = $" - {SmUtils.SmTags["#smloc_settings_realism_028"]}:"; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_026"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(130), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } strMaxFlowRate = GUILayout.TextField(strMaxFlowRate, 20, GUILayout.Height(20), GUILayout.Width(80)); //_label = "Units/Sec"; //_toolTip = "Sets the upper limit (right side) of the Flow rate Slider range."; _label = SmUtils.SmTags["#smloc_settings_realism_026"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_026"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(80), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (float.TryParse(strMaxFlowRate, out newRate)) { SMSettings.MaxFlowRate = (int)newRate; } // Max Flow Time GUILayout.BeginHorizontal(); GUILayout.Space(30); //_label = " - Max Flow Time:"; //_toolTip = "Sets the maximum duration (in sec) of a resource transfer."; //_toolTip += "\r\nWorks in conjunction with the Flow rate. if time it would take"; //_toolTip += "\r\n to move a resource exceeds this number, this number will be used"; //_toolTip += "\r\n to calculate an adjusted flow rate."; //_toolTip += "\r\n(protects you from long Xfers)"; _label = $" - {SmUtils.SmTags["#smloc_settings_realism_029"]}:"; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_027"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(130), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } strMaxFlowTime = GUILayout.TextField(strMaxFlowTime, 20, GUILayout.Height(20), GUILayout.Width(80)); //_label = "Sec"; //_toolTip = "Sets the maximum duration (in sec) of a resource transfer."; //_toolTip += "\r\nWorks in conjunction with the Flow rate. if time it would take"; //_toolTip += "\r\n to move a resource exceeds this number, this number will be used"; //_toolTip += "\r\n to calculate an adjusted flow rate."; //_toolTip += "\r\n(protects you from long Xfers)"; _label = SmUtils.SmTags["#smloc_settings_realism_030"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_027"]; _guiLabel = new GUIContent(_label, _toolTip); GUILayout.Label(_guiLabel, GUILayout.Width(80), GUILayout.Height(20)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUILayout.EndHorizontal(); if (float.TryParse(strMaxFlowTime, out newRate)) { SMSettings.MaxFlowTimeSec = (int)newRate; } // reset gui.enabled to default GUI.enabled = true; GUILayout.Label("____________________________________________________________________________________________", SMStyle.LabelStyleHardRule, GUILayout.Height(10), GUILayout.Width(guiRuleWidth)); // LockSettings Mode GUI.enabled = isEnabled; //_label = "Lock Realism Settings (If set ON, disable in config file)"; //_toolTip = "Locks the settings in this section so they cannot be altered in game."; //_toolTip += "\r\nTo turn off Locking you MUST edit the SMSettings.dat file."; _label = SmUtils.SmTags["#smloc_settings_realism_031"]; _toolTip = SmUtils.SmTags["#smloc_settings_realism_tt_028"]; _guiLabel = new GUIContent(_label, _toolTip); SMSettings.LockSettings = GUILayout.Toggle(SMSettings.LockSettings, _guiLabel, GUILayout.Width(guiToggleWidth)); _rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && _canShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(_rect, GUI.tooltip, ref ToolTipActive, scrollX); } GUI.enabled = true; GUILayout.Label("____________________________________________________________________________________________", SMStyle.LabelStyleHardRule, GUILayout.Height(10), GUILayout.Width(guiRuleWidth)); }
internal static void Display(int windowId) { Title = string.Format("{0} {1} - {2}", SMUtils.Localize("#smloc_manifest_002"), SMSettings.CurVersion, SMAddon.SmVessel.Vessel.vesselName); // set input locks when mouseover window... //_inputLocked = GuiUtils.PreventClickthrough(ShowWindow, Position, _inputLocked); // Reset Tooltip active flag... ToolTipActive = false; //GUIContent label = new GUIContent("", "Close Window"); GUIContent label = new GUIContent("", SMUtils.Localize("#smloc_window_tt_001")); if (SMConditions.IsTransferInProgress()) { //label = new GUIContent("", "Action in progress. Cannot close window"); label = new GUIContent("", SMUtils.Localize("#smloc_window_tt_002")); GUI.enabled = false; } Rect rect = new Rect(Position.width - 20, 4, 16, 16); if (GUI.Button(rect, label)) { SMAddon.OnSmButtonClicked(); ToolTip = ""; SMHighlighter.Update_Highlighter(); } if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, 10); } GUI.enabled = true; try { GUILayout.BeginVertical(); _smScrollViewerPosition = GUILayout.BeginScrollView(_smScrollViewerPosition, SMStyle.ScrollStyle, GUILayout.Height(100), GUILayout.Width(300)); GUILayout.BeginVertical(); // Prelaunch (landed) Gui if (SMConditions.IsInPreflight()) { PreLaunchGui(); } // Now the Resource Buttons ResourceButtonsList(); GUILayout.EndVertical(); GUILayout.EndScrollView(); //string resLabel = "No Resource Selected"; string resLabel = SMUtils.Localize("#smloc_manifest_003"); if (SMAddon.SmVessel.SelectedResources.Count == 1) { resLabel = SMAddon.SmVessel.SelectedResources[0]; } else if (SMAddon.SmVessel.SelectedResources.Count == 2) { //resLabel = "Multiple Resources selected"; resLabel = SMUtils.Localize("#smloc_manifest_004"); } GUILayout.Label(string.Format("{0}", resLabel), GUILayout.Width(300), GUILayout.Height(20)); // Resource Details List Viewer ResourceDetailsViewer(); // Window toggle Button List WindowToggleButtons(); GUILayout.EndVertical(); GUI.DragWindow(new Rect(0, 0, Screen.width, 30)); SMAddon.RepositionWindow(ref Position); } catch (Exception ex) { if (!SMAddon.FrameErrTripped) { SMUtils.LogMessage( string.Format(" in WindowManifest.Display. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); SMAddon.FrameErrTripped = true; } } }
private static void DisplayRosterListViewer() { try { GUILayout.BeginVertical(); // Roster List Header... GUILayout.BeginHorizontal(); //GUILayout.Label("", GUILayout.Width(5)); GUILayout.Label(SMUtils.Localize("#smloc_roster_016"), GUILayout.Width(140)); // "Name" GUILayout.Label(SMUtils.Localize("#smloc_roster_017"), GUILayout.Width(50)); // "Gender" GUILayout.Label(SMUtils.Localize("#smloc_roster_005"), GUILayout.Width(70)); // "Profession" GUILayout.Label(SMUtils.Localize("#smloc_roster_018"), GUILayout.Width(30)); // "Skill" GUILayout.Label(SMUtils.Localize("#smloc_roster_019"), GUILayout.Width(220)); // "Status" GUILayout.Label(SMUtils.Localize("#smloc_roster_020"), GUILayout.Width(55)); // "Edit" GUILayout.Label(SMUtils.Localize("#smloc_roster_021"), GUILayout.Width(65)); // "Action" GUILayout.EndHorizontal(); _scrollViewerPosition = GUILayout.BeginScrollView(_scrollViewerPosition, SMStyle.ScrollStyle, GUILayout.Height(230), GUILayout.Width(680)); // vars for acton to occurs after button press bool isAction = false; Part actionPart = null; string actionText = ""; ProtoCrewMember actionKerbal = null; List <ProtoCrewMember> .Enumerator kerbals = RosterList.GetEnumerator(); while (kerbals.MoveNext()) { if (kerbals.Current == null) { continue; } if (!CanDisplayKerbal(kerbals.Current)) { continue; } GUIStyle labelStyle; if (kerbals.Current.rosterStatus == ProtoCrewMember.RosterStatus.Dead || kerbals.Current.rosterStatus == ProtoCrewMember.RosterStatus.Missing) { labelStyle = SMStyle.LabelStyleRed; } else if (kerbals.Current.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) { labelStyle = SMStyle.LabelStyleYellow; } else { labelStyle = SMStyle.LabelStyle; } // What vessel is this Kerbal Assigned to? string rosterDetails = ""; if (kerbals.Current.rosterStatus == ProtoCrewMember.RosterStatus.Assigned) { List <Vessel> .Enumerator theseVessels = FlightGlobals.Vessels.GetEnumerator(); while (theseVessels.MoveNext()) { if (theseVessels.Current == null) { continue; } List <ProtoCrewMember> crew = theseVessels.Current.GetVesselCrew(); if (crew.Any(crewMember => crewMember == kerbals.Current)) { rosterDetails = string.Format("{0} - {1}", SMUtils.Localize("#smloc_roster_011"), theseVessels.Current.GetName().Replace("(unloaded)", "")); // "Assigned" } } theseVessels.Dispose(); } else if (InstalledMods.IsDfInstalled && DFWrapper.APIReady && kerbals.Current.type == ProtoCrewMember.KerbalType.Unowned) { // This kerbal could be frozen. Lets find out... rosterDetails = GetFrozenKerbalDetails(kerbals.Current); labelStyle = SMStyle.LabelStyleCyan; } else { // Since the kerbal has no vessel assignment, lets show what their status... rosterDetails = kerbals.Current.rosterStatus.ToString(); } string buttonText; string buttonToolTip; GUILayout.BeginHorizontal(); GUILayout.Label(kerbals.Current.name, labelStyle, GUILayout.Width(140), GUILayout.Height(20)); GUILayout.Label(kerbals.Current.gender.ToString(), labelStyle, GUILayout.Width(50)); GUILayout.Label(kerbals.Current.experienceTrait.Title, labelStyle, GUILayout.Width(70)); GUILayout.Label(kerbals.Current.experienceLevel.ToString(), labelStyle, GUILayout.Width(30)); GUILayout.Label(rosterDetails, labelStyle, GUILayout.Width(215)); SetupEditButton(kerbals.Current, out buttonText, out buttonToolTip); if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), GUILayout.Width(55), GUILayout.Height(20), GUILayout.Height(20))) { if (SelectedKerbal == null || SelectedKerbal.Kerbal != kerbals.Current) { SelectedKerbal = new ModKerbal(kerbals.Current, false); SetProfessionFlag(); } else { SelectedKerbal = null; } } Rect rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect, GUI.tooltip, ref ToolTipActive, XOffset); } // Setup buttons with gui state, button text and tooltip. SetupActionButton(kerbals.Current, out buttonText, out buttonToolTip); if (GUILayout.Button(new GUIContent(buttonText, buttonToolTip), GUILayout.Width(65), GUILayout.Height(20))) { isAction = true; actionKerbal = kerbals.Current; actionText = buttonText; if (actionText == SMUtils.Localize("#smloc_roster_022")) // "Remove" { actionPart = SMAddon.SmVessel.FindPartByKerbal(kerbals.Current); } } Rect rect2 = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && ShowToolTips) { ToolTip = SMToolTips.SetActiveToolTip(rect2, GUI.tooltip, ref ToolTipActive, XOffset); } GUILayout.EndHorizontal(); GUI.enabled = true; } kerbals.Dispose(); GUILayout.EndVertical(); GUILayout.EndScrollView(); // perform action from button press. if (!isAction) { return; } if (actionText == SMUtils.Localize("#smloc_roster_022")) // "Remove" { TransferCrew.RemoveCrewMember(actionKerbal, actionPart); } else if (actionText == SMUtils.Localize("#smloc_roster_023")) // "Add" { TransferCrew.AddCrewMember(actionKerbal, SMAddon.SmVessel.SelectedPartsSource[0]); } else if (actionText == SMUtils.Localize("#smloc_roster_024")) // "Respawn" { RespawnKerbal(actionKerbal); } else if (actionText == SMUtils.Localize("#smloc_roster_025")) // "Thaw" { ThawKerbal(actionKerbal.name); } else if (actionText == SMUtils.Localize("#smloc_roster_026"))// "Freeze" { FreezeKerbal(actionKerbal); } SMAddon.FireEventTriggers(); } catch (Exception ex) { if (!SMAddon.FrameErrTripped) { SMUtils.LogMessage(string.Format(" in RosterListViewer. Error: {0} \r\n\r\n{1}", ex.Message, ex.StackTrace), SMUtils.LogType.Error, true); } } }