diff --git a/DungeonShooting_Godot/src/framework/Grid.cs b/DungeonShooting_Godot/src/framework/Grid.cs
index 4966fa1..b2a5292 100644
--- a/DungeonShooting_Godot/src/framework/Grid.cs
+++ b/DungeonShooting_Godot/src/framework/Grid.cs
@@ -112,6 +112,14 @@
}
///
+ /// 清除所有数据
+ ///
+ public void Clear()
+ {
+ _map.Clear();
+ }
+
+ ///
/// 检测矩形区域内是否与其他数据有碰撞
///
/// 起点位置
diff --git a/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs b/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs
index adc6595..d22f3db 100644
--- a/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs
+++ b/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs
@@ -8,11 +8,6 @@
public class GenerateDungeon
{
///
- /// 用于标记地图上的坐标是否被占用
- ///
- public Grid RoomGrid { get; } = new Grid();
-
- ///
/// 所有生成的房间, 调用过 Generate() 函数才能获取到值
///
public List RoomInfos { get; } = new List();
@@ -21,9 +16,7 @@
/// 起始房间
///
public RoomInfo StartRoom { get; private set; }
-
- private int _count = 0;
-
+
///
/// 生成的房间数量
///
@@ -33,7 +26,13 @@
/// 过道宽度
///
private int _corridorWidth = 4;
-
+
+ //用于标记地图上的坐标是否被占用
+ private Grid _roomGrid { get; } = new Grid();
+
+ //当前房间数量
+ private int _count = 0;
+
//宽高
private int _roomMinWidth = 15;
private int _roomMaxWidth = 35;
@@ -46,13 +45,15 @@
//房间横轴分散程度
private float _roomHorizontalMinDispersion = 0.7f;
-
private float _roomHorizontalMaxDispersion = 1.1f;
//房间纵轴分散程度
private float _roomVerticalMinDispersion = 0.7f;
private float _roomVerticalMaxDispersion = 1.1f;
+ ///
+ /// 生成房间
+ ///
public void Generate()
{
if (StartRoom != null) return;
@@ -70,6 +71,8 @@
room.Next.Add(nextRoom);
}
}
+
+ _roomGrid.Clear();
}
//生成房间
@@ -125,17 +128,17 @@
}
//是否碰到其他房间或者过道
- if (RoomGrid.RectCollision(room.Position - new Vector2(3, 3), room.Size + new Vector2(6, 6)))
+ if (_roomGrid.RectCollision(room.Position - new Vector2(3, 3), room.Size + new Vector2(6, 6)))
{
return null;
}
- RoomGrid.AddRect(room.Position, room.Size, true);
+ _roomGrid.AddRect(room.Position, room.Size, true);
//找门, 与上一个房间是否能连通
if (!ConnectDoor(prevRoomInfo, room))
{
- RoomGrid.RemoveRect(room.Position, room.Size);
+ _roomGrid.RemoveRect(room.Position, room.Size);
return null;
}
}
@@ -144,7 +147,7 @@
RoomInfos.Add(room);
if (prevRoomInfo == null)
{
- RoomGrid.AddRect(room.Position, room.Size, true);
+ _roomGrid.AddRect(room.Position, room.Size, true);
}
//下一个房间
@@ -431,12 +434,12 @@
collSize = new Vector2(size.x, size.y + 6);
}
- if (RoomGrid.RectCollision(collPos, collSize))
+ if (_roomGrid.RectCollision(collPos, collSize))
{
return false;
}
- RoomGrid.AddRect(pos, size, true);
+ _roomGrid.AddRect(pos, size, true);
return true;
}
@@ -469,7 +472,7 @@
collSize1 = new Vector2(size1.x, size1.y + 6);
}
- if (RoomGrid.RectCollision(collPos1, collSize1))
+ if (_roomGrid.RectCollision(collPos1, collSize1))
{
return false;
}
@@ -487,13 +490,13 @@
collSize2 = new Vector2(size2.x, size2.y + 6);
}
- if (RoomGrid.RectCollision(collPos2, collSize2))
+ if (_roomGrid.RectCollision(collPos2, collSize2))
{
return false;
}
- RoomGrid.AddRect(pos1, size1, true);
- RoomGrid.AddRect(pos2, size2, true);
+ _roomGrid.AddRect(pos1, size1, true);
+ _roomGrid.AddRect(pos2, size2, true);
return true;
}
}
\ No newline at end of file