diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Automation.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Automation.cs index e8b7e51..da597de 100644 --- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Automation.cs +++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Automation.cs @@ -67,9 +67,9 @@ private void _on_Button2_pressed() { //地图路径 - var tileDir = DungeonRoomTemplate.RoomTileDir; + var tileDir = GameConfig.RoomTileDir; //地图描述数据路径 - var tileDataDir = DungeonRoomTemplate.RoomTileDataDir; + var tileDataDir = GameConfig.RoomTileDataDir; var tileDirInfo = new DirectoryInfo(tileDir); var tileDataDirInfo = new DirectoryInfo(tileDataDir); @@ -149,7 +149,7 @@ var config = new JsonSerializerOptions(); config.WriteIndented = true; var text = JsonSerializer.Serialize(list, config); - File.WriteAllText(DungeonRoomTemplate.RoomTileConfigFile, text); + File.WriteAllText(GameConfig.RoomTileConfigFile, text); GD.Print("地牢房间配置, 重新打包完成!"); } diff --git a/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs b/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs index 649704a..a14edd6 100644 --- a/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs +++ b/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs @@ -10,21 +10,6 @@ public partial class DungeonRoomTemplate : TileMap { /// - /// 地图路径 - /// - public static readonly string RoomTileDir = System.Environment.CurrentDirectory + "/resource/map/tileMaps/"; - - /// - /// 地图描述数据路径 - /// - public static readonly string RoomTileDataDir = System.Environment.CurrentDirectory + "/resource/map/tiledata/"; - - /// - /// 房间配置汇总 - /// - public static readonly string RoomTileConfigFile = System.Environment.CurrentDirectory + "/resource/map/RoomConfig.json"; - - /// /// 是否启用编辑模式 /// [Export] @@ -736,7 +721,7 @@ private void TriggerSave() { //如果没有找到对应的场景文件,则不保存 - if (!File.Exists(RoomTileDir + Name + ".tscn")) + if (!File.Exists(GameConfig.RoomTileDir + Name + ".tscn")) { return; } @@ -765,7 +750,7 @@ public static void SaveConfig(List doorConfigs, Vector2I position, Vector2I size, List polygonData, string name) { //存入本地 - var path = RoomTileDataDir + name + ".json"; + var path = GameConfig.RoomTileDataDir + name + ".json"; var roomInfo = new DungeonRoomInfo(); roomInfo.Position = new SerializeVector2(position); roomInfo.Size = new SerializeVector2(size); @@ -785,7 +770,7 @@ /// public static List ReadConfig(Rect2 mapRect, string name) { - var path = RoomTileDataDir + name + ".json"; + var path = GameConfig.RoomTileDataDir + name + ".json"; if (File.Exists(path)) { var text = File.ReadAllText(path); diff --git a/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs b/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs index 6e2720b..51cc5d1 100644 --- a/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs +++ b/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs @@ -148,7 +148,7 @@ //随机选择一个房间 var roomSplit = Utils.RandomChoose(GameApplication.Instance.RoomConfig); - //var roomSplit = GameApplication.Instance.RoomConfig[0]; + //var roomSplit = GameApplication.Instance.RoomConfig[1]; var room = new RoomInfo(_count, roomSplit); //房间大小 @@ -532,8 +532,8 @@ var room1 = room.RoomSplit.RoomInfo; var room2 = nextRoom.RoomSplit.RoomInfo; - Vector2I? temp1 = null; - Vector2I? temp2 = null; + int? temp1 = null; + int? temp2 = null; foreach (var areaInfo1 in room1.DoorAreaInfos) { @@ -542,6 +542,11 @@ FindCrossPassage_Area(areaInfo1, room, nextRoom, ref temp1); } } + + if (temp1 == null) + { + return false; + } foreach (var areaInfo2 in room2.DoorAreaInfos) { @@ -551,17 +556,17 @@ } } - if (temp1 != null && temp2 != null) + if (temp2 == null) { - offset1 = Utils.RandomRangeInt(temp1.Value.X, temp1.Value.Y); - offset2 = Utils.RandomRangeInt(temp2.Value.X, temp2.Value.Y); - return true; + return false; } - - return false; + + offset1 = temp1.Value; + offset2 = temp2.Value; + return true; } - private void FindCrossPassage_Area(DoorAreaInfo areaInfo, RoomInfo room1, RoomInfo room2, ref Vector2I? areaRange) + private void FindCrossPassage_Area(DoorAreaInfo areaInfo, RoomInfo room1, RoomInfo room2, ref int? areaRange) { if (areaInfo.Direction == DoorDirection.N || areaInfo.Direction == DoorDirection.S) //纵向门 { @@ -571,7 +576,7 @@ if (room1.Position.X > room2.Position.X) { - var range = CalcOverlapRange(room2.GetHorizontalEnd(), + var range = CalcOverlapRange(room2.GetHorizontalEnd() + GameConfig.RoomSpace, room1.GetHorizontalEnd(), p1, p2); //交集范围够生成门 if (range.Y - range.X >= GameConfig.CorridorWidth) @@ -579,17 +584,18 @@ // var tempRange = new Vector2I(Mathf.Abs(room1.Position.X - (int)range.X), // Mathf.Abs(room1.Position.X - (int)range.Y) - GameConfig.CorridorWidth); - var rangeValue = Mathf.Abs(room1.Position.X - (int)range.Y) - GameConfig.CorridorWidth; - if (areaRange == null || rangeValue < areaRange.Value.X) + var rangeValue = Mathf.Abs(room1.Position.X - (int)range.X); + + if (areaRange == null || rangeValue < areaRange) { - areaRange = new Vector2I(rangeValue, rangeValue); + areaRange = rangeValue; } } } else { var range = CalcOverlapRange(room1.GetHorizontalStart(), - room2.GetHorizontalStart(), p1, p2); + room2.GetHorizontalStart() - + GameConfig.RoomSpace, p1, p2); //交集范围够生成门 if (range.Y - range.X >= GameConfig.CorridorWidth) { @@ -597,9 +603,10 @@ // Mathf.Abs(room1.Position.X - (int)range.Y) - GameConfig.CorridorWidth); var rangeValue = Mathf.Abs(room1.Position.X - (int)range.Y) - GameConfig.CorridorWidth; - if (areaRange == null || rangeValue > areaRange.Value.Y) + + if (areaRange == null || rangeValue > areaRange) { - areaRange = new Vector2I(rangeValue, rangeValue); + areaRange = rangeValue; } } } @@ -612,7 +619,7 @@ if (room1.Position.Y > room2.Position.Y) { - var range = CalcOverlapRange(room2.GetVerticalEnd(), + var range = CalcOverlapRange(room2.GetVerticalEnd() + GameConfig.RoomSpace, room1.GetVerticalEnd(), p1, p2); //交集范围够生成门 if (range.Y - range.X >= GameConfig.CorridorWidth) @@ -621,26 +628,28 @@ // Mathf.Abs(room1.Position.Y - (int)range.Y) - GameConfig.CorridorWidth); var rangeValue = Mathf.Abs(room1.Position.Y - (int)range.X); - if (areaRange == null || rangeValue < areaRange.Value.X) + + if (areaRange == null || rangeValue < areaRange) { - areaRange = new Vector2I(rangeValue, rangeValue); + areaRange = rangeValue; } } } else { var range = CalcOverlapRange(room1.GetVerticalStart(), - room2.GetVerticalStart(), p1, p2); + room2.GetVerticalStart() - GameConfig.RoomSpace, p1, p2); //交集范围够生成门 if (range.Y - range.X >= GameConfig.CorridorWidth) { // var tempRange = new Vector2I(Mathf.Abs(room1.Position.Y - (int)range.X), // Mathf.Abs(room1.Position.Y - (int)range.Y) - GameConfig.CorridorWidth); - + var rangeValue = Mathf.Abs(room1.Position.Y - (int)range.Y) - GameConfig.CorridorWidth; - if (areaRange == null || rangeValue > areaRange.Value.Y) + + if (areaRange == null || rangeValue > areaRange) { - areaRange = new Vector2I(rangeValue, rangeValue); + areaRange = rangeValue; } } } diff --git a/DungeonShooting_Godot/src/game/GameConfig.cs b/DungeonShooting_Godot/src/game/GameConfig.cs index e91c52c..6ba7f2c 100644 --- a/DungeonShooting_Godot/src/game/GameConfig.cs +++ b/DungeonShooting_Godot/src/game/GameConfig.cs @@ -38,4 +38,17 @@ /// 房间最小间距 /// public const int RoomSpace = 4; + + /// + /// 地图数据路径 + /// + public static readonly string RoomTileDir = System.Environment.CurrentDirectory + "/resource/map/tileMaps/"; + /// + /// 地图描述数据路径 + /// + public static readonly string RoomTileDataDir = System.Environment.CurrentDirectory + "/resource/map/tiledata/"; + /// + /// 房间配置汇总数据路径 + /// + public static readonly string RoomTileConfigFile = System.Environment.CurrentDirectory + "/resource/map/RoomConfig.json"; } \ No newline at end of file