private static void VesselTransferViewer(List<string> SelectedResources, SMAddon.XFERDirection xferMode, Vector2 ViewerScrollPosition) { float scrollX = WindowTransfer.Position.x + (xferMode == SMAddon.XFERDirection.SourceToTarget ? 20 : 320); float scrollY = WindowTransfer.Position.y + 30 - ViewerScrollPosition.y; string step = "begin"; try { step = "begin button loop"; foreach (ModDockedVessel modDockedVessel in SMAddon.smController.DockedVessels) { // Build the part button title... step = "vessel button title"; string strDescription = GetResourceDescription(SelectedResources, modDockedVessel); // set the conditions for a button style change. int btnWidth = 265; if (!SMSettings.RealismMode) btnWidth = 180; // Set style based on viewer and toggled state. step = "Set style"; GUIStyle style = GetVesselButtonStyle(xferMode, modDockedVessel); GUILayout.BeginHorizontal(); // Now let's account for any target buttons already pressed. (sources and targets for resources cannot be the same) GUI.enabled = IsVesselSelectable(SelectedResources[0], xferMode, modDockedVessel); step = "Render part Buttons"; if (GUILayout.Button(string.Format("{0}", strDescription), style, GUILayout.Width(btnWidth), GUILayout.Height(20))) { VesselButtonToggled(xferMode, modDockedVessel); } Rect rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && rect.Contains(Event.current.mousePosition)) { SMHighlighter.IsMouseOver = true; SMHighlighter.MouseOverMode = xferMode; SMHighlighter.MouseOverRect = new Rect(scrollX + rect.x, scrollY + rect.y, rect.width, rect.height); SMHighlighter.MouseOverpart = null; SMHighlighter.MouseOverparts = modDockedVessel.VesselParts; } // Reset Button enabling. GUI.enabled = true; //step = "Render dump/fill buttons"; if (!SMSettings.RealismMode) { if (SelectedResources.Count > 1) GUI.enabled = (TransferResource.CalcResourceRemaining(modDockedVessel.VesselParts, SelectedResources[0]) > 0 || TransferResource.CalcResourceRemaining(modDockedVessel.VesselParts, SelectedResources[1]) > 0) ? true : false; else GUI.enabled = TransferResource.CalcResourceRemaining(modDockedVessel.VesselParts, SelectedResources[0]) > 0 ? true : false; var style1 = xferMode == SMAddon.XFERDirection.SourceToTarget ? SMStyle.ButtonSourceStyle : SMStyle.ButtonTargetStyle; if (GUILayout.Button(string.Format("{0}", "Dump"), style1, GUILayout.Width(45), GUILayout.Height(20))) { SMController.DumpPartsResource(modDockedVessel.VesselParts, SelectedResources[0]); if (SelectedResources.Count > 1) SMController.DumpPartsResource(modDockedVessel.VesselParts, SelectedResources[1]); } var style2 = xferMode == SMAddon.XFERDirection.SourceToTarget ? SMStyle.ButtonSourceStyle : SMStyle.ButtonTargetStyle; if (SelectedResources.Count > 1) GUI.enabled = TransferResource.CalcRemainingCapacity(modDockedVessel.VesselParts, SelectedResources[0]) > 0 || TransferResource.CalcRemainingCapacity(modDockedVessel.VesselParts, SelectedResources[0]) > 0 ? true : false; else GUI.enabled = TransferResource.CalcRemainingCapacity(modDockedVessel.VesselParts, SelectedResources[0]) > 0 ? true : false; if (GUILayout.Button(string.Format("{0}", "Fill"), style2, GUILayout.Width(30), GUILayout.Height(20))) { SMController.FillPartsResource(modDockedVessel.VesselParts, SelectedResources[0]); if (SelectedResources.Count > 1) SMController.FillPartsResource(modDockedVessel.VesselParts, SelectedResources[1]); } GUI.enabled = true; } GUILayout.EndHorizontal(); } } catch (Exception ex) { if (!SMAddon.frameErrTripped) { Utilities.LogMessage("Error in Windowtransfer.VesselTransferViewer (" + xferMode.ToString() + ") at step: " + step + ". Error: " + ex.ToString(), "Error", true); SMAddon.frameErrTripped = true; } } }
private static void VesselButtonToggled(SMAddon.XFERDirection xferMode, ModDockedVessel modVessel) { string step = "Vessel Button Toggled"; try { if (xferMode == SMAddon.XFERDirection.SourceToTarget) { // Now lets update the list... if (SMAddon.smController.SelectedVesselsSource.Contains(modVessel)) SMAddon.smController.SelectedVesselsSource.Remove(modVessel); else SMAddon.smController.SelectedVesselsSource.Add(modVessel); SMAddon.smController.SelectedPartsSource = SMAddon.smController.GetSelectedVesselsParts(SMAddon.smController.SelectedVesselsSource, SMAddon.smController.SelectedResources); } else { if (SMAddon.smController.SelectedVesselsTarget.Contains(modVessel)) SMAddon.smController.SelectedVesselsTarget.Remove(modVessel); else SMAddon.smController.SelectedVesselsTarget.Add(modVessel); SMAddon.smController.SelectedPartsTarget = SMAddon.smController.GetSelectedVesselsParts(SMAddon.smController.SelectedVesselsTarget, SMAddon.smController.SelectedResources); } WindowManifest.ReconcileSelectedXferParts(SMAddon.smController.SelectedResources); step = "Set Xfer amounts?"; foreach (TransferResource modResource in SMAddon.smController.ResourcesToXfer) { modResource.srcXferAmount = TransferResource.CalcMaxResourceXferAmt(SMAddon.smController.SelectedPartsSource, SMAddon.smController.SelectedPartsTarget, modResource.ResourceName); modResource.tgtXferAmount = TransferResource.CalcMaxResourceXferAmt(SMAddon.smController.SelectedPartsTarget, SMAddon.smController.SelectedPartsSource, modResource.ResourceName); } } catch (Exception ex) { if (!SMAddon.frameErrTripped) { Utilities.LogMessage("Error in WindowTransfer.VesselButtonToggled (" + xferMode.ToString() + ") at step: " + step + ". Error: " + ex.ToString(), "Error", true); SMAddon.frameErrTripped = true; } } }
private static void PartsTransferViewer(List<string> SelectedResources, SMAddon.XFERDirection xferMode, Vector2 ViewerScrollPosition) { float scrollX = WindowTransfer.Position.x + (xferMode == SMAddon.XFERDirection.SourceToTarget ? 20 : 320); float scrollY = WindowTransfer.Position.y + 30 - ViewerScrollPosition.y; string step = "begin"; try { step = "begin button loop"; foreach (Part part in SMAddon.smController.SelectedResourcesParts) { // Build the part button title... step = "part button title"; string strDescription = GetResourceDescription(SelectedResources, part); // set the conditions for a button style change. int btnWidth = 270; if (!SMSettings.RealismMode && !SelectedResources.Contains("Science")) btnWidth = 190; // Set style based on viewer and toggled state. step = "Set style"; GUIStyle style = GetPartButtonStyle(xferMode, part); GUILayout.BeginHorizontal(); // Now let's account for any target buttons already pressed. (sources and targets for resources cannot be the same) GUI.enabled = IsPartSelectable(SelectedResources[0], xferMode, part); step = "Render part Buttons"; if (GUILayout.Button(string.Format("{0}", strDescription), style, GUILayout.Width(btnWidth), GUILayout.Height(20))) { PartButtonToggled(xferMode, part); } Rect rect = GUILayoutUtility.GetLastRect(); if (Event.current.type == EventType.Repaint && rect.Contains(Event.current.mousePosition)) { SMHighlighter.IsMouseOver = true; SMHighlighter.MouseOverMode = xferMode; SMHighlighter.MouseOverRect = new Rect(scrollX + rect.x, scrollY + rect.y, rect.width, rect.height); SMHighlighter.MouseOverpart = part; } // Reset Button enabling. GUI.enabled = true; step = "Render dump/fill buttons"; if (!SMSettings.RealismMode && SelectedResources[0] != "Science") { if (SelectedResources[0] == "Crew") GUI.enabled = part.protoModuleCrew.Count > 0; else if (SelectedResources.Count > 1) GUI.enabled = (part.Resources[SelectedResources[0]].amount > 0 || part.Resources[SelectedResources[1]].amount > 0) ? true : false; else GUI.enabled = part.Resources[SelectedResources[0]].amount > 0 ? true : false; var style1 = xferMode == SMAddon.XFERDirection.SourceToTarget ? SMStyle.ButtonSourceStyle : SMStyle.ButtonTargetStyle; if (GUILayout.Button(string.Format("{0}", "Dump"), style1, GUILayout.Width(45), GUILayout.Height(20))) { if (SelectedResources[0] == "Crew") SMController.DumpPartCrew(part); else { SMController.DumpPartResource(part, SelectedResources[0]); if (SelectedResources.Count > 1) SMController.DumpPartResource(part, SelectedResources[1]); } } var style2 = xferMode == SMAddon.XFERDirection.SourceToTarget ? SMStyle.ButtonSourceStyle : SMStyle.ButtonTargetStyle; if (SelectedResources[0] == "Crew") GUI.enabled = part.protoModuleCrew.Count < part.CrewCapacity; else if (SelectedResources.Count > 1) GUI.enabled = part.Resources[SelectedResources[0]].amount < part.Resources[SelectedResources[0]].maxAmount || part.Resources[SelectedResources[1]].amount < part.Resources[SelectedResources[1]].maxAmount ? true : false; else GUI.enabled = part.Resources[SelectedResources[0]].amount < part.Resources[SelectedResources[0]].maxAmount ? true : false; if (GUILayout.Button(string.Format("{0}", "Fill"), style2, GUILayout.Width(30), GUILayout.Height(20))) { if (SelectedResources[0] == "Crew") SMController.FillPartCrew(part); SMController.FillPartResource(part, SelectedResources[0]); if (SelectedResources.Count > 1) SMController.FillPartResource(part, SelectedResources[1]); } GUI.enabled = true; } GUILayout.EndHorizontal(); } } catch (Exception ex) { if (!SMAddon.frameErrTripped) { Utilities.LogMessage("Error in Windowtransfer.PartsTransferViewer (" + xferMode.ToString() + ") at step: " + step + ". Error: " + ex.ToString(), "Error", true); SMAddon.frameErrTripped = true; } } }
private static void PartButtonToggled(SMAddon.XFERDirection xferMode, Part part) { string step = "Part Button Toggled"; try { if (!SMAddon.smController.CrewTransfer.CrewXferActive && !TransferResource.ResourceXferActive) { if (xferMode == SMAddon.XFERDirection.SourceToTarget) { // Now lets update the list... if (SMAddon.smController.SelectedPartsSource.Contains(part)) { SMAddon.smController.SelectedPartsSource.Remove(part); } else { if (SMAddon.smController.SelectedResources.Contains("Crew") || SMAddon.smController.SelectedResources.Contains("Science")) SMAddon.smController.SelectedPartsSource.Clear(); SMAddon.smController.SelectedPartsSource.Add(part); } if (SMAddon.smController.SelectedResources.Contains("Crew") && SMSettings.EnableCLS) { SMAddon.UpdateCLSSpaces(); } SMAddon.smController.SelectedModuleSource = null; WindowTransfer._ScienceModulesSource = null; } else { if (SMAddon.smController.SelectedPartsTarget.Contains(part)) { SMAddon.smController.SelectedPartsTarget.Remove(part); } else { if (SMAddon.smController.SelectedResources.Contains("Crew") || SMAddon.smController.SelectedResources.Contains("Science")) SMAddon.smController.SelectedPartsTarget.Clear(); SMAddon.smController.SelectedPartsTarget.Add(part); } SMAddon.smController.SelectedModuleTarget = null; } step = "Set Xfer amounts?"; if (!SMAddon.smController.SelectedResources.Contains("Crew") && !SMAddon.smController.SelectedResources.Contains("Science")) { step = "Set Xfer amounts = yes"; foreach (TransferResource modResource in SMAddon.smController.ResourcesToXfer) { modResource.srcXferAmount = TransferResource.CalcMaxResourceXferAmt(SMAddon.smController.SelectedPartsSource, SMAddon.smController.SelectedPartsTarget, modResource.ResourceName); modResource.tgtXferAmount = TransferResource.CalcMaxResourceXferAmt(SMAddon.smController.SelectedPartsTarget, SMAddon.smController.SelectedPartsSource, modResource.ResourceName); } } } } catch (Exception ex) { if (!SMAddon.frameErrTripped) { Utilities.LogMessage("Error in WindowTransfer.PartButtonToggled (" + xferMode.ToString() + ") at step: " + step + ". Error: " + ex.ToString(), "Error", true); SMAddon.frameErrTripped = true; } } }