Example #1
0
 /// <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);
 }
Example #2
0
 /// <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));
 }
Example #3
0
 /// <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);
 }
Example #4
0
        /// <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;
            }
        }
Example #5
0
        /// <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);
            }
        }
Example #6
0
        /// <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;
                }
            }
        }
Example #7
0
        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)));
        }
Example #8
0
        /// <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();
        }
Example #9
0
        /// <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();
        }
Example #10
0
        /// <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();
                });
            }
        }
Example #13
0
        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);
        }