diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs
index 057fb53..f14e276 100644
--- a/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs
@@ -96,6 +96,23 @@
}
///
+ /// 世界坐标下的终点坐标, 单位: 像素
+ ///
+ public Vector2I GetWorldEndPosition()
+ {
+ if (Direction == DoorDirection.E || Direction == DoorDirection.W)
+ {
+ return GetWorldOriginPosition() + new Vector2I(0, 4 * GameConfig.TileCellSize);
+ }
+ else if (Direction == DoorDirection.N || Direction == DoorDirection.S)
+ {
+ return GetWorldOriginPosition() + new Vector2I(4 * GameConfig.TileCellSize, 0);
+ }
+
+ return default;
+ }
+
+ ///
/// 获取直连门过道区域数据, 单位: 格, 如果当前门连接区域带交叉点, 则报错
///
public Rect2I GetAisleRect()
diff --git a/DungeonShooting_Godot/src/game/GameApplication.cs b/DungeonShooting_Godot/src/game/GameApplication.cs
index 396fd8c..c2014f7 100644
--- a/DungeonShooting_Godot/src/game/GameApplication.cs
+++ b/DungeonShooting_Godot/src/game/GameApplication.cs
@@ -108,7 +108,7 @@
//固定帧率
//Engine.MaxFps = TargetFps;
//调试绘制开关
- ActivityObject.IsDebug = true;
+ ActivityObject.IsDebug = false;
//Engine.TimeScale = 0.2f;
//调整窗口分辨率
OnWindowSizeChanged();
diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs
index 34190dc..e63703d 100644
--- a/DungeonShooting_Godot/src/game/room/DungeonManager.cs
+++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs
@@ -336,16 +336,13 @@
{
var data = list[i];
var points = data.GetPoints();
- foreach (var point in points)
+ if (InLength(points, doorPosition, 32) && InLength(points, roomInfoDoor.GetWorldEndPosition(), 32))
{
- if (point.DistanceSquaredTo(doorPosition) <= 32 * 32)
- {
- roomInfoDoor.AisleNavigation = data;
- roomInfoDoor.ConnectDoor.AisleNavigation = data;
+ roomInfoDoor.AisleNavigation = data;
+ roomInfoDoor.ConnectDoor.AisleNavigation = data;
- flag = true;
- list.RemoveAt(i);
- }
+ flag = true;
+ list.RemoveAt(i);
}
}
@@ -355,7 +352,20 @@
}
});
}
-
+
+ private bool InLength(Vector2[] points, Vector2 targetPoint, float len)
+ {
+ foreach (var point in points)
+ {
+ if (point.DistanceSquaredTo(targetPoint) <= len * len)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
// 初始化房间
private void InitRoom(RoomInfo roomInfo)
{
diff --git a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs
index 62afa94..265fac5 100644
--- a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs
@@ -37,6 +37,7 @@
var startRoom = GameApplication.Instance.DungeonManager.StartRoomInfo;
startRoom.EachRoom(roomInfo =>
{
+ //房间区域
var navigationPolygonData = roomInfo.RoomSplit.TileInfo.NavigationList[0];
var points = navigationPolygonData.GetPoints();
var newPoints = new Vector2[points.Length];
@@ -49,21 +50,22 @@
outline.SetPoints(newPoints);
S_Root.AddChild(outline);
+ //过道
if (roomInfo.Doors != null)
{
foreach (var doorInfo in roomInfo.Doors)
{
if (doorInfo.IsForward)
{
- var aislePoints = doorInfo.Navigation.CloseNavigationData.GetPoints();
- var newAislePoints = new Vector2[aislePoints.Length];
- for (var i = 0; i < aislePoints.Length; i++)
- {
- newAislePoints[i] = roomInfo.ToGlobalPosition(aislePoints[i]);
- }
+ var aislePoints = doorInfo.AisleNavigation.GetPoints();
+ // var newAislePoints = new Vector2[aislePoints.Length];
+ // for (var i = 0; i < aislePoints.Length; i++)
+ // {
+ // newAislePoints[i] = roomInfo.ToGlobalPosition(aislePoints[i]);
+ // }
var aisleOutline = new PolygonOutline();
- aisleOutline.SetPoints(newAislePoints);
+ aisleOutline.SetPoints(aislePoints);
S_Root.AddChild(aisleOutline);
}
}