private void btnMoveDownHead_Click(object sender, EventArgs e)
        {
            if (lstHead.SelectedIndex >= 0 && lstHead.SelectedIndex < lstHead.Items.Count - 1)
            {
                PartHead HeadPath = ListHead[lstHead.SelectedIndex];
                string   Head     = (string)lstHead.Items[lstHead.SelectedIndex];
                int      Index    = lstHead.SelectedIndex + 1;

                ListHead.RemoveAt(lstHead.SelectedIndex);
                lstHead.Items.RemoveAt(lstHead.SelectedIndex);
                //Selected Index is now -1.
                ListHead.Insert(Index, HeadPath);
                lstHead.Items.Insert(Index, Head);

                lstHead.SelectedIndex = Index;

                //Update the stats if the item was at position 0.
                if (Index == 1)
                {
                    UpdatePartBoosts();
                }
            }
        }
        private void btnMoveUpHead_Click(object sender, EventArgs e)
        {
            if (lstHead.SelectedIndex > 0)
            {
                PartHead HeadPath = ListHead[lstHead.SelectedIndex];
                string   Head     = (string)lstHead.Items[lstHead.SelectedIndex];
                int      Index    = lstHead.SelectedIndex - 1;

                ListHead.RemoveAt(lstHead.SelectedIndex);
                lstHead.Items.RemoveAt(lstHead.SelectedIndex);
                //Selected Index is now -1.
                ListHead.Insert(Index, HeadPath);
                lstHead.Items.Insert(Index, Head);

                lstHead.SelectedIndex = Index;

                //Update the stats if there's a new item at position 0.
                if (Index == 0)
                {
                    UpdatePartBoosts();
                }
            }
        }
        private void UpdatePartBoosts()
        {
            Int32 BaseHP       = 0;
            Int32 BaseEN       = 0;
            Int32 BaseArmor    = 0;
            Int32 BaseMobility = 0;
            float BaseMovement = 0;

            Int32 MEL = 0;
            Int32 RNG = 0;
            Int32 DEF = 0;
            Int32 EVA = 0;
            Int32 HIT = 0;

            #region Head

            if (ListHead.Count > 0 && lstHead.SelectedIndex >= 0)
            {
                PartHead ActiveHead = ListHead[lstHead.SelectedIndex];

                BaseHP       += ActiveHead.HP;
                BaseEN       += ActiveHead.EN;
                BaseArmor    += ActiveHead.Armor;
                BaseMobility += ActiveHead.Mobility;
                BaseMovement += ActiveHead.Movement;

                MEL += ActiveHead.MEL;
                RNG += ActiveHead.RNG;
                DEF += ActiveHead.DEF;
                EVA += ActiveHead.EVA;
                HIT += ActiveHead.HIT;

                #region Antena

                if (ActiveHead.ListPartAntena.Count > 0)
                {
                    Part ActiveAntena = new Part(ListHead[lstHead.SelectedIndex].ListPartAntena[0], PartTypes.HeadAntena);

                    BaseHP       += ActiveAntena.BaseHP;
                    BaseEN       += ActiveAntena.BaseEN;
                    BaseArmor    += ActiveAntena.BaseArmor;
                    BaseMobility += ActiveAntena.BaseMobility;
                    BaseMovement += ActiveAntena.BaseMovement;

                    MEL += ActiveAntena.MEL;
                    RNG += ActiveAntena.RNG;
                    DEF += ActiveAntena.DEF;
                    EVA += ActiveAntena.EVA;
                    HIT += ActiveAntena.HIT;
                }

                #endregion

                #region Ears

                if (ActiveHead.ListPartEars.Count > 0)
                {
                    Part ActiveEars = new Part(ListHead[lstHead.SelectedIndex].ListPartEars[0], PartTypes.HeadEars);

                    BaseHP       += ActiveEars.BaseHP;
                    BaseEN       += ActiveEars.BaseEN;
                    BaseArmor    += ActiveEars.BaseArmor;
                    BaseMobility += ActiveEars.BaseMobility;
                    BaseMovement += ActiveEars.BaseMovement;

                    MEL += ActiveEars.MEL;
                    RNG += ActiveEars.RNG;
                    DEF += ActiveEars.DEF;
                    EVA += ActiveEars.EVA;
                    HIT += ActiveEars.HIT;
                }

                #endregion

                #region Eyes

                if (ActiveHead.ListPartEyes.Count > 0)
                {
                    Part ActiveEyes = new Part(ListHead[lstHead.SelectedIndex].ListPartEyes[0], PartTypes.HeadEyes);

                    BaseHP       += ActiveEyes.BaseHP;
                    BaseEN       += ActiveEyes.BaseEN;
                    BaseArmor    += ActiveEyes.BaseArmor;
                    BaseMobility += ActiveEyes.BaseMobility;
                    BaseMovement += ActiveEyes.BaseMovement;

                    MEL += ActiveEyes.MEL;
                    RNG += ActiveEyes.RNG;
                    DEF += ActiveEyes.DEF;
                    EVA += ActiveEyes.EVA;
                    HIT += ActiveEyes.HIT;
                }

                #endregion

                #region CPU

                if (ActiveHead.ListPartCPU.Count > 0)
                {
                    Part ActiveCPU = new Part(ListHead[lstHead.SelectedIndex].ListPartCPU[0], PartTypes.HeadCPU);

                    BaseHP       += ActiveCPU.BaseHP;
                    BaseEN       += ActiveCPU.BaseEN;
                    BaseArmor    += ActiveCPU.BaseArmor;
                    BaseMobility += ActiveCPU.BaseMobility;
                    BaseMovement += ActiveCPU.BaseMovement;

                    MEL += ActiveCPU.MEL;
                    RNG += ActiveCPU.RNG;
                    DEF += ActiveCPU.DEF;
                    EVA += ActiveCPU.EVA;
                    HIT += ActiveCPU.HIT;
                }

                #endregion
            }

            #endregion

            #region Torso

            if (ListTorso.Count > 0 && lstTorso.SelectedIndex >= 0)
            {
                PartTorso ActiveTorso = ListTorso[lstTorso.SelectedIndex];

                BaseHP       += ActiveTorso.HP;
                BaseEN       += ActiveTorso.EN;
                BaseArmor    += ActiveTorso.Armor;
                BaseMobility += ActiveTorso.Mobility;
                BaseMovement += ActiveTorso.Movement;

                MEL += ActiveTorso.MEL;
                RNG += ActiveTorso.RNG;
                DEF += ActiveTorso.DEF;
                EVA += ActiveTorso.EVA;
                HIT += ActiveTorso.HIT;

                #region Core

                if (ActiveTorso.ListPartCore.Count > 0)
                {
                    Part ActiveCore = new Part(ListTorso[lstTorso.SelectedIndex].ListPartCore[0], PartTypes.TorsoCore);

                    BaseHP       += ActiveCore.BaseHP;
                    BaseEN       += ActiveCore.BaseEN;
                    BaseArmor    += ActiveCore.BaseArmor;
                    BaseMobility += ActiveCore.BaseMobility;
                    BaseMovement += ActiveCore.BaseMovement;

                    MEL += ActiveCore.MEL;
                    RNG += ActiveCore.RNG;
                    DEF += ActiveCore.DEF;
                    EVA += ActiveCore.EVA;
                    HIT += ActiveCore.HIT;
                }

                #endregion

                #region Radiator

                if (ActiveTorso.ListPartRadiator.Count > 0)
                {
                    Part ActiveRadiator = new Part(ListTorso[lstTorso.SelectedIndex].ListPartRadiator[0], PartTypes.TorsoRadiator);

                    BaseHP       += ActiveRadiator.BaseHP;
                    BaseEN       += ActiveRadiator.BaseEN;
                    BaseArmor    += ActiveRadiator.BaseArmor;
                    BaseMobility += ActiveRadiator.BaseMobility;
                    BaseMovement += ActiveRadiator.BaseMovement;

                    MEL += ActiveRadiator.MEL;
                    RNG += ActiveRadiator.RNG;
                    DEF += ActiveRadiator.DEF;
                    EVA += ActiveRadiator.EVA;
                    HIT += ActiveRadiator.HIT;
                }

                #endregion

                #region Shell

                if (ActiveTorso.ListPartShell.Count > 0)
                {
                    Part ActiveShell = new Part(ListTorso[lstTorso.SelectedIndex].ListPartShell[0], PartTypes.Shell);

                    BaseHP       += ActiveShell.BaseHP;
                    BaseEN       += ActiveShell.BaseEN;
                    BaseArmor    += ActiveShell.BaseArmor;
                    BaseMobility += ActiveShell.BaseMobility;
                    BaseMovement += ActiveShell.BaseMovement;

                    MEL += ActiveShell.MEL;
                    RNG += ActiveShell.RNG;
                    DEF += ActiveShell.DEF;
                    EVA += ActiveShell.EVA;
                    HIT += ActiveShell.HIT;
                }

                #endregion
            }

            #endregion

            #region Left arm

            if (ListLeftArm.Count > 0 && lstLeftArm.SelectedIndex >= 0)
            {
                PartArm ActiveLeftArm = ListLeftArm[lstLeftArm.SelectedIndex];

                BaseHP       += ActiveLeftArm.HP;
                BaseEN       += ActiveLeftArm.EN;
                BaseArmor    += ActiveLeftArm.Armor;
                BaseMobility += ActiveLeftArm.Mobility;
                BaseMovement += ActiveLeftArm.Movement;

                MEL += ActiveLeftArm.MEL;
                RNG += ActiveLeftArm.RNG;
                DEF += ActiveLeftArm.DEF;
                EVA += ActiveLeftArm.EVA;
                HIT += ActiveLeftArm.HIT;

                #region Shell

                if (ActiveLeftArm.ListPartShell.Count > 0)
                {
                    Part ActiveShell = new Part(ListLeftArm[lstLeftArm.SelectedIndex].ListPartShell[0], PartTypes.Shell);

                    BaseHP       += ActiveShell.BaseHP;
                    BaseEN       += ActiveShell.BaseEN;
                    BaseArmor    += ActiveShell.BaseArmor;
                    BaseMobility += ActiveShell.BaseMobility;
                    BaseMovement += ActiveShell.BaseMovement;

                    MEL += ActiveShell.MEL;
                    RNG += ActiveShell.RNG;
                    DEF += ActiveShell.DEF;
                    EVA += ActiveShell.EVA;
                    HIT += ActiveShell.HIT;
                }

                #endregion

                #region Strength

                if (ActiveLeftArm.ListPartStrength.Count > 0)
                {
                    Part ActiveStrength = new Part(ListLeftArm[lstLeftArm.SelectedIndex].ListPartStrength[0], PartTypes.Strength);

                    BaseHP       += ActiveStrength.BaseHP;
                    BaseEN       += ActiveStrength.BaseEN;
                    BaseArmor    += ActiveStrength.BaseArmor;
                    BaseMobility += ActiveStrength.BaseMobility;
                    BaseMovement += ActiveStrength.BaseMovement;

                    MEL += ActiveStrength.MEL;
                    RNG += ActiveStrength.RNG;
                    DEF += ActiveStrength.DEF;
                    EVA += ActiveStrength.EVA;
                    HIT += ActiveStrength.HIT;
                }

                #endregion
            }

            #endregion

            #region Right arm

            if (ListRightArm.Count > 0 && lstRightArm.SelectedIndex >= 0)
            {
                PartArm ActiveRightArm = ListRightArm[lstRightArm.SelectedIndex];

                BaseHP       += ActiveRightArm.HP;
                BaseEN       += ActiveRightArm.EN;
                BaseArmor    += ActiveRightArm.Armor;
                BaseMobility += ActiveRightArm.Mobility;
                BaseMovement += ActiveRightArm.Movement;

                MEL += ActiveRightArm.MEL;
                RNG += ActiveRightArm.RNG;
                DEF += ActiveRightArm.DEF;
                EVA += ActiveRightArm.EVA;
                HIT += ActiveRightArm.HIT;

                #region Shell

                if (ActiveRightArm.ListPartShell.Count > 0)
                {
                    Part ActiveShell = new Part(ListRightArm[lstRightArm.SelectedIndex].ListPartShell[0], PartTypes.Shell);

                    BaseHP       += ActiveShell.BaseHP;
                    BaseEN       += ActiveShell.BaseEN;
                    BaseArmor    += ActiveShell.BaseArmor;
                    BaseMobility += ActiveShell.BaseMobility;
                    BaseMovement += ActiveShell.BaseMovement;

                    MEL += ActiveShell.MEL;
                    RNG += ActiveShell.RNG;
                    DEF += ActiveShell.DEF;
                    EVA += ActiveShell.EVA;
                    HIT += ActiveShell.HIT;
                }

                #endregion

                #region Strength

                if (ActiveRightArm.ListPartStrength.Count > 0)
                {
                    Part ActiveStrength = new Part(ListRightArm[lstRightArm.SelectedIndex].ListPartStrength[0], PartTypes.Strength);

                    BaseHP       += ActiveStrength.BaseHP;
                    BaseEN       += ActiveStrength.BaseEN;
                    BaseArmor    += ActiveStrength.BaseArmor;
                    BaseMobility += ActiveStrength.BaseMobility;
                    BaseMovement += ActiveStrength.BaseMovement;

                    MEL += ActiveStrength.MEL;
                    RNG += ActiveStrength.RNG;
                    DEF += ActiveStrength.DEF;
                    EVA += ActiveStrength.EVA;
                    HIT += ActiveStrength.HIT;
                }

                #endregion
            }

            #endregion

            #region Legs

            if (ListLegs.Count > 0 && lstLegs.SelectedIndex >= 0)
            {
                PartLegs ActiveLegs = ListLegs[lstLegs.SelectedIndex];

                BaseHP       += ActiveLegs.HP;
                BaseEN       += ActiveLegs.EN;
                BaseArmor    += ActiveLegs.Armor;
                BaseMobility += ActiveLegs.Mobility;
                BaseMovement += ActiveLegs.Movement;

                MEL += ActiveLegs.MEL;
                RNG += ActiveLegs.RNG;
                DEF += ActiveLegs.DEF;
                EVA += ActiveLegs.EVA;
                HIT += ActiveLegs.HIT;

                #region Shell

                if (ActiveLegs.ListPartShell.Count > 0)
                {
                    Part ActiveShell = new Part(ListLegs[lstLegs.SelectedIndex].ListPartShell[0], PartTypes.Shell);

                    BaseHP       += ActiveShell.BaseHP;
                    BaseEN       += ActiveShell.BaseEN;
                    BaseArmor    += ActiveShell.BaseArmor;
                    BaseMobility += ActiveShell.BaseMobility;
                    BaseMovement += ActiveShell.BaseMovement;

                    MEL += ActiveShell.MEL;
                    RNG += ActiveShell.RNG;
                    DEF += ActiveShell.DEF;
                    EVA += ActiveShell.EVA;
                    HIT += ActiveShell.HIT;
                }

                #endregion

                #region Strength

                if (ActiveLegs.ListPartStrength.Count > 0)
                {
                    Part ActiveStrength = new Part(ListLegs[lstLegs.SelectedIndex].ListPartStrength[0], PartTypes.Strength);

                    BaseHP       += ActiveStrength.BaseHP;
                    BaseEN       += ActiveStrength.BaseEN;
                    BaseArmor    += ActiveStrength.BaseArmor;
                    BaseMobility += ActiveStrength.BaseMobility;
                    BaseMovement += ActiveStrength.BaseMovement;

                    MEL += ActiveStrength.MEL;
                    RNG += ActiveStrength.RNG;
                    DEF += ActiveStrength.DEF;
                    EVA += ActiveStrength.EVA;
                    HIT += ActiveStrength.HIT;
                }

                #endregion
            }

            #endregion

            #region Label text

            #region Unit boosts

            lblBaseHPBoost.Text = BaseHP.ToString();
            if (BaseHP > 0)
            {
                lblBaseHPBoost.ForeColor = Color.Green;
            }
            else if (BaseHP < 0)
            {
                lblBaseHPBoost.ForeColor = Color.Red;
            }
            else
            {
                lblBaseHPBoost.ForeColor = Color.Black;
            }

            lblBaseENBoost.Text = BaseEN.ToString();
            if (BaseEN > 0)
            {
                lblBaseENBoost.ForeColor = Color.Green;
            }
            else if (BaseEN < 0)
            {
                lblBaseENBoost.ForeColor = Color.Red;
            }
            else
            {
                lblBaseENBoost.ForeColor = Color.Black;
            }

            lblBaseArmorBoost.Text = BaseArmor.ToString();
            if (BaseArmor > 0)
            {
                lblBaseArmorBoost.ForeColor = Color.Green;
            }
            else if (BaseArmor < 0)
            {
                lblBaseArmorBoost.ForeColor = Color.Red;
            }
            else
            {
                lblBaseArmorBoost.ForeColor = Color.Black;
            }

            lblBaseMobilityBoost.Text = BaseMobility.ToString();
            if (BaseMobility > 0)
            {
                lblBaseMobilityBoost.ForeColor = Color.Green;
            }
            else if (BaseMobility < 0)
            {
                lblBaseMobilityBoost.ForeColor = Color.Red;
            }
            else
            {
                lblBaseMobilityBoost.ForeColor = Color.Black;
            }

            lblBaseMovementBoost.Text = BaseMovement.ToString();
            if (BaseMovement > 0)
            {
                lblBaseMovementBoost.ForeColor = Color.Green;
            }
            else if (BaseMovement < 0)
            {
                lblBaseMovementBoost.ForeColor = Color.Red;
            }
            else
            {
                lblBaseMovementBoost.ForeColor = Color.Black;
            }

            #endregion

            #region Unit's Pilot stats boosts

            lblMELBoost.Text = MEL.ToString();
            if (MEL > 0)
            {
                lblMELBoost.ForeColor = Color.Green;
            }
            else if (MEL < 0)
            {
                lblMELBoost.ForeColor = Color.Red;
            }
            else
            {
                lblMELBoost.ForeColor = Color.Black;
            }

            lblRNGBoost.Text = RNG.ToString();
            if (RNG > 0)
            {
                lblRNGBoost.ForeColor = Color.Green;
            }
            else if (RNG < 0)
            {
                lblRNGBoost.ForeColor = Color.Red;
            }
            else
            {
                lblRNGBoost.ForeColor = Color.Black;
            }

            lblDEFBoost.Text = DEF.ToString();
            if (DEF > 0)
            {
                lblDEFBoost.ForeColor = Color.Green;
            }
            else if (DEF < 0)
            {
                lblDEFBoost.ForeColor = Color.Red;
            }
            else
            {
                lblDEFBoost.ForeColor = Color.Black;
            }

            lblEVABoost.Text = EVA.ToString();
            if (EVA > 0)
            {
                lblEVABoost.ForeColor = Color.Green;
            }
            else if (EVA < 0)
            {
                lblEVABoost.ForeColor = Color.Red;
            }
            else
            {
                lblEVABoost.ForeColor = Color.Black;
            }

            lblHITBoost.Text = HIT.ToString();
            if (HIT > 0)
            {
                lblHITBoost.ForeColor = Color.Green;
            }
            else if (HIT < 0)
            {
                lblHITBoost.ForeColor = Color.Red;
            }
            else
            {
                lblHITBoost.ForeColor = Color.Black;
            }

            #endregion

            #endregion
        }
        protected void ListMenuItemsSelected(List <string> Items)
        {
            if (Items == null)
            {
                return;
            }

            for (int I = 0; I < Items.Count; I++)
            {
                switch (ItemSelectionChoice)
                {
                case ItemSelectionChoices.Pilot:
                    Character NewPilot = new Character(Items[I], null, DicRequirement, DicEffect);
                    if (NewPilot != null)
                    {
                        if (lstPilots.Items.Contains(NewPilot.Name))
                        {
                            MessageBox.Show("This pilot is already listed.\r\n" + NewPilot.Name);
                            return;
                        }
                        ListPilot.Add(NewPilot);
                        lstPilots.Items.Add(Items[I]);
                    }
                    break;

                case ItemSelectionChoices.Head:
                    string   HeadName = Items[I].Substring(0, Items[I].Length - 5).Substring(27);
                    PartHead NewHead  = new PartHead(HeadName);
                    if (lstHead.Items.Contains(NewHead.FullName))
                    {
                        MessageBox.Show("This head is already listed.\r\n" + NewHead.FullName);
                        return;
                    }
                    ListHead.Add(NewHead);
                    lstHead.Items.Add(HeadName);
                    break;

                case ItemSelectionChoices.Torso:
                    string    TorsoName = Items[I].Substring(0, Items[I].Length - 5).Substring(28);
                    PartTorso NewTorso  = new PartTorso(TorsoName);
                    if (NewTorso != null)
                    {
                        if (lstTorso.Items.Contains(NewTorso.FullName))
                        {
                            MessageBox.Show("This torso is already listed.\r\n" + NewTorso.FullName);
                            return;
                        }
                        ListTorso.Add(NewTorso);
                        lstTorso.Items.Add(TorsoName);
                    }
                    break;

                case ItemSelectionChoices.LeftArm:
                    string  LeftArmName = Items[I].Substring(0, Items[I].Length - 5).Substring(26);
                    PartArm NewLeftArm  = new PartArm(LeftArmName);
                    if (NewLeftArm != null)
                    {
                        if (lstLeftArm.Items.Contains(NewLeftArm.FullName))
                        {
                            MessageBox.Show("This left arm is already listed.\r\n" + NewLeftArm.FullName);
                            return;
                        }
                        ListLeftArm.Add(NewLeftArm);
                        lstLeftArm.Items.Add(LeftArmName);
                    }
                    break;

                case ItemSelectionChoices.RightArm:
                    string  RightArmName = Items[I].Substring(0, Items[I].Length - 5).Substring(26);
                    PartArm NewRightArm  = new PartArm(RightArmName);
                    if (NewRightArm != null)
                    {
                        if (lstRightArm.Items.Contains(NewRightArm.FullName))
                        {
                            MessageBox.Show("This right arm is already listed.\r\n" + NewRightArm.FullName);
                            return;
                        }
                        ListRightArm.Add(NewRightArm);
                        lstRightArm.Items.Add(RightArmName);
                    }
                    break;

                case ItemSelectionChoices.Legs:
                    string   LegsName = Items[I].Substring(0, Items[I].Length - 5).Substring(27);
                    PartLegs NewLegs  = new PartLegs(LegsName);
                    if (NewLegs != null)
                    {
                        if (lstLegs.Items.Contains(NewLegs.FullName))
                        {
                            MessageBox.Show("This head is already listed.\r\n" + NewLegs.FullName);
                            return;
                        }
                        ListLegs.Add(NewLegs);
                        lstLegs.Items.Add(LegsName);
                    }
                    break;
                }
            }
        }