Пример #1
0
        /// <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
            }
        }
Пример #2
0
        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);
        }