Beispiel #1
0
    private void SpawnRandomChunk(List <ChunkDesign> _chunkPrefabs)
    {
        int         _randomNumber = Random.Range(0, _chunkPrefabs.Count);
        ChunkDesign _chunk        = _chunkPrefabs[_randomNumber];

        SpawnChunk(_chunk);
    }
Beispiel #2
0
    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);
        }
    }
Beispiel #3
0
    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);
        }
    }