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"); } }
public AttackTargetWindow(ref DD4ECombatant target, DD4EDamageType damageType, IList <DD4EStatusEffect> statusEffects) { InitializeComponent(); Target = target; DamageType = damageType; StatusEffects = statusEffects; DefenderNameLabel.Content = Target.Name; }
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(); }
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"); } }
public DD4EDamageModifier(DD4EStatusEffectType type, string source, DD4EDamageType damageType, int damageAmount, DD4EStatusEffectDuration duration) : base(type, source, duration) { DamageType = damageType; DamageAmount = damageAmount; }
public DD4EOngoingDamage(string source, DD4EDamageType damageType, int damageAmount) : this(source, damageType, damageAmount, DD4EStatusEffectDuration.SaveEnds) { }
public DD4EOngoingDamage(string source, DD4EDamageType damageType, int damageAmount, DD4EStatusEffectDuration duration) : base(DD4EStatusEffectType.OngoingDamage, source, damageType, damageAmount, duration) { }