Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Assets.Scripts.Enemies;
- using Assets.Scripts.Helpers;
- using System.Linq;
- using UnityEngine;
- namespace Assets.Scripts.Weapons
- {
- internal class MultipleProjectileWeapon : SingleProjectileWeapon
- {
- [SerializeField] protected float _fanAngle = 10f;
- public override void Attack(EnemyCharacter target)
- {
- if (target == null) return;
- float projectileAngle = 0f;
- for (int i = 0; i < Properties.Amount; i++)
- {
- var projectile = RequestProjectile();
- Vector3 projectileDirection = MyMathHelper.CalculateOffsetDirection(transform.position, target.transform.position, projectileAngle);
- projectile.MoveTowards(projectileDirection);
- // Alternate projectile placement (above, below, above, below, ...) the first projectile
- if (i % 2 == 0) projectileAngle -= _fanAngle;
- projectileAngle *= -1;
- }
- _weaponCooldownTimer.StartTimer();
- }
- public override void AttackMany(EnemyCharacter[] targets)
- {
- if (targets.Length == 0) return;
- // how many targets *can* I aquire? (rounded down for safety)
- var selection = targets.Take(Mathf.FloorToInt(Properties.Amount)).ToArray();
- foreach (var target in selection)
- {
- // send a projectile to each individual target:
- var projectile = RequestProjectile();
- Vector3 direction = target.transform.position - transform.position;
- projectile.MoveTowards(direction);
- }
- _weaponCooldownTimer.StartTimer();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement