diff --git a/DungeonShooting_Godot/src/framework/map/DungeonTile.cs b/DungeonShooting_Godot/src/framework/map/DungeonTile.cs index 830714d..fc5a06d 100644 --- a/DungeonShooting_Godot/src/framework/map/DungeonTile.cs +++ b/DungeonShooting_Godot/src/framework/map/DungeonTile.cs @@ -23,7 +23,7 @@ /// /// 连接房间的过道的地板层级 /// - public const int AisleFloorLayer = 3; + public const int AisleFloorMapLayer = 3; /// /// 配置层级的自定义数据名称 @@ -242,7 +242,7 @@ break; } - FillRect(AisleFloorLayer, config.Floor, doorInfo.Cross + Vector2.One, + FillRect(AisleFloorMapLayer, config.Floor, doorInfo.Cross + Vector2.One, new Vector2(GenerateDungeon.CorridorWidth - 2, GenerateDungeon.CorridorWidth - 2)); //墙壁, 0横向, 1纵向 @@ -378,7 +378,6 @@ { for (int j = 0; j < size.Y; j++) { - //tileMap.SetCell((int)pos.X + i, (int)pos.Y + j, -1); _tileRoot.SetCell(layer, new Vector2I((int)pos.X + i, (int)pos.Y + j), -1); } } @@ -386,39 +385,59 @@ private void FullHorizontalAisleWall(AutoTileConfig config, Rect2 rect, int type) { - FillRect(AisleFloorLayer, config.Floor, rect.Position + new Vector2(0, 1), rect.Size - new Vector2(0, 2)); + FillRect(AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(0, 1), rect.Size - new Vector2(0, 2)); FillRect(MiddleMapLayer, config.T, rect.Position, new Vector2(rect.Size.X, 1)); FillRect(TopMapLayer, config.B, rect.Position + new Vector2(0, rect.Size.Y - 1), new Vector2(rect.Size.X, 1)); //左 ClearRect(TopMapLayer, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); if (type == 1) { - FillRect(AisleFloorLayer, config.Floor, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); + FillRect(AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); + } + else + { + FillRect(FloorMapLayer, config.Floor, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); + //生成门的导航区域 } //右 ClearRect(TopMapLayer, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); if (type == 2) { - FillRect(AisleFloorLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); + FillRect(AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); + } + else + { + FillRect(FloorMapLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); + //生成门的导航区域 } } private void FullVerticalAisleWall(AutoTileConfig config, Rect2 rect, int type) { - FillRect(AisleFloorLayer, config.Floor, rect.Position + new Vector2(1, 0), rect.Size - new Vector2(2, 0)); + FillRect(AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, 0), rect.Size - new Vector2(2, 0)); FillRect(TopMapLayer, config.L, rect.Position, new Vector2(1, rect.Size.Y)); FillRect(TopMapLayer, config.R, rect.Position + new Vector2(rect.Size.X - 1, 0), new Vector2(1, rect.Size.Y)); //上 ClearRect(TopMapLayer, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); if (type == 1) { - FillRect(AisleFloorLayer, config.Floor, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); + FillRect(AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); + } + else + { + FillRect(FloorMapLayer, config.Floor, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); + //生成门的导航区域 } //下 ClearRect(MiddleMapLayer, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); if (type == 2) { - FillRect(AisleFloorLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); + FillRect(AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); + } + else + { + FillRect(FloorMapLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); + //生成门的导航区域 } } diff --git a/DungeonShooting_Godot/src/game/room/RoomManager.cs b/DungeonShooting_Godot/src/game/room/RoomManager.cs index 13b2818..60349be 100644 --- a/DungeonShooting_Godot/src/game/room/RoomManager.cs +++ b/DungeonShooting_Godot/src/game/room/RoomManager.cs @@ -34,8 +34,8 @@ private Font _font; private GenerateDungeon _generateDungeon; - //房间内所有导航网格数据 - private List _roomNavDataList = new List(); + //房间内所有静态导航网格数据 + private static List _roomStaticNavigationList = new List(); public override void _EnterTree() { @@ -64,10 +64,10 @@ _dungeonTile.AutoFillRoomTile(_autoTileConfig, _generateDungeon.StartRoom); //生成寻路网格 - _dungeonTile.GenerateNavigationPolygon(DungeonTile.AisleFloorLayer); + _dungeonTile.GenerateNavigationPolygon(DungeonTile.AisleFloorMapLayer); //挂载导航区域 _dungeonTile.MountNavigationPolygon(this); - _roomNavDataList.AddRange(_dungeonTile.GetPolygonData()); + _roomStaticNavigationList.AddRange(_dungeonTile.GetPolygonData()); //挂载所有导航区域 _generateDungeon.EachRoom(MountNavFromRoomInfo); @@ -159,7 +159,7 @@ // DrawLine(new Vector2(-5000, 0), new Vector2(5000, 0), Colors.Green); //绘制ai寻路区域 - Utils.DrawNavigationPolygon(this, _roomNavDataList.ToArray()); + Utils.DrawNavigationPolygon(this, _roomStaticNavigationList.ToArray()); } //绘制房间区域 //DrawRoomInfo(_generateDungeon.StartRoom); @@ -182,7 +182,7 @@ polygon.AddOutline(polygonPointArray); //存入汇总列表 - _roomNavDataList.Add(new NavigationPolygonData() + _roomStaticNavigationList.Add(new NavigationPolygonData() { Type = navigationPolygonData.Type, Points = polygonPointArray.Select(point => new SerializeVector2(point)).ToList(),