/// <summary> /// Whether or not this is an A.I.'s Home Node. /// </summary> public static bool IsHomeNode(this IHasMatrixAttributes objThis, Character objCharacter) { if (objThis == null || objCharacter == null) { return(false); } return(objCharacter.HomeNode == objThis); }
/// <summary> /// Get the total value of a Matrix attribute of this gear after children and Overclocker /// </summary> public static int GetTotalMatrixAttribute(this IHasMatrixAttributes objThis, string strAttributeName) { if (objThis == null) { return(0); } return(objThis.GetBaseMatrixAttribute(strAttributeName) + objThis.GetBonusMatrixAttribute(strAttributeName)); }
/// <summary> /// Whether or not this Commlink is active and counting towards the character's Matrix Initiative. /// </summary> public static bool IsActiveCommlink(this IHasMatrixAttributes objThis, Character objCharacter) { if (objThis == null || objCharacter == null || !objThis.IsCommlink) { return(false); } return(objCharacter.ActiveCommlink == objThis); }
/// <summary> /// Set whether or not this is an A.I.'s Home Node. /// </summary> public static void SetHomeNode(this IHasMatrixAttributes objThis, Character objCharacter, bool blnValue) { if (objThis == null || objCharacter == null) { return; } if (blnValue) { objCharacter.HomeNode = objThis; } else if (objCharacter.ActiveCommlink == objThis) { objCharacter.ActiveCommlink = null; } }
/// <summary> /// Gets a Matrix Attribute string based on its name /// </summary> /// <param name="strAttributeName">Name of the Matrix Attribute</param> /// <param name="objThis">Object whose Matrix Attribute to get.</param> /// <returns></returns> public static string GetMatrixAttributeString(this IHasMatrixAttributes objThis, string strAttributeName) { if (objThis == null) { return(string.Empty); } switch (strAttributeName) { case "Attack": return(objThis.Attack); case "Sleaze": return(objThis.Sleaze); case "Data Processing": return(objThis.DataProcessing); case "Firewall": return(objThis.Firewall); case "Mod Attack": return(objThis.ModAttack); case "Mod Sleaze": return(objThis.ModSleaze); case "Mod Data Processing": return(objThis.ModDataProcessing); case "Mod Firewall": return(objThis.ModFirewall); case "Device Rating": return(objThis.DeviceRating); case "Program Limit": return(objThis.ProgramLimit); default: return(string.Empty); } }
/// <summary> /// If this item has an attribute array, refresh it. /// </summary> /// <param name="objThis"></param> public static void RefreshMatrixAttributeArray(this IHasMatrixAttributes objThis) { if (objThis == null) { return; } if (!objThis.CanSwapAttributes) { return; } int intBaseAttack = objThis.GetBaseMatrixAttribute("Attack"); int intBaseSleaze = objThis.GetBaseMatrixAttribute("Sleaze"); int intBaseDP = objThis.GetBaseMatrixAttribute("Data Processing"); int intBaseFirewall = objThis.GetBaseMatrixAttribute("Firewall"); List <int> lstStatsArray = new List <int>(4) { intBaseAttack, intBaseSleaze, intBaseDP, intBaseFirewall }; lstStatsArray.Sort(); lstStatsArray.Reverse(); string[] strCyberdeckArray = objThis.AttributeArray.Split(','); foreach (IHasMatrixAttributes objChild in objThis.ChildrenWithMatrixAttributes) { string strLoopArrayText = objChild.ModAttributeArray; if (!string.IsNullOrEmpty(strLoopArrayText)) { string[] strLoopArray = strLoopArrayText.Split(','); for (int i = 0; i < 4; ++i) { strCyberdeckArray[i] += "+(" + strLoopArray[i] + ')'; } } } for (int i = 0; i < 4; ++i) { if (intBaseAttack == lstStatsArray[i]) { objThis.Attack = strCyberdeckArray[i]; lstStatsArray[i] = int.MinValue; break; } } for (int i = 0; i < 4; ++i) { if (intBaseSleaze == lstStatsArray[i]) { objThis.Sleaze = strCyberdeckArray[i]; lstStatsArray[i] = int.MinValue; break; } } for (int i = 0; i < 4; ++i) { if (intBaseDP == lstStatsArray[i]) { objThis.DataProcessing = strCyberdeckArray[i]; lstStatsArray[i] = int.MinValue; break; } } for (int i = 0; i < 4; ++i) { if (intBaseFirewall == lstStatsArray[i]) { objThis.Firewall = strCyberdeckArray[i]; break; } } }
public static bool ProcessMatrixAttributeCBOChange(this IHasMatrixAttributes objThis, Character objCharacter, ComboBox cboChangedAttributeCBO, ComboBox cboAttack, ComboBox cboSleaze, ComboBox cboDP, ComboBox cboFirewall) { if (objThis == null) { return(false); } if (objCharacter == null) { throw new ArgumentNullException(nameof(objCharacter)); } if (cboChangedAttributeCBO == null) { throw new ArgumentNullException(nameof(cboChangedAttributeCBO)); } if (cboAttack == null) { throw new ArgumentNullException(nameof(cboAttack)); } if (cboSleaze == null) { throw new ArgumentNullException(nameof(cboSleaze)); } if (cboDP == null) { throw new ArgumentNullException(nameof(cboDP)); } if (cboFirewall == null) { throw new ArgumentNullException(nameof(cboFirewall)); } string strTemp; Action <string> funcAttributePropertySetter; if (cboChangedAttributeCBO == cboAttack) { strTemp = objThis.Attack; funcAttributePropertySetter = (x => objThis.Attack = x); } else if (cboChangedAttributeCBO == cboSleaze) { strTemp = objThis.Sleaze; funcAttributePropertySetter = (x => objThis.Sleaze = x); } else if (cboChangedAttributeCBO == cboDP) { strTemp = objThis.DataProcessing; funcAttributePropertySetter = (x => objThis.DataProcessing = x); } else if (cboChangedAttributeCBO == cboFirewall) { strTemp = objThis.Firewall; funcAttributePropertySetter = (x => objThis.Firewall = x); } else { return(false); } int intCurrentIndex = cboChangedAttributeCBO.SelectedIndex; bool blnRefreshCharacter = false; // Find the combo with the same value as this one and change it to the missing value. if (cboChangedAttributeCBO != cboAttack && cboAttack.SelectedIndex == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Attack); objThis.Attack = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttributeCBO != cboSleaze && cboSleaze.SelectedIndex == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Sleaze); objThis.Sleaze = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttributeCBO != cboDP && cboDP.SelectedIndex == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.DataProcessing); objThis.DataProcessing = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttributeCBO != cboFirewall && cboFirewall.SelectedIndex == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Firewall); objThis.Firewall = strTemp; blnRefreshCharacter = true; } if (blnRefreshCharacter) { objThis.RefreshMatrixAttributeCBOs(cboAttack, cboSleaze, cboDP, cboFirewall); } return(blnRefreshCharacter && (objThis.IsActiveCommlink(objCharacter) || objThis.IsHomeNode(objCharacter))); }
/// <summary> /// Refreshes a set of ComboBoxes corresponding to Matrix attributes /// </summary> public static void RefreshMatrixAttributeCBOs(this IHasMatrixAttributes objThis, ComboBox cboAttack, ComboBox cboSleaze, ComboBox cboDP, ComboBox cboFirewall) { if (objThis == null) { return; } if (cboAttack == null) { throw new ArgumentNullException(nameof(cboAttack)); } if (cboSleaze == null) { throw new ArgumentNullException(nameof(cboSleaze)); } if (cboDP == null) { throw new ArgumentNullException(nameof(cboDP)); } if (cboFirewall == null) { throw new ArgumentNullException(nameof(cboFirewall)); } int intBaseAttack = objThis.GetBaseMatrixAttribute("Attack"); int intBaseSleaze = objThis.GetBaseMatrixAttribute("Sleaze"); int intBaseDP = objThis.GetBaseMatrixAttribute("Data Processing"); int intBaseFirewall = objThis.GetBaseMatrixAttribute("Firewall"); int intBonusAttack = objThis.GetBonusMatrixAttribute("Attack"); int intBonusSleaze = objThis.GetBonusMatrixAttribute("Sleaze"); int intBonusDP = objThis.GetBonusMatrixAttribute("Data Processing"); int intBonusFirewall = objThis.GetBonusMatrixAttribute("Firewall"); cboAttack.SuspendLayout(); cboSleaze.SuspendLayout(); cboDP.SuspendLayout(); cboFirewall.SuspendLayout(); cboAttack.BeginUpdate(); cboSleaze.BeginUpdate(); cboDP.BeginUpdate(); cboFirewall.BeginUpdate(); cboAttack.Enabled = false; cboAttack.BindingContext = new BindingContext(); cboAttack.DataSource = new List <string>(4) { (intBaseAttack + intBonusAttack).ToString(GlobalOptions.InvariantCultureInfo), (intBaseSleaze + intBonusAttack).ToString(GlobalOptions.InvariantCultureInfo), (intBaseDP + intBonusAttack).ToString(GlobalOptions.InvariantCultureInfo), (intBaseFirewall + intBonusAttack).ToString(GlobalOptions.InvariantCultureInfo) }; cboAttack.SelectedIndex = 0; cboAttack.Visible = true; cboAttack.Enabled = objThis.CanSwapAttributes; cboSleaze.Enabled = false; cboSleaze.BindingContext = new BindingContext(); cboSleaze.DataSource = new List <string>(4) { (intBaseAttack + intBonusSleaze).ToString(GlobalOptions.InvariantCultureInfo), (intBaseSleaze + intBonusSleaze).ToString(GlobalOptions.InvariantCultureInfo), (intBaseDP + intBonusSleaze).ToString(GlobalOptions.InvariantCultureInfo), (intBaseFirewall + intBonusSleaze).ToString(GlobalOptions.InvariantCultureInfo) }; cboSleaze.SelectedIndex = 1; cboSleaze.Visible = true; cboSleaze.Enabled = objThis.CanSwapAttributes; cboDP.Enabled = false; cboDP.BindingContext = new BindingContext(); cboDP.DataSource = new List <string>(4) { (intBaseAttack + intBonusDP).ToString(GlobalOptions.InvariantCultureInfo), (intBaseSleaze + intBonusDP).ToString(GlobalOptions.InvariantCultureInfo), (intBaseDP + intBonusDP).ToString(GlobalOptions.InvariantCultureInfo), (intBaseFirewall + intBonusDP).ToString(GlobalOptions.InvariantCultureInfo) }; cboDP.SelectedIndex = 2; cboDP.Visible = true; cboDP.Enabled = objThis.CanSwapAttributes; cboFirewall.Enabled = false; cboFirewall.BindingContext = new BindingContext(); cboFirewall.DataSource = new List <string>(4) { (intBaseAttack + intBonusFirewall).ToString(GlobalOptions.InvariantCultureInfo), (intBaseSleaze + intBonusFirewall).ToString(GlobalOptions.InvariantCultureInfo), (intBaseDP + intBonusFirewall).ToString(GlobalOptions.InvariantCultureInfo), (intBaseFirewall + intBonusFirewall).ToString(GlobalOptions.InvariantCultureInfo) }; cboFirewall.SelectedIndex = 3; cboFirewall.Visible = true; cboFirewall.Enabled = objThis.CanSwapAttributes; cboAttack.EndUpdate(); cboSleaze.EndUpdate(); cboDP.EndUpdate(); cboFirewall.EndUpdate(); cboAttack.ResumeLayout(); cboSleaze.ResumeLayout(); cboDP.ResumeLayout(); cboFirewall.ResumeLayout(); }
/// <summary> /// Refreshes a set of ComboBoxes corresponding to Matrix attributes /// </summary> public static void RefreshMatrixAttributeCBOs(this IHasMatrixAttributes objThis, ComboBox cboAttack, ComboBox cboSleaze, ComboBox cboDP, ComboBox cboFirewall) { if (objThis == null) { return; } int intBaseAttack = objThis.GetBaseMatrixAttribute("Attack"); int intBaseSleaze = objThis.GetBaseMatrixAttribute("Sleaze"); int intBaseDP = objThis.GetBaseMatrixAttribute("Data Processing"); int intBaseFirewall = objThis.GetBaseMatrixAttribute("Firewall"); int intBonusAttack = objThis.GetBonusMatrixAttribute("Attack"); int intBonusSleaze = objThis.GetBonusMatrixAttribute("Sleaze"); int intBonusDP = objThis.GetBonusMatrixAttribute("Data Processing"); int intBonusFirewall = objThis.GetBonusMatrixAttribute("Firewall"); cboAttack.BeginUpdate(); cboSleaze.BeginUpdate(); cboDP.BeginUpdate(); cboFirewall.BeginUpdate(); cboAttack.Enabled = false; cboAttack.BindingContext = new BindingContext(); cboAttack.ValueMember = "Value"; cboAttack.DisplayMember = "Name"; cboAttack.DataSource = new List <string>() { (intBaseAttack + intBonusAttack).ToString(), (intBaseSleaze + intBonusAttack).ToString(), (intBaseDP + intBonusAttack).ToString(), (intBaseFirewall + intBonusAttack).ToString() }; cboAttack.SelectedIndex = 0; cboAttack.Visible = true; cboAttack.Enabled = objThis.CanSwapAttributes; cboSleaze.Enabled = false; cboSleaze.BindingContext = new BindingContext(); cboSleaze.ValueMember = "Value"; cboSleaze.DisplayMember = "Name"; cboSleaze.DataSource = new List <string>() { (intBaseAttack + intBonusSleaze).ToString(), (intBaseSleaze + intBonusSleaze).ToString(), (intBaseDP + intBonusSleaze).ToString(), (intBaseFirewall + intBonusSleaze).ToString() }; cboSleaze.SelectedIndex = 1; cboSleaze.Visible = true; cboSleaze.Enabled = objThis.CanSwapAttributes; cboDP.Enabled = false; cboDP.BindingContext = new BindingContext(); cboDP.ValueMember = "Value"; cboDP.DisplayMember = "Name"; cboDP.DataSource = new List <string>() { (intBaseAttack + intBonusDP).ToString(), (intBaseSleaze + intBonusDP).ToString(), (intBaseDP + intBonusDP).ToString(), (intBaseFirewall + intBonusDP).ToString() }; cboDP.SelectedIndex = 2; cboDP.Visible = true; cboDP.Enabled = objThis.CanSwapAttributes; cboFirewall.Enabled = false; cboFirewall.BindingContext = new BindingContext(); cboFirewall.ValueMember = "Value"; cboFirewall.DisplayMember = "Name"; cboFirewall.DataSource = new List <string>() { (intBaseAttack + intBonusFirewall).ToString(), (intBaseSleaze + intBonusFirewall).ToString(), (intBaseDP + intBonusFirewall).ToString(), (intBaseFirewall + intBonusFirewall).ToString() }; cboFirewall.SelectedIndex = 3; cboFirewall.Visible = true; cboFirewall.Enabled = objThis.CanSwapAttributes; cboAttack.EndUpdate(); cboSleaze.EndUpdate(); cboDP.EndUpdate(); cboFirewall.EndUpdate(); }
/// <summary> /// If this item has an attribute array, refresh it. /// </summary> /// <param name="objThis"></param> public static void RefreshMatrixAttributeArray(this IHasMatrixAttributes objThis) { if (objThis == null) { return; } if (!objThis.CanSwapAttributes) { return; } int intBaseAttack = objThis.GetBaseMatrixAttribute("Attack"); int intBaseSleaze = objThis.GetBaseMatrixAttribute("Sleaze"); int intBaseDataProcessing = objThis.GetBaseMatrixAttribute("Data Processing"); int intBaseFirewall = objThis.GetBaseMatrixAttribute("Firewall"); List <int> lstStatsArray = new List <int>(4) { intBaseAttack, intBaseSleaze, intBaseDataProcessing, intBaseFirewall }; lstStatsArray.Sort(); lstStatsArray.Reverse(); string[] strCyberdeckArray = objThis.AttributeArray.Split(','); using (new FetchSafelyFromPool <StringBuilder>(Utils.StringBuilderPool, out StringBuilder sbdCyberdeckArray0)) using (new FetchSafelyFromPool <StringBuilder>(Utils.StringBuilderPool, out StringBuilder sbdCyberdeckArray1)) using (new FetchSafelyFromPool <StringBuilder>(Utils.StringBuilderPool, out StringBuilder sbdCyberdeckArray2)) using (new FetchSafelyFromPool <StringBuilder>(Utils.StringBuilderPool, out StringBuilder sbdCyberdeckArray3)) { sbdCyberdeckArray0.Append(strCyberdeckArray[0]); sbdCyberdeckArray1.Append(strCyberdeckArray[1]); sbdCyberdeckArray2.Append(strCyberdeckArray[2]); sbdCyberdeckArray3.Append(strCyberdeckArray[3]); StringBuilder[] asbdCyberdeckArray = { sbdCyberdeckArray0, sbdCyberdeckArray1, sbdCyberdeckArray2, sbdCyberdeckArray3 }; foreach (string strLoopArrayText in objThis.ChildrenWithMatrixAttributes.Select( x => x.ModAttributeArray)) { if (string.IsNullOrEmpty(strLoopArrayText)) { continue; } string[] strLoopArray = strLoopArrayText.Split(','); for (int i = 0; i < 4; ++i) { asbdCyberdeckArray[i].Append("+(").Append(strLoopArray[i]).Append(')'); } } for (int i = 0; i < 4; ++i) { if (intBaseAttack == lstStatsArray[i]) { objThis.Attack = asbdCyberdeckArray[i].ToString(); lstStatsArray[i] = int.MinValue; break; } } for (int i = 0; i < 4; ++i) { if (intBaseSleaze == lstStatsArray[i]) { objThis.Sleaze = asbdCyberdeckArray[i].ToString(); lstStatsArray[i] = int.MinValue; break; } } for (int i = 0; i < 4; ++i) { if (intBaseDataProcessing == lstStatsArray[i]) { objThis.DataProcessing = asbdCyberdeckArray[i].ToString(); lstStatsArray[i] = int.MinValue; break; } } for (int i = 0; i < 4; ++i) { if (intBaseFirewall == lstStatsArray[i]) { objThis.Firewall = asbdCyberdeckArray[i].ToString(); break; } } } }
public static async Task <bool> ProcessMatrixAttributeComboBoxChangeAsync(this IHasMatrixAttributes objThis, Character objCharacter, ComboBox cboChangedAttribute, ComboBox cboAttack, ComboBox cboSleaze, ComboBox cboDataProcessing, ComboBox cboFirewall) { if (objThis == null) { return(false); } if (objCharacter == null) { throw new ArgumentNullException(nameof(objCharacter)); } if (cboChangedAttribute == null) { throw new ArgumentNullException(nameof(cboChangedAttribute)); } if (cboAttack == null) { throw new ArgumentNullException(nameof(cboAttack)); } if (cboSleaze == null) { throw new ArgumentNullException(nameof(cboSleaze)); } if (cboDataProcessing == null) { throw new ArgumentNullException(nameof(cboDataProcessing)); } if (cboFirewall == null) { throw new ArgumentNullException(nameof(cboFirewall)); } string strTemp; Action <string> funcAttributePropertySetter; if (cboChangedAttribute == cboAttack) { strTemp = objThis.Attack; funcAttributePropertySetter = (x => objThis.Attack = x); } else if (cboChangedAttribute == cboSleaze) { strTemp = objThis.Sleaze; funcAttributePropertySetter = (x => objThis.Sleaze = x); } else if (cboChangedAttribute == cboDataProcessing) { strTemp = objThis.DataProcessing; funcAttributePropertySetter = (x => objThis.DataProcessing = x); } else if (cboChangedAttribute == cboFirewall) { strTemp = objThis.Firewall; funcAttributePropertySetter = (x => objThis.Firewall = x); } else { return(false); } int intCurrentIndex = await cboChangedAttribute.DoThreadSafeFuncAsync(x => x.SelectedIndex); bool blnRefreshCharacter = false; // Find the combo with the same value as this one and change it to the missing value. if (cboChangedAttribute != cboAttack && await cboAttack.DoThreadSafeFuncAsync(x => x.SelectedIndex) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Attack); objThis.Attack = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttribute != cboSleaze && await cboSleaze.DoThreadSafeFuncAsync(x => x.SelectedIndex) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Sleaze); objThis.Sleaze = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttribute != cboDataProcessing && await cboDataProcessing.DoThreadSafeFuncAsync(x => x.SelectedIndex) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.DataProcessing); objThis.DataProcessing = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttribute != cboFirewall && await cboFirewall.DoThreadSafeFuncAsync(x => x.SelectedIndex) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Firewall); objThis.Firewall = strTemp; blnRefreshCharacter = true; } if (blnRefreshCharacter) { await objThis.RefreshMatrixAttributeComboBoxesAsync(cboAttack, cboSleaze, cboDataProcessing, cboFirewall); } return(blnRefreshCharacter && (objThis.IsActiveCommlink(objCharacter) || objThis.IsHomeNode(objCharacter))); }
/// <summary> /// Refreshes a set of ComboBoxes corresponding to Matrix attributes /// </summary> public static async Task RefreshMatrixAttributeComboBoxesAsync(this IHasMatrixAttributes objThis, ComboBox cboAttack, ComboBox cboSleaze, ComboBox cboDataProcessing, ComboBox cboFirewall) { if (objThis == null) { return; } if (cboAttack == null) { throw new ArgumentNullException(nameof(cboAttack)); } if (cboSleaze == null) { throw new ArgumentNullException(nameof(cboSleaze)); } if (cboDataProcessing == null) { throw new ArgumentNullException(nameof(cboDataProcessing)); } if (cboFirewall == null) { throw new ArgumentNullException(nameof(cboFirewall)); } int intBaseAttack = objThis.GetBaseMatrixAttribute("Attack"); int intBaseSleaze = objThis.GetBaseMatrixAttribute("Sleaze"); int intBaseDataProcessing = objThis.GetBaseMatrixAttribute("Data Processing"); int intBaseFirewall = objThis.GetBaseMatrixAttribute("Firewall"); int intBonusAttack = objThis.GetBonusMatrixAttribute("Attack"); int intBonusSleaze = objThis.GetBonusMatrixAttribute("Sleaze"); int intBonusDataProcessing = objThis.GetBonusMatrixAttribute("Data Processing"); int intBonusFirewall = objThis.GetBonusMatrixAttribute("Firewall"); await cboAttack.DoThreadSafeAsync(x => { x.SuspendLayout(); x.BeginUpdate(); }); await cboSleaze.DoThreadSafeAsync(x => { x.SuspendLayout(); x.BeginUpdate(); }); await cboDataProcessing.DoThreadSafeAsync(x => { x.SuspendLayout(); x.BeginUpdate(); }); await cboFirewall.DoThreadSafeAsync(x => { x.SuspendLayout(); x.BeginUpdate(); }); try { await cboAttack.DoThreadSafeAsync(x => { x.Enabled = false; x.BindingContext = new BindingContext(); x.DataSource = new List <string>(4) { (intBaseAttack + intBonusAttack).ToString(GlobalSettings.InvariantCultureInfo), (intBaseSleaze + intBonusAttack).ToString(GlobalSettings.InvariantCultureInfo), (intBaseDataProcessing + intBonusAttack).ToString(GlobalSettings.InvariantCultureInfo), (intBaseFirewall + intBonusAttack).ToString(GlobalSettings.InvariantCultureInfo) }; x.SelectedIndex = 0; x.Visible = true; x.Enabled = objThis.CanSwapAttributes; }); await cboSleaze.DoThreadSafeAsync(x => { x.Enabled = false; x.BindingContext = new BindingContext(); x.DataSource = new List <string>(4) { (intBaseAttack + intBonusSleaze).ToString(GlobalSettings.InvariantCultureInfo), (intBaseSleaze + intBonusSleaze).ToString(GlobalSettings.InvariantCultureInfo), (intBaseDataProcessing + intBonusSleaze).ToString(GlobalSettings.InvariantCultureInfo), (intBaseFirewall + intBonusSleaze).ToString(GlobalSettings.InvariantCultureInfo) }; x.SelectedIndex = 1; x.Visible = true; x.Enabled = objThis.CanSwapAttributes; }); await cboDataProcessing.DoThreadSafeAsync(x => { x.Enabled = false; x.BindingContext = new BindingContext(); x.DataSource = new List <string>(4) { (intBaseAttack + intBonusDataProcessing).ToString(GlobalSettings.InvariantCultureInfo), (intBaseSleaze + intBonusDataProcessing).ToString(GlobalSettings.InvariantCultureInfo), (intBaseDataProcessing + intBonusDataProcessing).ToString(GlobalSettings.InvariantCultureInfo), (intBaseFirewall + intBonusDataProcessing).ToString(GlobalSettings.InvariantCultureInfo) }; x.SelectedIndex = 2; x.Visible = true; x.Enabled = objThis.CanSwapAttributes; }); await cboFirewall.DoThreadSafeAsync(x => { x.Enabled = false; x.BindingContext = new BindingContext(); x.DataSource = new List <string>(4) { (intBaseAttack + intBonusFirewall).ToString(GlobalSettings.InvariantCultureInfo), (intBaseSleaze + intBonusFirewall).ToString(GlobalSettings.InvariantCultureInfo), (intBaseDataProcessing + intBonusFirewall).ToString(GlobalSettings.InvariantCultureInfo), (intBaseFirewall + intBonusFirewall).ToString(GlobalSettings.InvariantCultureInfo) }; x.SelectedIndex = 3; x.Visible = true; x.Enabled = objThis.CanSwapAttributes; }); } finally { await cboAttack.DoThreadSafeAsync(x => { x.EndUpdate(); x.ResumeLayout(); }); await cboSleaze.DoThreadSafeAsync(x => { x.EndUpdate(); x.ResumeLayout(); }); await cboDataProcessing.DoThreadSafeAsync(x => { x.EndUpdate(); x.ResumeLayout(); }); await cboFirewall.DoThreadSafeAsync(x => { x.EndUpdate(); x.ResumeLayout(); }); } }
public static async Task <bool> ProcessMatrixAttributeComboBoxChangeAsync(this IHasMatrixAttributes objThis, Character objCharacter, ElasticComboBox cboChangedAttribute, ElasticComboBox cboAttack, ElasticComboBox cboSleaze, ElasticComboBox cboDataProcessing, ElasticComboBox cboFirewall, CancellationToken token = default) { token.ThrowIfCancellationRequested(); if (objThis == null) { return(false); } if (objCharacter == null) { throw new ArgumentNullException(nameof(objCharacter)); } if (cboChangedAttribute == null) { throw new ArgumentNullException(nameof(cboChangedAttribute)); } if (cboAttack == null) { throw new ArgumentNullException(nameof(cboAttack)); } if (cboSleaze == null) { throw new ArgumentNullException(nameof(cboSleaze)); } if (cboDataProcessing == null) { throw new ArgumentNullException(nameof(cboDataProcessing)); } if (cboFirewall == null) { throw new ArgumentNullException(nameof(cboFirewall)); } string strTemp; Action <string> funcAttributePropertySetter; if (cboChangedAttribute == cboAttack) { strTemp = objThis.Attack; funcAttributePropertySetter = (x => objThis.Attack = x); } else if (cboChangedAttribute == cboSleaze) { strTemp = objThis.Sleaze; funcAttributePropertySetter = (x => objThis.Sleaze = x); } else if (cboChangedAttribute == cboDataProcessing) { strTemp = objThis.DataProcessing; funcAttributePropertySetter = (x => objThis.DataProcessing = x); } else if (cboChangedAttribute == cboFirewall) { strTemp = objThis.Firewall; funcAttributePropertySetter = (x => objThis.Firewall = x); } else { return(false); } int intCurrentIndex = await cboChangedAttribute.DoThreadSafeFuncAsync(x => x.SelectedIndex, token); bool blnRefreshCharacter = false; bool blnDPChanged = cboChangedAttribute == cboDataProcessing; // Find the combo with the same value as this one and change it to the missing value. if (cboChangedAttribute != cboAttack && await cboAttack.DoThreadSafeFuncAsync(x => x.SelectedIndex, token) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Attack); objThis.Attack = strTemp; blnRefreshCharacter = true; } else if (cboChangedAttribute != cboSleaze && await cboSleaze.DoThreadSafeFuncAsync(x => x.SelectedIndex, token) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Sleaze); objThis.Sleaze = strTemp; blnRefreshCharacter = true; } else if (!blnDPChanged && await cboDataProcessing.DoThreadSafeFuncAsync(x => x.SelectedIndex, token) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.DataProcessing); objThis.DataProcessing = strTemp; blnRefreshCharacter = true; blnDPChanged = true; } else if (cboChangedAttribute != cboFirewall && await cboFirewall.DoThreadSafeFuncAsync(x => x.SelectedIndex, token) == intCurrentIndex) { funcAttributePropertySetter.Invoke(objThis.Firewall); objThis.Firewall = strTemp; blnRefreshCharacter = true; } if (blnRefreshCharacter) { await objThis.RefreshMatrixAttributeComboBoxesAsync(cboAttack, cboSleaze, cboDataProcessing, cboFirewall, token); if (objThis.IsActiveCommlink(objCharacter) || objThis.IsHomeNode(objCharacter)) { if (blnDPChanged) { if (objThis.IsActiveCommlink(objCharacter)) { if (objThis.IsHomeNode(objCharacter)) { objCharacter.OnMultiplePropertyChanged(nameof(Character.MatrixInitiativeValue), nameof(Character.MatrixInitiativeColdValue), nameof(Character.MatrixInitiativeHotValue)); } else { objCharacter.OnMultiplePropertyChanged(nameof(Character.MatrixInitiativeColdValue), nameof(Character.MatrixInitiativeHotValue)); } } else { objCharacter.OnPropertyChanged(nameof(Character.MatrixInitiativeValue)); } } return(true); } } return(false); }