Пример #1
0
    private void GenerateGrid()
    {
        int LastFLadder = -1; // Last row 1st ladder location
        int LastSLadder = -1; // Last row 2nd ladder location
        int NewLadder   = -1;

        for (int row = 0; row < rows; row++)
        {
            GameObject     LeftRoom            = (GameObject)Instantiate(LeftRoomPrefab, transform);
            GameObject     MiddleRoom          = (GameObject)Instantiate(MiddleRoomPrefab, transform);
            GameObject     RightRoom           = (GameObject)Instantiate(RightRoomPrefab, transform);
            RoomController LeftRoomController  = LeftRoom.GetComponent <RoomController>();
            RoomController MidRoomController   = MiddleRoom.GetComponent <RoomController>();
            RoomController RightRoomController = RightRoom.GetComponent <RoomController>();
            LeftRoom.transform.position = new Vector2(0 * tileSizeX, row * -tileSizeY);
            LeftRoomController.Y        = row;
            LeftRoomController.X        = 0;
            LeftRoom.name = 0 + "" + row;
            MiddleRoom.transform.position = new Vector2(1 * tileSizeX, row * -tileSizeY);
            MidRoomController.Y           = row;
            MidRoomController.X           = 1;
            MiddleRoom.name = 1 + "" + row;
            RightRoom.transform.position = new Vector2(2 * tileSizeX, row * -tileSizeY);
            RightRoomController.Y        = row;
            RightRoomController.X        = 2;
            RightRoom.name = 2 + "" + row;
            if (row == 0)
            {
                LeftRoomController.isClear      = true;
                Character.transform.position    = CharacterController.NewPositionCharacter(LeftRoom);
                CharacterController.curPosition = Character.transform.position;
            }

            #region Ladder create
            LastSLadder = NewLadder;                      // Connect with 2nd ladder from previous room
            NewLadder   = UnityEngine.Random.Range(0, 3); // Random new ladder location
            if (NewLadder == LastFLadder)
            {
                GameObject LastDownLadderObject = GameObject.Find(LastSLadder + "" + (row - 1) + "d");
                LastSLadder = LastFLadder;
                GameObject LastUpLadderObject = null;
                if (LastDownLadderObject != null)
                {
                    Destroy(LastDownLadderObject); // Destroy last row 2nd ladder
                    LastUpLadderObject = GameObject.Find(LastFLadder + "" + (row - 1) + "u");
                    if (LastUpLadderObject != null)
                    {
                        LastUpLadderObject.name = LastFLadder + "" + (row - 1) + "b"; // Change last row 1st ladder name
                    }
                }
            }
            GameObject Ladder1 = null;
            GameObject Ladder2 = null;
            if (row != 0)
            {
                Ladder1 = (GameObject)Instantiate(LadderPrefab, transform);
            }
            if (NewLadder != LastSLadder && row != rows - 1)
            {
                Ladder2 = (GameObject)Instantiate(LadderPrefab, transform);; // Destroy if new ladder same room with connect ladder
            }
            if (Ladder1 != null)
            {
                Ladder1.transform.SetParent(GameObject.Find(LastSLadder + "" + row).transform);
                Ladder1.transform.position = Vector3.Scale(new Vector3(0, 0, 0), new Vector3(1.2f, 1.2f, 0)) + Ladder1.transform.parent.transform.position;
                Ladder1.name = LastSLadder + "" + row + "u";
                if (Ladder2 == null)
                {
                    Ladder1.name = LastSLadder + "" + row + "b";
                }
            }
            if (Ladder2 != null)
            {
                Ladder2.transform.SetParent(GameObject.Find(NewLadder + "" + row).transform);
                Ladder2.name = NewLadder + "" + row + "d";
                Ladder2.transform.position = Vector3.Scale(new Vector3(0, 0, 0), new Vector3(1.2f, 1.2f, 0)) + Ladder2.transform.parent.transform.position;
            }
            LastFLadder = LastSLadder;
            #endregion
        }
    }