Example #1
0
    private void GenerateBoosts()
    {
        if (_data.BoostIntervals.Length == 0)
        {
            return;
        }
        float boostFixedSize     = 0.5f;
        float deltaBoostPlatform = 0.02f;

        foreach (BoostInterval boostInterval in _data.BoostIntervals)
        {
            List <Vector3> positionsInInterval = new List <Vector3>();
            for (int i = 0; i < _platforms.Count; ++i)
            {
                if (_platforms[i].transform.position.y > boostInterval.IntervalStart &&
                    _platforms[i].transform.position.y <boostInterval.IntervalEnd &&
                                                        (_platforms[i + 1].transform.position.y - _platforms[i].transform.position.y)> (boostFixedSize + _platformSize.y))
                {
                    positionsInInterval.Add(_platforms[i].transform.position);
                }
            }

            foreach (BoostIntervalData data in boostInterval.TypesNumbersProbabilitys)
            {
                for (int i = 0; i < data.Number; ++i)
                {
                    if (Random.Range(0, 100) < data.Probability)
                    {
                        int platformNum = Random.Range(0, positionsInInterval.Count);

                        Transform transform = _platforms[0].transform;
                        foreach (GameObject platform in _platforms)
                        {
                            if (platform.transform.position.y == positionsInInterval[platformNum].y)
                            {
                                transform = platform.transform;
                                break;
                            }
                        }

                        GameObject boost = _factory.GetBoost(data.BoostType, transform);
                        boost.transform.localScale = new Vector3(boost.transform.localScale.x / 0.3f, boost.transform.localScale.y / 0.3f);

                        // TODO: bostFisedSize
                        Vector2 boostSize = boost.GetComponent <BoxCollider2D>().size *boost.GetComponent <BoxCollider2D>().transform.localScale;

                        boost.transform.position = new Vector3(
                            positionsInInterval[platformNum].x,
                            positionsInInterval[platformNum].y + _platformSize.y / 2 + deltaBoostPlatform + boostSize.y / 2 * 0.3f);

                        _allObjects.Add(boost);
                        positionsInInterval.RemoveAt(platformNum);
                    }
                }
            }
        }
    }