Esempio n. 1
0
    void OnTriggerEnter(Collider collider) //when the player enters the collider
    {
        _swipe.land = this;
        Land standing = this;                      //to start with the one the player stands on

        while (standing.Root != null)              // keep counting one block backwards
        {
            standing = standing.Root;              // till it finds the first block and set it
        }
        standing.lastActivId = lastActivCounter++; //give id to the last activated block



        if (collider.gameObject.tag == "Player" && GetComponents <BoxCollider>()[2].enabled == true) //when the player enters the rotate collider
        {
            rotate = true;                                                                           //set the bool to true
        }



        if (_isCrossway)         //if the roade is crossy
        {
            _isCrossway = false; //set the bool to false
        }


        int counter = transform.GetComponentsInChildren <Land>().Length;

        //   print("test counter: " + counter);
        if (counter >= 7)    //if there are more then 7 blocks after this block
        {
            //stop creating new blocks
            return;
        }


        if (transform.childCount >= 5)    //if there are more then 5 blocks
        {
            _isCrossway = true;           //that means it is a cross Roade
        }

        if (collider.gameObject.tag == "Player") //if the player enters the collider
        {
            if (EndPoints != null)               //if there is an end point
            {
                // print(EndPoints.Count);

                List <Land> temp = new List <Land>();  //create temperarly list to delete later
                while (EndPoints.Count > 0)            //as long as there is an end point
                {
                    if (EndPoints[0] == null)
                    {
                        EndPoints.RemoveAt(0);
                        continue;
                    }
                    print("after if there is" + temp.Count);
                    if (EndPoints[0]._nextStraight)                             //if the straight bool is true
                    {
                        temp.AddRange(LandManager.CreateNext(EndPoints[0], 0)); //add a block with a straight case
                    }
                    else                                                        //if not true
                    {
                        if (GetPossibleDirections(EndPoints[0]).Length > 0)
                        {
                            temp.AddRange(LandManager.CreateNext(EndPoints[0], GetPossibleDirections(EndPoints[0]))); //add another block
                        }
                        else
                        {
                            print("Invalid Endpoint");
                        }
                    }



                    EndPoints.RemoveAt(0);  //after we created a block after the endpoint it no longer is an endpoint, so we remove it
                }
                if (temp.Count == 0)
                {
                    throw new System.Exception("end of endpoints");
                }

                // if there is more then one endpoint mix the order
                if (temp.Count > 1)
                {
                    List <Land> temp_mix = new List <Land>();
                    while (temp.Count > 0)
                    {
                        var rnd = Random.Range(0, temp.Count);
                        temp_mix.Add(temp[rnd]);
                        temp.RemoveAt(rnd);
                    }
                    temp.AddRange(temp_mix);
                }

                EndPoints = temp;                                                                       // save the new enpoints in the list
            }
            else                                                                                        //if the list is empty
            {
                EndPoints = LandManager.CreateNext(GetComponent <Land>(), GetPossibleDirections(this)); //add a land script to add a block
            }


            if (Root != null && Root.Root != null && Root.Root.Root != null) //if the last block is there and the one before
            {
                LandManager.DeleteLand(Root.Root.Root, Root.Root);           //delet and remove the one befor the last one
            }
        }

        LandManager.CheckForMultipleRoots();  //check if there is more then one roade
    }