private MovableProp GetUsablePropFromPool(MovablePropType type) { List <MovableProp> propPool = _movablePropDictionary[type]; for (int i = 0; i < propPool.Count; i++) { if (!propPool[i].gameObject.activeInHierarchy) { return(propPool[i]); } } MovableProp poolPrefab = null; foreach (var movablePropPefab in TerrainStripFactory.SharedInstance.movablePropPefabs) { if (movablePropPefab.Type == type) { poolPrefab = movablePropPefab; break; } } if (poolPrefab == null) { return(null); } MovableProp newPropRef = MonoBehaviour.Instantiate(poolPrefab, Vector3.zero, poolPrefab.transform.rotation); propPool.Add(newPropRef); return(newPropRef); }
public static void CreateManagerPools() { _movablePropDictionary = new Dictionary <MovablePropType, List <MovableProp> >(); foreach (var movablePropPefab in TerrainStripFactory.SharedInstance.movablePropPefabs) { List <MovableProp> tempPool = new List <MovableProp>(30); for (int i = 0; i < 30; i++) { MovableProp temMovableProp = MonoBehaviour.Instantiate(movablePropPefab, Vector3.zero, movablePropPefab.transform.rotation); temMovableProp.gameObject.SetActive(false); tempPool.Add(temMovableProp); } _movablePropDictionary.Add(movablePropPefab.Type, tempPool); } _usableRoadTypes = new[] { MovablePropType.CAR_1, MovablePropType.CAR_2, MovablePropType.TRUCK }; }
private void SetupRiverType() { //All these values need balancing float speed = TerrainStripFactory.RandomRangeExcept(1, 3, _lastStripSpeed); int propOffset = TerrainStripFactory.RandomRangeExcept(4, 6, _lastPropOffset); int numProps = Random.Range(3, 5); for (int i = 0; i < numProps; i++) { MovableProp tempMovableProp = GetUsablePropFromPool(MovablePropType.LOG); tempMovableProp.transform.position = new Vector3((-9f * _logDirection) + (i * propOffset * _logDirection), 0.5f, zPos); tempMovableProp.transform.rotation = Quaternion.Euler(tempMovableProp.transform.eulerAngles.x, 90 * _logDirection, 0); tempMovableProp.Speed = speed; tempMovableProp.Direction = new Vector3(_logDirection, 0, 0); tempMovableProp.gameObject.SetActive(true); tempMovableProp.Type = MovablePropType.LOG; _movableProps.Add(tempMovableProp); } }
private void SetupRoadType() { //All these values need balancing float speed = TerrainStripFactory.RandomRangeExcept(1.5f, 3, _lastStripSpeed); int propOffset = TerrainStripFactory.RandomRangeExcept(3, 6, _lastPropOffset); int numProps = TerrainStripFactory.RandomRangeExcept(3, 5, _lastNumProps); int randomSign = Random.Range(0, 2) * 2 - 1; int carChoice = TerrainStripFactory.RandomRangeExcept(0, _usableRoadTypes.Length, _lastCarChoice); for (int i = 0; i < numProps; i++) { MovableProp tempMovableProp = GetUsablePropFromPool(_usableRoadTypes[carChoice]); tempMovableProp.transform.position = new Vector3((-9f * randomSign) + (i * propOffset * randomSign), 0.7f, zPos); tempMovableProp.transform.rotation = Quaternion.Euler(tempMovableProp.transform.eulerAngles.x, 90 * randomSign, 0); tempMovableProp.Speed = speed; tempMovableProp.Direction = new Vector3(randomSign, 0, 0); tempMovableProp.gameObject.SetActive(true); _movableProps.Add(tempMovableProp); } }
void Awake() { mMovableProp = transform.parent.GetComponent <MovableProp>(); mRecordingProp = transform.parent.GetComponent <RecordingProp>(); }