Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / generate / GenerateDungeon.cs
@小李xl 小李xl on 28 Dec 2022 1 KB 地牢生成功能, 开发中...

using System.Collections.Generic;
using Godot;

/// <summary>
/// 地牢生成器
/// </summary>
public class GenerateDungeon
{
    public readonly TileMap TileMap;
    
    public GenerateDungeon(TileMap tileMap)
    {
        TileMap = tileMap;
    }

    public void Generate()
    {
        List<RoomInfo> roomInfos = new List<RoomInfo>();
        var x = 0;
        var y = 0;
        for (int i = 0; i < 10; i++)
        {
            var roomInfo = GenerateRoom();
            roomInfos.Add(roomInfo);
            roomInfo.Position = new Vector2(x + 2, y + 2);
            
            if (Utils.RandBoolean())
            {
                x = x + 2 + (int)roomInfo.Size.x;
            }
            else
            {
                y = y + 2 + (int)roomInfo.Size.y;
            }
            
        }

        foreach (var info in roomInfos)
        {
            //临时铺上地砖
            var id = (int)TileMap.TileSet.GetTilesIds()[0];
            for (int i = 0; i < info.Size.x; i++)
            {
                for (int j = 0; j < info.Size.y; j++)
                {
                    TileMap.SetCell(i + (int)info.Position.x, j + (int)info.Position.y, id);
                }
            }
        }
    }

    public RoomInfo GenerateRoom()
    {
        var info = new RoomInfo();
        //房间大小
        info.Size = new Vector2(Utils.RandRange(5, 10), Utils.RandRange(5, 10));
        

        return info;
    }
}