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); } }