void TrainInstantiation() { _allTrains = new GameObject[_playerNumber]; for (int i = 0; i < _playerNumber; i++) { bool tmpAvailableSpawningPosition = false; while (tmpAvailableSpawningPosition == false) { RailRoadScript tmpRailBlock = _railRoadScript[Random.Range(0, _railRoadScript.Count)]; if (tmpRailBlock._currentType == RailRoadScript.RailRoadType.OneWay || tmpRailBlock._currentType == RailRoadScript.RailRoadType.TurningPoint) { tmpAvailableSpawningPosition = true; _allTrains[i] = Instantiate(_trainPrefab, tmpRailBlock.transform.position, Quaternion.identity) as GameObject; _allTrains[i].name = "Train N°" + i; TrainScript tmpTrainScript = _allTrains[i].GetComponent <TrainScript>(); tmpTrainScript._owner = "Player" + i; if (i == 0) { tmpTrainScript._mainSprites.sprite = tmpTrainScript._engineSprites[0]; } else { tmpTrainScript._mainSprites.sprite = tmpTrainScript._engineSprites[1]; } tmpTrainScript._currentRailScript = tmpRailBlock; tmpTrainScript._currentWagonType = TrainScript.WagonType.Engine; tmpTrainScript._trainParts.Add(tmpTrainScript); tmpTrainScript._currentWagonNumber = tmpTrainScript._trainParts.Count - 1; tmpTrainScript.ComputeNextRailBlock(true); } } } }
public RailLink(RailRoadScript railLinked, GameObject fbRef) { _railLinked = railLinked; _isAvailable = false; _cannoBeDisabled = false; _feedbackReference = fbRef; }
//DESTINATION COMPUTING----------------------------------------------------------------------------------- public void ComputeNextRailBlock(bool firstTime) { if (_currentWagonType == WagonType.Engine) { bool tmpAvailableBlock = false; while (tmpAvailableBlock == false) { RailRoadScript tmpRS = null; RailRoadScript.RailLink tmpJustEndedLink = null; switch (_currentRailScript._currentType) { case RailRoadScript.RailRoadType.OneWay: //Old Way - For turning Point And One way tmpRS = _currentRailScript._linkedRailRoadList [Random.Range(0, _currentRailScript._linkedRailRoadList.Count)]._railLinked; break; case RailRoadScript.RailRoadType.TurningPoint: //Old Way - For turning Point And One way tmpRS = _currentRailScript._linkedRailRoadList [Random.Range(0, _currentRailScript._linkedRailRoadList.Count)]._railLinked; break; case RailRoadScript.RailRoadType.Cross: //find previous reference to current reference link in _current reference linkList foreach (RailRoadScript.RailLink links in _currentRailScript._linkedRailRoadList) { if (links._railLinked == _previousRailScript) { tmpJustEndedLink = links; break; } } //Find the other Available/Unavailable link and attribute next destination foreach (RailRoadScript.RailLink links in _currentRailScript._linkedRailRoadList) { if (links != tmpJustEndedLink && links._isAvailable == tmpJustEndedLink._isAvailable) { tmpRS = links._railLinked; break; } } _horns[Random.Range(0, _horns.Length)].Play(); break; case RailRoadScript.RailRoadType.ThreeWay: //find previous reference to current reference link in _current reference linkList foreach (RailRoadScript.RailLink links in _currentRailScript._linkedRailRoadList) { if (links._railLinked == _previousRailScript || firstTime) { tmpJustEndedLink = links; break; } } foreach (RailRoadScript.RailLink links in _currentRailScript._linkedRailRoadList) { if (links != tmpJustEndedLink && tmpJustEndedLink._isAvailable == true && links._isAvailable == true) { tmpRS = links._railLinked; break; } else if (links != tmpJustEndedLink && tmpJustEndedLink._isAvailable == false && !links._cannoBeDisabled) { tmpRS = links._railLinked; break; } } _horns[Random.Range(0, _horns.Length)].Play(); break; } //New Way if (firstTime || tmpRS != _previousRailScript) { //Generate Wagon if it's needed if (_isGeneratingWagons && firstTime == false) { WagonGeneration(); if (_trainParts.Count == _wagonTargetNumber) { _isGeneratingWagons = false; } } //Compute next destination _previousRailScript = _currentRailScript; _currentRailScript = tmpRS; //Adapt rotation to next destination RotationHandler(); tmpAvailableBlock = true; } } } else { _previousRailScript = _currentRailScript; _currentRailScript = _trainParts[_currentWagonNumber - 1]._previousRailScript; //Adapt rotation to next destination RotationHandler(); } }