/// <summary> /// Once this is added, the quantity is equalized across all containers /// </summary> public void AddContainer(IContainer container) { lock (_lock) { if (_containers.Any(o => o.Item1 == container)) { throw new ArgumentException("The container was already added to this group"); } ITakesDamage takesDamage = container as ITakesDamage; _containers.Add(Tuple.Create(container, takesDamage)); _destroyed.Add(takesDamage == null ? false : takesDamage.IsDestroyed); _ratios.Add(Tuple.Create(0d, 0d)); if (takesDamage != null) { takesDamage.Resurrected += ContainerCast_ResurrectedDestroyed; takesDamage.Destroyed += ContainerCast_ResurrectedDestroyed; } // Cache the new values SetCurrentMax(); EqualizeContainers(true); // this needs to be done after setting _current } }
public static (bool isDead, DamageProps actualDamage) DoDamage(ITakesDamage item, DamageProps damage) { if (damage == null) { return(false, damage); } DamageProps damageActual = damage.GetDamage(item.ReceiveDamageMultipliers); // Remove the damage. If something was returned, that means hitpoints are zero return(item.HitPoints.RemoveQuantity(damageActual.GetDamage(), false) > 0, damageActual); }