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