Esempio n. 1
0
    private bool GenerateItemsFromTemplate(int xoffset, int yoffset, LevelInfo[,] levelStructure, LayoutGrid2D <int> layout)
    {
        var levelTemplate = new Dictionary <(int h, int w), List <List <List <LevelInfoDto> > > >();

        var occupiedPoints = new List <AStar.Point>();
        var firstRoom      = layout.Rooms[0];
        var lastRoom       = layout.Rooms[layout.Rooms.Count - 1];

        var indent     = firstRoom.Transformation == Edgar.Geometry.TransformationGrid2D.Identity ? 1 : -1;
        var startPoint = levelStructure[xoffset + firstRoom.Position.X + 1, yoffset + firstRoom.Position.Y + indent];

        startPoint.TileType = TileType.Player;

        indent = lastRoom.Transformation == Edgar.Geometry.TransformationGrid2D.Identity ? 1 : -1;
        var endPoint = levelStructure[xoffset + lastRoom.Position.X + 1, yoffset + lastRoom.Position.Y + indent];

        endPoint.TileType = TileType.Exit;

        foreach (var room in layout.Rooms)
        {
            if (room == firstRoom || room == lastRoom || room.IsCorridor)
            {
                continue;
            }

            var roomHeight = room.Outline.BoundingRectangle.Height;
            var roomWidth  = room.Outline.BoundingRectangle.Width;
            if (!levelTemplate.ContainsKey((roomHeight, roomWidth)))
            {
                var folderName     = $@"RandomLevelParts\OrdinaryLevelParts\{roomHeight}_{roomWidth}";
                var roomsTemplates = ResourcesManagment.LoadLevelStructureFromFolderInDto(folderName);
                levelTemplate.Add((roomHeight, roomWidth), roomsTemplates);
            }

            var roomTemplate = levelTemplate[(roomHeight, roomWidth)].OrderBy(a => UnityEngine.Random.value).FirstOrDefault();
    public void OnLevelButtonClick(string level)
    {
        var newLevelStructure = ResourcesManagment.LoadLevelStructure($"Levels/Level{level}Structure");

        Globals.SetLevelStructure(newLevelStructure);
        SceneManager.LoadScene(Globals.GameplaySceneName);
    }