public override void Fire()
    {
        // Fire constant attack projectiles on the randomly chosen vector
        for (int index = 0; index < NumberOfProjectiles; index++)
        {
            // select random path based on how long the vectors are within the collider
            var          randomValue               = Random.Range(0, 100);
            var          sumMagnitudes             = CollisionPaths.Sum(x => x.Magnitude);
            var          percentageTotalRunThrough = 0f;
            ActualVector selectedPath              = null;
            for (var pathIndex = 0; pathIndex < CollisionPaths.Count() && selectedPath == null; pathIndex++)
            {
                var currentPercentage = CollisionPaths[pathIndex].Magnitude / sumMagnitudes * 100;
                if (randomValue <= (currentPercentage + percentageTotalRunThrough))
                {
                    selectedPath = CollisionPaths[pathIndex];
                }
                percentageTotalRunThrough += currentPercentage;
            }
            Debug.DrawRay(selectedPath.Origin, selectedPath.Direction, new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f)));

            Vector3   endpoint   = GetRandomEndPoint(selectedPath);
            Transform projectile = (Transform)Instantiate(Projectile, transform.position, Quaternion.identity);
            projectile.GetComponent <ConstantAttackProjectileScript>().TargetLocation = endpoint;
        }
    }
    private Vector2 GetRandomEndPoint(ActualVector selectedVector)
    {
        var endPoint    = selectedVector.Origin + selectedVector.Direction;
        var randomPoint = Vector2.Lerp(selectedVector.Origin, endPoint, Random.Range(0f, 1f));

        randomPoint.x += Random.Range(-.15f, .15f);
        randomPoint.y += Random.Range(-.15f, .15f);
        return(randomPoint);
    }