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