using System.Collections; using System.Collections.Generic; using UnityEngine; public class TileManager : MonoBehaviour { [SerializeField] private List m_tileList = new List(); [SerializeField] private int trackTiles = 10; [SerializeField] private TileData m_finalTile; private int m_bendProfile = 0; private TileController m_previousTile; private TileController m_currentTile; public enum TileTypes { BEND_LEFT = -1, STRAIGHT = 0, BEND_RIGHT = 1, }; private void Start() { m_currentTile = FindObjectOfType(); for (int i = 0; i < trackTiles; i++) { SpawnTile(); } SpawnTile(m_finalTile); } // Update is called once per frame void Update() { /* if (m_previousTile != null) { if (Vector3.Distance(m_previousTile.transform.position, Camera.main.transform.position) > m_exitCullDistance) { Destroy(m_previousTile); m_previousTile = null; } } */ /*if(Input.GetKeyDown(KeyCode.Space)) { SpawnRandomTile(); }*/ } /// /// Spawn next tile /// /// Leave null for random void SpawnTile(TileData tileData = null) { var _startBendProfile = m_bendProfile; TileData _selectedTile = tileData; if(_selectedTile == null) { do { _selectedTile = m_tileList[Random.Range(0, m_tileList.Count - 1)]; } while (Mathf.Abs(m_bendProfile + (int)_selectedTile.tileType) >= 2); } m_bendProfile += (int)_selectedTile.tileType; var _newTileObj = Instantiate(_selectedTile.prefab); _newTileObj.transform.forward = m_currentTile.exitAnchor.transform.forward; var _newTileController = _newTileObj.GetComponentInChildren(); Vector3 _offset = m_currentTile.exitAnchor.position - _newTileController.entryAnchor.position; _newTileObj.transform.position += _offset; m_previousTile = m_currentTile; m_currentTile = _newTileController; } }