Exemplo n.º 1
0
        void Start()
        {
            Player.Init(LevelUI);
            TestRoom.Init(false, false, false, false);
            var objectInitializer = new RoomRandomObjectsInitializer(Player.gameObject);

            objectInitializer.InitRoomObjects(TestRoom);
            LevelUI.Init();
        }
        public void GenerateLevelObjects(GameStarter starter, LevelMap map)
        {
            if (RoomPrefabs.Count != RoomPrefabsProbabilities.Count)
            {
                Debug.LogError("Can't generate level. Rooms count and Rooms probabilites count are different");
                return;
            }
            var objectInitializer = new RoomRandomObjectsInitializer(starter.Player.gameObject);

            for (var x = 0; x < GridSizeX; x++)
            {
                for (var y = 0; y < GridSizeY; y++)
                {
                    if (map.HasRoom(x, y))
                    {
                        var pos      = RoomSize * new Vector2(x - GridSizeX / 2, y - GridSizeY / 2);
                        var roomInfo = map.GetRoom(new Vector2Int(x, y));
                        var prefab   = GetPrefab(roomInfo.RoomType);
                        var go       = Instantiate(prefab, pos, Quaternion.identity, LevelRoot);
                        // Init room doors
                        var  index          = new Vector2Int(x, y);
                        var  isLeftOpened   = IsDoorOpened(map, index + Vector2Int.left);
                        var  isRightOpened  = IsDoorOpened(map, index + Vector2Int.right);
                        var  isUpperOpened  = IsDoorOpened(map, index + Vector2Int.up);
                        var  isBottomOpened = IsDoorOpened(map, index + Vector2Int.down);
                        Room comp           = null;
                        switch (roomInfo.RoomType)
                        {
                        case RoomType.StartRoom:
                        case RoomType.SimpleRoom: {
                            comp = go.GetComponent <Room>();
                            comp.Init(isLeftOpened, isRightOpened, isUpperOpened, isBottomOpened);
                            break;
                        }

                        case RoomType.RoomWithExit: {
                            var exitRoom = go.GetComponent <ExitRoom>();
                            exitRoom.Init(starter.LevelUI, isLeftOpened, isRightOpened, isUpperOpened, isBottomOpened);
                            comp = exitRoom;
                            break;
                        }
                        }
                        objectInitializer.InitRoomObjects(comp);
                    }
                }
            }
        }