コード例 #1
0
        private void DamageButton_Click(object sender, RoutedEventArgs e)
        {
            if (DamageAmountTextBox.Text.IsPositiveInteger())
            {
                DD4EDamageType damageFlag = DD4EDamageType.None;

                if (DamageTypeList.SelectedItems.Count < 1)
                {
                    damageFlag = DD4EDamageType.Unaspected;
                }
                else
                {
                    foreach (var flag in DamageTypeList.SelectedItems)
                    {
                        damageFlag |= (DD4EDamageType)flag;
                    }
                }

                var damage = Convert.ToInt32(DamageAmountTextBox.Text);

                Combatant.TakeDamage(damageFlag, damage);

                this.Close();
            }
            else
            {
                MessageBox.Show("Please input a positive integer", "Warning");
            }
        }
コード例 #2
0
        public AttackTargetWindow(ref DD4ECombatant target, DD4EDamageType damageType, IList <DD4EStatusEffect> statusEffects)
        {
            InitializeComponent();

            Target        = target;
            DamageType    = damageType;
            StatusEffects = statusEffects;

            DefenderNameLabel.Content = Target.Name;
        }
コード例 #3
0
        private void Attack_Click(object sender, RoutedEventArgs e)
        {
            if (DefenderList.SelectedItems.Count == 0)
            {
                MessageBox.Show("Please select targets for the attack.", "Warning");
                return;
            }

            //Create Damage Flag
            DD4EDamageType damageFlag = DD4EDamageType.None;

            if (DamageTypeList.SelectedItems.Count < 1)
            {
                damageFlag = DD4EDamageType.Unaspected;
            }
            else
            {
                foreach (var flag in DamageTypeList.SelectedItems)
                {
                    damageFlag |= (DD4EDamageType)flag;
                }
            }

            //Create List of Status Effects
            var statusEffectList = new List <DD4EStatusEffect>();

            foreach (var status in EffectList.SelectedItems)
            {
                var properStatus = status as DD4EStatusEffect;
                if (properStatus != null)
                {
                    statusEffectList.Add(properStatus);
                }
            }

            foreach (var target in DefenderList.SelectedItems)
            {
                var properTarget = (target as DD4ECombatant);
                if (properTarget != null)
                {
                    var attackWindow = new AttackTargetWindow(ref properTarget, damageFlag, statusEffectList);
                    attackWindow.Owner = this;
                    attackWindow.ShowDialog();
                }
            }

            this.Close();
        }
コード例 #4
0
        public void TakeDamage(DD4EDamageType damageType, int damage)
        {
            int incomingDamage = damage;

            // Find Vulnerability Amount
            var vulnerabilityModifier = 0;

            foreach (DD4EStatusEffect status in StatusEffects.FindAll(s => s.Type == DD4EStatusEffectType.Vulnerability))
            {
                var damageStatus = (status as DD4EDamageModifier);
                if (damageStatus != null)
                {
                    if ((damageStatus.DamageType & damageType) != DD4EDamageType.None)
                    {
                        vulnerabilityModifier = Math.Max(vulnerabilityModifier, damageStatus.DamageAmount);
                    }
                }
            }
            incomingDamage += vulnerabilityModifier;

            // Apply Resitances
            // 1) Build List of Resistance
            var            resistanceModifier = Int32.MaxValue;
            DD4EDamageType resistanceList     = DD4EDamageType.None;

            foreach (DD4EStatusEffect status in StatusEffects.FindAll(s => s.Type == DD4EStatusEffectType.Resistance))
            {
                var damageStatus = (status as DD4EDamageModifier);
                if (damageStatus != null)
                {
                    resistanceList |= damageStatus.DamageType;
                }
            }

            // 2) Figure out if they resist everything
            if ((resistanceList & damageType) == damageType)
            {
                // 3) If they resist everything, find lowest resistance value and do so
                foreach (DD4EStatusEffect status in StatusEffects.FindAll(s => s.Type == DD4EStatusEffectType.Resistance))
                {
                    var damageStatus = (status as DD4EDamageModifier);
                    if (damageStatus != null)
                    {
                        if ((damageStatus.DamageType & damageType) != DD4EDamageType.None)
                        {
                            resistanceModifier = Math.Min(resistanceModifier, damageStatus.DamageAmount);
                        }
                    }
                }

                // 4) If they have a resist all use the maximum between all and the current resistance
                if (StatusEffects.Exists(s => s.Type == DD4EStatusEffectType.Resistance && (s as DD4EDamageModifier).DamageType == DD4EDamageType.All))
                {
                    resistanceModifier = Math.Max(resistanceModifier, (StatusEffects.Find(s => s.Type == DD4EStatusEffectType.Resistance && (s as DD4EDamageModifier).DamageType == DD4EDamageType.All) as DD4EDamageModifier).DamageAmount);
                }

                // 5) Apply Resistance
                incomingDamage -= resistanceModifier;
            }

            if (incomingDamage > 0)
            {
                if (TemporaryHP > 0)
                {
                    if (TemporaryHP > incomingDamage)
                    {
                        TemporaryHP   -= incomingDamage;
                        incomingDamage = 0;
                    }
                    else
                    {
                        incomingDamage -= TemporaryHP;
                        TemporaryHP     = 0;
                    }
                }
            }

            if (incomingDamage > 0)
            {
                CurrentHP = Math.Max(0, CurrentHP - incomingDamage);
            }

            if (CurrentHP <= 0)
            {
                // Remove Regeneration and Ongoing Damage
                StatusEffects.RemoveAll(s => (s.Type == DD4EStatusEffectType.OngoingDamage || s.Type == DD4EStatusEffectType.Regeneration));
                OnPropertyChanged("StatusEffects");
            }
        }
コード例 #5
0
 public DD4EDamageModifier(DD4EStatusEffectType type, string source, DD4EDamageType damageType, int damageAmount, DD4EStatusEffectDuration duration)
     : base(type, source, duration)
 {
     DamageType   = damageType;
     DamageAmount = damageAmount;
 }
コード例 #6
0
 public DD4EOngoingDamage(string source, DD4EDamageType damageType, int damageAmount)
     : this(source, damageType, damageAmount, DD4EStatusEffectDuration.SaveEnds)
 {
 }
コード例 #7
0
 public DD4EOngoingDamage(string source, DD4EDamageType damageType, int damageAmount, DD4EStatusEffectDuration duration)
     : base(DD4EStatusEffectType.OngoingDamage, source, damageType, damageAmount, duration)
 {
 }