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); }