예제 #1
0
    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);
                }
            }
        }
    }
예제 #2
0
 public RailLink(RailRoadScript railLinked, GameObject fbRef)
 {
     _railLinked        = railLinked;
     _isAvailable       = false;
     _cannoBeDisabled   = false;
     _feedbackReference = fbRef;
 }
예제 #3
0
    //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();
        }
    }