diff --git a/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs b/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs
index 601c8ed..7de6259 100644
--- a/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs
+++ b/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs
@@ -177,7 +177,7 @@
//是否在限制区域内
if (_enableLimitRange)
{
- if (room.Position.X < -_rangeX || room.Position.X + room.Size.X > _rangeX || room.Position.Y < -_rangeY || room.Position.Y + room.Size.Y > _rangeY)
+ if (room.GetHorizontalStart() < -_rangeX || room.GetHorizontalEnd() > _rangeX || room.GetVerticalStart() < -_rangeY || room.GetVerticalEnd() > _rangeY)
{
resultRoom = null;
return GenerateRoomErrorCode.OutArea;
@@ -285,14 +285,14 @@
///
private bool TryConnectHorizontalDoor(RoomInfo room, RoomDoorInfo roomDoor, RoomInfo nextRoom, RoomDoorInfo nextRoomDoor)
{
- var overlapX = Mathf.Min(room.Position.X + room.Size.X, nextRoom.Position.X + nextRoom.Size.X) -
- Mathf.Max(room.Position.X, nextRoom.Position.X);
+ var overlapX = Mathf.Min(room.GetHorizontalEnd(), nextRoom.GetHorizontalEnd()) -
+ Mathf.Max(room.GetHorizontalStart(), nextRoom.GetHorizontalStart());
//这种情况下x轴有重叠
if (overlapX >= 6)
{
//找到重叠区域
var rangeList = FindPassage(room, nextRoom,
- room.Position.Y < nextRoom.Position.Y ? DoorDirection.S : DoorDirection.N);
+ room.GetVerticalStart() < nextRoom.GetVerticalStart() ? DoorDirection.S : DoorDirection.N);
while (rangeList.Count > 0)
{
@@ -300,19 +300,19 @@
var range = Utils.RandomChooseAndRemove(rangeList);
var x = Utils.RandomRangeInt(range.X, range.Y);
- if (room.Position.Y < nextRoom.Position.Y) //room在上, nextRoom在下
+ if (room.GetVerticalStart() < nextRoom.GetVerticalStart()) //room在上, nextRoom在下
{
roomDoor.Direction = DoorDirection.S;
nextRoomDoor.Direction = DoorDirection.N;
- roomDoor.OriginPosition = new Vector2(x, room.Position.Y + room.Size.Y);
- nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.Position.Y);
+ roomDoor.OriginPosition = new Vector2(x, room.GetVerticalEnd());
+ nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.GetVerticalStart());
}
else //room在下, nextRoom在上
{
roomDoor.Direction = DoorDirection.N;
nextRoomDoor.Direction = DoorDirection.S;
- roomDoor.OriginPosition = new Vector2(x, room.Position.Y);
- nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.Position.Y + nextRoom.Size.Y);
+ roomDoor.OriginPosition = new Vector2(x, room.GetVerticalStart());
+ nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.GetVerticalEnd());
}
//判断门之间的通道是否有物体碰到
@@ -337,14 +337,14 @@
///
private bool TryConnectVerticalDoor(RoomInfo room, RoomDoorInfo roomDoor, RoomInfo nextRoom, RoomDoorInfo nextRoomDoor)
{
- var overlapY = Mathf.Min(room.Position.Y + room.Size.Y, nextRoom.Position.Y + nextRoom.Size.Y) -
- Mathf.Max(room.Position.Y, nextRoom.Position.Y);
+ var overlapY = Mathf.Min(room.GetVerticalEnd(), nextRoom.GetVerticalEnd()) -
+ Mathf.Max(room.GetVerticalStart(), nextRoom.GetVerticalStart());
//这种情况下y轴有重叠
if (overlapY >= 6)
{
//找到重叠区域
var rangeList = FindPassage(room, nextRoom,
- room.Position.X < nextRoom.Position.X ? DoorDirection.E : DoorDirection.W);
+ room.GetHorizontalStart() < nextRoom.GetHorizontalStart() ? DoorDirection.E : DoorDirection.W);
while (rangeList.Count > 0)
{
@@ -352,19 +352,19 @@
var range = Utils.RandomChooseAndRemove(rangeList);
var y = Utils.RandomRangeInt(range.X, range.Y);
- if (room.Position.X < nextRoom.Position.X) //room在左, nextRoom在右
+ if (room.GetHorizontalStart() < nextRoom.GetHorizontalStart()) //room在左, nextRoom在右
{
roomDoor.Direction = DoorDirection.E;
nextRoomDoor.Direction = DoorDirection.W;
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X, y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X, y);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalEnd(), y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalStart(), y);
}
else //room在右, nextRoom在左
{
roomDoor.Direction = DoorDirection.W;
nextRoomDoor.Direction = DoorDirection.E;
- roomDoor.OriginPosition = new Vector2(room.Position.X, y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X, y);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalStart(), y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalEnd(), y);
}
//判断门之间的通道是否有物体碰到
@@ -388,10 +388,10 @@
{
//这种情况下x和y轴都没有重叠, 那么就只能生成拐角通道了
- // var overlapX = Mathf.Min(room.Position.X + room.Size.X, nextRoom.Position.X + nextRoom.Size.X) -
- // Mathf.Max(room.Position.X, nextRoom.Position.X);
- // var overlapY = Mathf.Min(room.Position.Y + room.Size.Y, nextRoom.Position.Y + nextRoom.Size.Y) -
- // Mathf.Max(room.Position.Y, nextRoom.Position.Y);
+ // var overlapX = Mathf.Min(room.GetHorizontalEnd(), nextRoom.GetHorizontalEnd()) -
+ // Mathf.Max(room.GetHorizontalStart(), nextRoom.GetHorizontalStart());
+ // var overlapY = Mathf.Min(room.GetVerticalEnd(), nextRoom.GetVerticalEnd()) -
+ // Mathf.Max(room.GetVerticalStart(), nextRoom.GetVerticalStart());
//var offset1 = Mathf.Clamp(overlapX + 2, 2, 6);
//var offset2 = Mathf.Clamp(overlapY + 2, 2, 6);
@@ -402,9 +402,9 @@
//焦点
Vector2 cross;
- if (room.Position.X > nextRoom.Position.X)
+ if (room.GetHorizontalStart() > nextRoom.GetHorizontalStart())
{
- if (room.Position.Y > nextRoom.Position.Y)
+ if (room.GetVerticalStart() > nextRoom.GetVerticalStart())
{
if (Utils.RandomBoolean())
{
@@ -416,9 +416,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X + offset1, room.Position.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X,
- nextRoom.Position.Y + nextRoom.Size.Y - offset2 - 6);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalStart() + offset1, room.GetVerticalStart());
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalEnd(),
+ nextRoom.GetVerticalEnd() - offset2 - 6);
cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
}
else
@@ -431,9 +431,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X, room.Position.Y + offset2);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X - offset1 - 6,
- nextRoom.Position.Y + nextRoom.Size.Y);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalStart(), room.GetVerticalStart() + offset2);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalEnd() - offset1 - 6,
+ nextRoom.GetVerticalEnd());
cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
}
}
@@ -449,9 +449,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X + offset1, room.Position.Y + room.Size.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X,
- nextRoom.Position.Y + offset2);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalStart() + offset1, room.GetVerticalEnd());
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalEnd(),
+ nextRoom.GetVerticalStart() + offset2);
cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
}
else
@@ -465,16 +465,16 @@
}
roomDoor.OriginPosition =
- new Vector2(room.Position.X, room.Position.Y + room.Size.Y - offset2 - 6); //
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X - offset2 - 6,
- nextRoom.Position.Y);
+ new Vector2(room.GetHorizontalStart(), room.GetVerticalEnd() - offset2 - 6); //
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalEnd() - offset2 - 6,
+ nextRoom.GetVerticalStart());
cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
}
}
}
else
{
- if (room.Position.Y > nextRoom.Position.Y)
+ if (room.GetVerticalStart() > nextRoom.GetVerticalStart())
{
if (Utils.RandomBoolean())
{
@@ -486,9 +486,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X, room.Position.Y + offset2);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + offset1,
- nextRoom.Position.Y + nextRoom.Size.Y);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalEnd(), room.GetVerticalStart() + offset2);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalStart() + offset1,
+ nextRoom.GetVerticalEnd());
cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
}
else
@@ -501,9 +501,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X - offset1 - 6, room.Position.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X,
- nextRoom.Position.Y + nextRoom.Size.Y - offset2 - 6);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalEnd() - offset1 - 6, room.GetVerticalStart());
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalStart(),
+ nextRoom.GetVerticalEnd() - offset2 - 6);
cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
}
}
@@ -519,9 +519,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X,
- room.Position.Y + room.Size.Y - offset2 - 6);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + offset1, nextRoom.Position.Y);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalEnd(),
+ room.GetVerticalEnd() - offset2 - 6);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalStart() + offset1, nextRoom.GetVerticalStart());
cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
}
else
@@ -534,9 +534,9 @@
return false;
}
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X - offset1 - 6,
- room.Position.Y + room.Size.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X, nextRoom.Position.Y + offset2);
+ roomDoor.OriginPosition = new Vector2(room.GetHorizontalEnd() - offset1 - 6,
+ room.GetVerticalEnd());
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.GetHorizontalStart(), nextRoom.GetVerticalStart() + offset2);
cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
}
}
@@ -692,15 +692,15 @@
if (direction == DoorDirection.E || direction == DoorDirection.W) //第二个门向← 或者 第二个门向→
{
range = CalcOverlapRange(
- room.Position.Y * TileCellSize + doorAreaInfo1.Start, room.Position.Y * TileCellSize + doorAreaInfo1.End,
- nextRoom.Position.Y * TileCellSize + doorAreaInfo2.Start, nextRoom.Position.Y * TileCellSize + doorAreaInfo2.End
+ room.GetVerticalStart() * TileCellSize + doorAreaInfo1.Start, room.GetVerticalStart() * TileCellSize + doorAreaInfo1.End,
+ nextRoom.GetVerticalStart() * TileCellSize + doorAreaInfo2.Start, nextRoom.GetVerticalStart() * TileCellSize + doorAreaInfo2.End
);
}
else //第二个门向↑ 或者 第二个门向↓
{
range = CalcOverlapRange(
- room.Position.X * TileCellSize + doorAreaInfo1.Start, room.Position.X * TileCellSize + doorAreaInfo1.End,
- nextRoom.Position.X * TileCellSize + doorAreaInfo2.Start, nextRoom.Position.X * TileCellSize + doorAreaInfo2.End
+ room.GetHorizontalStart() * TileCellSize + doorAreaInfo1.Start, room.GetHorizontalStart() * TileCellSize + doorAreaInfo1.End,
+ nextRoom.GetHorizontalStart() * TileCellSize + doorAreaInfo2.Start, nextRoom.GetHorizontalStart() * TileCellSize + doorAreaInfo2.End
);
}
//交集范围够生成门
diff --git a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
index 67db118..0af8262 100644
--- a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
@@ -48,21 +48,33 @@
///
public RoomInfo Prev;
+ ///
+ /// 获取房间横轴结束位置, 单位: 格
+ ///
public int GetHorizontalEnd()
{
return Position.X + Size.X;
}
+ ///
+ /// 获取房间纵轴结束位置, 单位: 格
+ ///
public int GetVerticalEnd()
{
return Position.Y + Size.Y;
}
+ ///
+ /// 获取房间横轴开始位置, 单位: 格
+ ///
public int GetHorizontalStart()
{
return Position.X;
}
+ ///
+ /// 获取房间纵轴开始位置, 单位: 格
+ ///
public int GetVerticalStart()
{
return Position.Y;