public List <Bat> CreateObjectsRandomly(Vector3 centralPosition, EnemyBoundaries enemyParams) { List <Bat> createdObjects = new List <Bat>(); for (int i = 0; i < enemyParams.EnemyCount; i++) { createdObjects.Add(Instantiate( generatedObjects [Random.Range(0, generatedObjects.Count)], GenerationMath.RandomPositionAround(centralPosition, enemyParams), parentObject.transform.rotation, parentObject.transform).GetComponent <Bat> () ); } return(createdObjects); }
//Возвращает позицию объекта на поверхности цилиндра заданного радиуса и высотой по определенным границам public static Vector3 RandomPositionOnCylinder(Vector3 center, float radius, EnemyBoundaries boundaries) { Vector3 position = new Vector3(); var alpha = Random.Range(-Mathf.PI, Mathf.PI); position.x = center.x + radius * Mathf.Cos(alpha); position.z = center.z + radius * Mathf.Sin(alpha); position.y = Random.Range(boundaries.MinHeight, boundaries.MaxHeight); return(position); }
//Возвращает позицию объекта относительно игрока с учетом определенных границ public static Vector3 RandomPositionAround(Vector3 centralPosition, EnemyBoundaries enemyParams) { Vector3 position = new Vector3(); var alpha = Random.Range(-Mathf.PI, Mathf.PI); position.x = centralPosition.x + Random.Range(enemyParams.InnerRadius, enemyParams.OuterRadius) * Mathf.Cos(alpha); position.z = centralPosition.z + Random.Range(enemyParams.InnerRadius, enemyParams.OuterRadius) * Mathf.Sin(alpha); position.y = Random.Range(enemyParams.MinHeight, enemyParams.MaxHeight); return(position); }
//Возвращает четыре точки, нужные для построения кубической кривой Безье public CubicBezierCurve CreateCubicLineDots(Vector3 startPosition, Vector3 finishPosition, EnemyBoundaries boundaries) { CubicBezierCurve cubicCurve = new CubicBezierCurve(); cubicCurve.p0 = startPosition; cubicCurve.p1 = GenerationMath.RandomPositionInCylinder( startPosition, Vector3.Distance(startPosition, finishPosition), boundaries); cubicCurve.p3 = finishPosition; cubicCurve.p2 = GenerationMath.RandomPositionInCylinder( finishPosition, Vector3.Distance(startPosition, finishPosition), boundaries); return(cubicCurve); }
//Возвращает следующий сегмент квадратичной кривой Безье, //Зависящий от предыдущего public QuadraticBezierCurve NextDots(QuadraticBezierCurve oldSettings, Vector3 nextPosition, EnemyBoundaries boundaries) { QuadraticBezierCurve quadraticCurve = new QuadraticBezierCurve(); quadraticCurve.p0 = oldSettings.p2; quadraticCurve.p2 = nextPosition; quadraticCurve.p1 = GenerationMath.RandomPositionInCylinder( quadraticCurve.p2, Vector3.Distance(quadraticCurve.p0, nextPosition), boundaries); return(quadraticCurve); }
//Возвращает следующий сегмент кубической кривой Безье, //Зависящий от предыдущего public CubicBezierCurve NextDots(CubicBezierCurve oldSettings, Vector3 nextPosition, EnemyBoundaries boundaries) { CubicBezierCurve cubicCurve = new CubicBezierCurve(); cubicCurve.p0 = oldSettings.p3; cubicCurve.p1 = oldSettings.p2; cubicCurve.p3 = nextPosition; cubicCurve.p2 = GenerationMath.RandomPositionInCylinder( cubicCurve.p3, Vector3.Distance(cubicCurve.p0, nextPosition), boundaries); return(cubicCurve); }
//Возвращает три точки, нужные для построения квадратичной кривой Безье public QuadraticBezierCurve CreateQuadraticLineDots(Vector3 startPosition, Vector3 finishPosition, EnemyBoundaries boundaries) { QuadraticBezierCurve quadraticCurve = new QuadraticBezierCurve(); quadraticCurve.p0 = startPosition; quadraticCurve.p1 = GenerationMath.RandomPositionOnCylinder( startPosition, Vector3.Distance(startPosition, finishPosition), boundaries); quadraticCurve.p2 = finishPosition; return(quadraticCurve); }