/// <summary> /// Configures this instance. /// </summary> /// <param name="area">The area.</param> /// <param name="damage">The damage.</param> /// <param name="targets">The targets.</param> /// <param name="owner">The owner.</param> /// <exception cref="ArgumentOutOfRangeException">damage - Must be greater than 0.</exception> /// <exception cref="ArgumentNullException"> /// targets /// or /// owner /// </exception> public void Setup(AreaTarget area, float damage, ITargetsProvider targets, ITeamMember owner) { if (area == null) { DestroyAsPoolableObject(); return; } if (damage <= 0) { throw new ArgumentOutOfRangeException(nameof(damage), "Must be greater than 0."); } this.area = area; this.damage = damage; this.targets = targets ?? throw new ArgumentNullException(nameof(targets)); this.owner = owner ?? throw new ArgumentNullException(nameof(owner)); meteorPaticles.transform.position = new Vector3(area.Position.x, DEFAULT_Y_POSITION, area.Position.z); meteorPaticles.transform.rotation = Quaternion.Euler(DEFAULT_ROTATION); var shape = meteorPaticles.shape; shape.angle = 0; shape.radius = area.Radius; StartCoroutine(DealingDamage()); }
/// <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> /// Sets the targets provider. /// </summary> /// <param name="provider">The provider.</param> public void SetTargetsProvider(ITargetsProvider provider) => targets = provider;