Example #1
0
 public void Deregister(IObjectsPool objectsPool)
 {
     if (!PoolsToClean.TryRemove(objectsPool, out _))
     {
         _logger.LogError($"ObjectsPool {objectsPool} was not found in {PoolsToClean}");
     }
 }
Example #2
0
        /// <summary>
        /// Creates the meteor shower - helper-object that spawns meteorites in a given area and deals damage to enemies.
        /// </summary>
        /// <param name="owner">The skill owner (caster).</param>
        /// <param name="targetsProvider">The targets provider.</param>
        /// <param name="target">The target.</param>
        /// <param name="skillLevel">The skill level.</param>
        /// <param name="objectsPool">The objects pool.</param>
        /// <exception cref="ArgumentNullException">
        /// owner
        /// or
        /// targetsProvider
        /// or
        /// target
        /// or
        /// objectsPool
        /// </exception>
        public void CreateMeteorShower(ISkilled owner, ITargetsProvider targetsProvider, AreaTarget target, int skillLevel,
                                       IObjectsPool objectsPool)
        {
            if (owner == null)
            {
                throw new ArgumentNullException(nameof(owner));
            }

            if (targetsProvider == null)
            {
                throw new ArgumentNullException(nameof(targetsProvider));
            }

            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            if (objectsPool == null)
            {
                throw new ArgumentNullException(nameof(objectsPool));
            }

            var parameters = GetParameters(skillLevel);
            var meteor     = objectsPool.GetOrCreate(parameters.MeteorShowerPrefab);

            meteor.Setup(target, parameters.Damage, targetsProvider, owner);
        }
        /// <summary>
        /// Creates the freezing effect.
        /// </summary>
        /// <param name="effectOwner">The effect owner.</param>
        /// <param name="objectsPool">The objects pool.</param>
        /// <exception cref="ArgumentNullException">
        /// effectOwner
        /// or
        /// objectsPool
        /// </exception>
        /// <returns>The effect using this effect date.</returns>
        public IEffect CreateEffect(ITeamMember effectOwner, IObjectsPool objectsPool)
        {
            if (effectOwner == null)
            {
                throw new ArgumentNullException(nameof(effectOwner));
            }

            if (objectsPool == null)
            {
                throw new ArgumentNullException(nameof(objectsPool));
            }

            return(new Effect(this, objectsPool, effectOwner));
        }
        /// <summary>
        /// Shoots the arrow to the specified target.
        /// </summary>
        /// <param name="attacker">The attacker.</param>
        /// <param name="target">The target.</param>
        /// <param name="objectsPool">The objects pool.</param>
        /// <exception cref="ArgumentNullException">objectsPool</exception>
        public void ShootArrow(IAttacker attacker, ITargetAttackable target, IObjectsPool objectsPool)
        {
            if (arrowPrefab == null)
            {
                return;
            }

            if (objectsPool == null)
            {
                throw new ArgumentNullException(nameof(objectsPool));
            }

            var arrow = objectsPool.GetOrCreate(arrowPrefab, attacker.transform.position, attacker.transform.rotation);

            arrow.ArrowSetup(target, attacker, arrowSpeed, attacker.DamageValue);
        }
Example #5
0
        /// <summary>
        /// Launches the ice bolt at the given target (magic arrow with freeze effect).
        /// </summary>
        /// <param name="owner">The skill owner (caster).</param>
        /// <param name="target">The target.</param>
        /// <param name="skillLevel">The skill level.</param>
        /// <param name="objectsPool">The objects pool.</param>
        /// <exception cref="ArgumentNullException">
        /// owner
        /// or
        /// target
        /// or
        /// objectsPool
        /// </exception>
        public void LaunchIceBolt(ISkilled owner, ITarget target, int skillLevel, IObjectsPool objectsPool)
        {
            if (owner == null)
            {
                throw new ArgumentNullException(nameof(owner));
            }

            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            if (objectsPool == null)
            {
                throw new ArgumentNullException(nameof(objectsPool));
            }

            var parameters = GetParameters(skillLevel);
            var arrow      = objectsPool.GetOrCreate(parameters.ArrowPrefab, owner.transform.position, owner.transform.rotation);
            var effect     = parameters.EffectFreeze.CreateEffect(owner, objectsPool);

            arrow.MagicArrowSetup(target, owner, parameters.ArrowSpeed, effect);
        }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Effect"/> class.
 /// </summary>
 /// <param name="data">The effect data.</param>
 /// <param name="objectsPool">The objects pool.</param>
 /// <param name="effectOwner">The effect owner (caster).</param>
 /// <exception cref="ArgumentNullException">
 /// data
 /// or
 /// objectsPool
 /// or
 /// effectOwner
 /// </exception>
 public Effect(IEffectData data, IObjectsPool objectsPool, ITeamMember effectOwner)
 {
     this.data   = data ?? throw new ArgumentNullException(nameof(data));
     ObjectsPool = objectsPool ?? throw new ArgumentNullException(nameof(objectsPool));
     Owner       = effectOwner ?? throw new ArgumentNullException(nameof(effectOwner));
 }
Example #7
0
 public void RegisterPool(IObjectsPool objectsPool) => PoolsToClean[objectsPool] = true;