private void SpawnRandomChunk(List <ChunkDesign> _chunkPrefabs) { int _randomNumber = Random.Range(0, _chunkPrefabs.Count); ChunkDesign _chunk = _chunkPrefabs[_randomNumber]; SpawnChunk(_chunk); }
private void SpawnChunk(ChunkDesign _chunkDesign) { Vector3 _spawnPosition; if (ChunkMover.Instance.ChunkCount != 0) { float _latestChunkLength; GameObject _latestChunk = ChunkMover.Instance.GetLastestChunk(out _latestChunkLength); float _offset = _latestChunkLength / 2 + _chunkDesign.Length / 2; float _spawnZPosition = _latestChunk.transform.position.z + _offset; _spawnPosition = new Vector3(transform.position.x, transform.position.y, _spawnZPosition); } else { _spawnPosition = new Vector3(transform.position.x, transform.position.y, chunksZStartPosition); } GameObject _chunkParent = ObjectPool.Instance.GetObjectForType(CHUNK_NAME, false); _chunkParent.transform.position = _spawnPosition; _chunkParent.transform.parent = transform; _chunkParent.name = _chunkDesign.name; if (SystemInfo.supportsInstancing) { objectsToInstance = _chunkDesign.ObjectsToInstance; objectsToPool = _chunkDesign.ObjectsToPool.Except(objectsToInstance).ToList(); } else { objectsToPool = _chunkDesign.ObjectsToPool; } foreach (Transform _transform in objectsToInstance) { GPUInstancing.Instance.AddTransform(_transform, _chunkParent.transform); } foreach (Transform _transform in objectsToPool) { GameObject _object = ObjectPool.Instance.GetObjectForType(_transform.name, false); _object.transform.parent = _chunkParent.transform; _object.transform.position = new Vector3(_transform.position.x, _transform.position.y, _transform.position.z + _chunkParent.transform.position.z); _object.transform.localScale = _transform.localScale; _object.transform.rotation = _transform.rotation; } SpawnCoins(_chunkDesign, _chunkParent.transform); if (ChunkSpawnedEvent != null) { ChunkSpawnedEvent(_chunkParent, _chunkDesign.Length); } }
private void SpawnCoins(ChunkDesign _chunkDesign, Transform _chunkParent) { List <Vector3> _coinLocalPositions = _chunkDesign.GetCoinLocalPositions(); List <CoinType> _coinTypes = CoinSpawnChancesByTimeLibrary.Instance.GetCoinTypesToSpawn(_coinLocalPositions.Count, Progression.Timer); for (int i = 0; i < _coinTypes.Count; i++) { CoinType _coinType = _coinTypes[i]; Vector3 _localPosition = _coinLocalPositions[i]; GameObject _coinPrefab = CoinPrefabByCoinTypeLibrary.Instance.GetCoinPrefab(_coinType); GameObject _coinGameObject = ObjectPool.Instance.GetObjectForType(_coinPrefab.name, false); _coinGameObject.transform.parent = _chunkParent.transform; _coinGameObject.transform.position = new Vector3(_localPosition.x, _localPosition.y, _localPosition.z + _chunkParent.transform.position.z); } }