public override void OnLoad(ConfigNode node) { beamConfigurationNodes = node.GetNodes("BeamConfiguration"); if (beamConfigurationNodes.Any()) { Debug.Log("[KSPI]: OnLoad Found " + beamConfigurationNodes.Count() + " BeamConfigurations"); } var inlineConfigurations = new List <BeamConfiguration>(); foreach (var beamConfigurationNode in beamConfigurationNodes) { var beamConfiguration = new BeamConfiguration { beamWaveName = beamConfigurationNode.GetValue("beamWaveName"), wavelength = ReadDouble(beamConfigurationNode, "wavelength", 1), atmosphericAbsorptionPercentage = ReadDouble(beamConfigurationNode, "atmosphericAbsorptionPercentage", 100), waterAbsorptionPercentage = ReadDouble(beamConfigurationNode, "waterAbsorptionPercentage", 100), techRequirement0 = beamConfigurationNode.HasValue("techRequirement0")? beamConfigurationNode.GetValue("techRequirement0"): null, techRequirement1 = beamConfigurationNode.HasValue("techRequirement1")? beamConfigurationNode.GetValue("techRequirement1"): null, techRequirement2 = beamConfigurationNode.HasValue("techRequirement2")? beamConfigurationNode.GetValue("techRequirement2"): null, techRequirement3 = beamConfigurationNode.HasValue("techRequirement3")? beamConfigurationNode.GetValue("techRequirement3"): null, efficiencyPercentage0 = beamConfigurationNode.HasValue("efficiencyPercentage0")? double.Parse(beamConfigurationNode.GetValue("efficiencyPercentage0")): 0, efficiencyPercentage1 = beamConfigurationNode.HasValue("efficiencyPercentage1")? double.Parse(beamConfigurationNode.GetValue("efficiencyPercentage1")): 0, efficiencyPercentage2 = beamConfigurationNode.HasValue("efficiencyPercentage2")? double.Parse(beamConfigurationNode.GetValue("efficiencyPercentage2")): 0, efficiencyPercentage3 = beamConfigurationNode.HasValue("efficiencyPercentage3")? double.Parse(beamConfigurationNode.GetValue("efficiencyPercentage3")): 0 }; inlineConfigurations.Add(beamConfiguration); } _inlineConfigurations = inlineConfigurations.OrderByDescending(m => m.wavelength).ToList(); }
private void InitializeWavelengthSelector() { Debug.Log("[KSPI]: Setup Transmit Beams Configurations for " + part.partInfo.title); chooseField = Fields["selectedBeamConfiguration"]; chooseField.guiActive = CheatOptions.NonStrictAttachmentOrientation || (canSwitchWavelengthInFlight && BeamConfigurations.Count > 1); var chooseOptionEditor = chooseField.uiControlEditor as UI_ChooseOption; var chooseOptionFlight = chooseField.uiControlFlight as UI_ChooseOption; if (chooseOptionEditor == null) { return; } if (chooseOptionFlight == null) { return; } var names = BeamConfigurations.Select(m => m.beamWaveName).ToArray(); chooseOptionEditor.options = names; chooseOptionFlight.options = names; if (!string.IsNullOrEmpty(beamWaveName)) { activeConfiguration = BeamConfigurations.FirstOrDefault(m => String.Equals(m.beamWaveName, beamWaveName, StringComparison.CurrentCultureIgnoreCase)); if (activeConfiguration != null) { selectedBeamConfiguration = BeamConfigurations.IndexOf(activeConfiguration); wavelength = activeConfiguration.wavelength; return; } } if (wavelength != 0) { // find first wavelength with equal or shorter wavelength activeConfiguration = BeamConfigurations.FirstOrDefault(m => m.wavelength <= wavelength); if (activeConfiguration == null) { activeConfiguration = selectedBeamConfiguration < BeamConfigurations.Count ? BeamConfigurations[selectedBeamConfiguration] : BeamConfigurations.FirstOrDefault(); } if (activeConfiguration != null) { selectedBeamConfiguration = BeamConfigurations.IndexOf(activeConfiguration); } } UpdateFromGui(chooseField, selectedBeamConfiguration); // connect on change event chooseOptionEditor.onFieldChanged = UpdateFromGui; chooseOptionFlight.onFieldChanged = UpdateFromGui; }
void applyParamsToConfig(ConfigParameters theseParams) { BeamConfiguration thisConfig = GetComponent <BeamConfiguration>(); thisConfig.MembersFirst = theseParams.MembersFirst; thisConfig.MembersSecond = theseParams.MembersSecond; thisConfig.Joints = theseParams.Joints; thisConfig.PinIndices = theseParams.PinIndices; }
/// <summary> /// Called whenever chooseOption is changed by user /// </summary> /// <param name="field"></param> /// <param name="oldFieldValueObj"></param> private void UpdateFromGui(BaseField field, object oldFieldValueObj) { Debug.Log("[KSPI]: BeamGenerator UpdateFromGUI called"); if (!BeamConfigurations.Any()) { Debug.LogWarning("[KSPI]: BeamGenerator UpdateFromGUI no BeamConfigurations found"); return; } if (isLoaded == false) { LoadInitialConfiguration(); } else { if (selectedBeamConfiguration < BeamConfigurations.Count) { activeConfiguration = BeamConfigurations[selectedBeamConfiguration]; } else { Debug.LogWarning("[KSPI]: selectedBeamConfiguration < " + BeamConfigurations.Count + ", selecting last"); selectedBeamConfiguration = BeamConfigurations.Count - 1; activeConfiguration = BeamConfigurations.Last(); } } if (activeConfiguration == null) { Debug.Log("[KSPI]: UpdateFromGUI no activeConfiguration found"); return; } beamWaveName = activeConfiguration.beamWaveName; wavelength = activeConfiguration.wavelength; wavelengthText = WavelengthToText(wavelength); atmosphericAbsorptionPercentage = activeConfiguration.atmosphericAbsorptionPercentage; waterAbsorptionPercentage = activeConfiguration.waterAbsorptionPercentage; UpdateEfficiencyPercentage(); // synchronize with receiver; if (transmitter != null && transmitter.partReceiver != null) { Debug.Log("[KSPI]: Called SetActiveBandwidthConfigurationByWaveLength with wavelength " + wavelength); transmitter.partReceiver.SetActiveBandwidthConfigurationByWaveLength(wavelength); } //else //{ // Debug.Log("[KSPI]: No transmitter found "); //} }
private void LoadInitialConfiguration() { isLoaded = true; if (!string.IsNullOrEmpty(beamWaveName)) { activeConfiguration = BeamConfigurations.FirstOrDefault(m => String.Equals(m.beamWaveName, beamWaveName, StringComparison.CurrentCultureIgnoreCase)); if (activeConfiguration != null) { selectedBeamConfiguration = BeamConfigurations.IndexOf(activeConfiguration); wavelength = activeConfiguration.wavelength; return; } } var currentWavelength = wavelength != 0 ? wavelength : 1; activeConfiguration = BeamConfigurations.FirstOrDefault(); selectedBeamConfiguration = 0; if (BeamConfigurations.Count <= 1 || activeConfiguration == null) { return; } var lowestWavelengthDifference = Math.Abs(currentWavelength - activeConfiguration.wavelength); foreach (var currentConfig in BeamConfigurations) { var configWaveLengthDifference = Math.Abs(currentWavelength - currentConfig.wavelength); if (!(configWaveLengthDifference < lowestWavelengthDifference)) { continue; } activeConfiguration = currentConfig; lowestWavelengthDifference = configWaveLengthDifference; selectedBeamConfiguration = BeamConfigurations.IndexOf(currentConfig); } }