Example #1
0
    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);
    }
Example #2
0
    //Возвращает позицию объекта на поверхности цилиндра заданного радиуса и высотой по определенным границам
    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);
    }
Example #3
0
    //Возвращает позицию объекта относительно игрока с учетом определенных границ
    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);
    }
Example #4
0
    //Возвращает четыре точки, нужные для построения кубической кривой Безье
    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);
    }
Example #5
0
    //Возвращает следующий сегмент квадратичной кривой Безье,
    //Зависящий от предыдущего
    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);
    }
Example #6
0
    //Возвращает следующий сегмент кубической кривой Безье,
    //Зависящий от предыдущего
    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);
    }
Example #7
0
    //Возвращает три точки, нужные для построения квадратичной кривой Безье
    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);
    }