using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class TileManager : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private List<TileData> m_tileList = new List<TileData>();
|
|
|
|
[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<TileController>();
|
|
|
|
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();
|
|
}*/
|
|
}
|
|
|
|
/// <summary>
|
|
/// Spawn next tile
|
|
/// </summary>
|
|
/// <param name="tileData">Leave null for random</param>
|
|
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<TileController>();
|
|
|
|
Vector3 _offset = m_currentTile.exitAnchor.position - _newTileController.entryAnchor.position;
|
|
_newTileObj.transform.position += _offset;
|
|
|
|
m_previousTile = m_currentTile;
|
|
m_currentTile = _newTileController;
|
|
|
|
}
|
|
}
|