diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json index 0962961..1685213 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json @@ -1 +1 @@ -[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":19,"Y":2},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":8,"Y":19},"Size":{"X":83,"Y":73},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":11,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-15,"Y":31},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":36},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":35,"Y":2},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":-13,"Y":3},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0005","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"40"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":121,"Y":111},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"enemy0001","Weight":100,"Attr":{"Face":"0","Weapon":"weapon0007","CurrAmmon":"60","ResidueAmmo":"60"},"Altitude":0,"VerticalSpeed":0}]}]]}] \ No newline at end of file +[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":19,"Y":2},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":8,"Y":19},"Size":{"X":83,"Y":73},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":11,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-15,"Y":31},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":36},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":35,"Y":2},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}] \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png index 1cd9c2a..3f0900c 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preview.png Binary files differ diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json index 8572628..4285d01 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/RoomInfo.json @@ -1 +1 @@ -{"Position":{"X":-9,"Y":-7},"Size":{"X":19,"Y":16},"DoorAreaInfos":[],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""} \ No newline at end of file +{"Position":{"X":-5,"Y":-4},"Size":{"X":11,"Y":10},"DoorAreaInfos":[],"GroupName":"TestGroup1","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""} \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json index a385684..03f3578 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/TileInfo.json @@ -1 +1 @@ -{"NavigationList":[{"Type":0,"Points":[-120,-88,136,-88,136,128,-120,128]}],"Floor":[8,7,0,0,8,8,6,0,0,8,8,5,0,0,8,8,4,0,0,8,8,3,0,0,8,8,2,0,0,8,8,1,0,0,8,8,0,0,0,8,8,-1,0,0,8,8,-2,0,0,8,8,-3,0,0,8,8,-4,0,0,8,8,-5,0,0,8,8,-6,0,0,8,7,7,0,0,8,7,6,0,0,8,7,5,0,0,8,7,4,0,0,8,7,3,0,0,8,7,2,0,0,8,7,1,0,0,8,7,0,0,0,8,7,-1,0,0,8,7,-2,0,0,8,7,-3,0,0,8,7,-4,0,0,8,7,-5,0,0,8,7,-6,0,0,8,6,7,0,0,8,6,6,0,0,8,6,5,0,0,8,6,4,0,0,8,6,3,0,0,8,6,2,0,0,8,6,1,0,0,8,6,0,0,0,8,6,-1,0,0,8,6,-2,0,0,8,6,-3,0,0,8,6,-4,0,0,8,6,-5,0,0,8,6,-6,0,0,8,5,7,0,0,8,5,6,0,0,8,5,5,0,0,8,5,4,0,0,8,5,3,0,0,8,5,2,0,0,8,5,1,0,0,8,5,0,0,0,8,5,-1,0,0,8,5,-2,0,0,8,5,-3,0,0,8,5,-4,0,0,8,5,-5,0,0,8,5,-6,0,0,8,4,7,0,0,8,4,6,0,0,8,4,5,0,0,8,4,4,0,0,8,4,3,0,0,8,4,2,0,0,8,4,1,0,0,8,4,0,0,0,8,4,-1,0,0,8,4,-2,0,0,8,4,-3,0,0,8,4,-4,0,0,8,4,-5,0,0,8,4,-6,0,0,8,-4,7,0,0,8,-4,6,0,0,8,-4,5,0,0,8,-4,4,0,0,8,-4,3,0,0,8,-4,2,0,0,8,-4,1,0,0,8,-4,0,0,0,8,-4,-1,0,0,8,-4,-2,0,0,8,-4,-3,0,0,8,-4,-4,0,0,8,-4,-5,0,0,8,-4,-6,0,0,8,-5,7,0,0,8,-5,6,0,0,8,-5,5,0,0,8,-5,4,0,0,8,-5,3,0,0,8,-5,2,0,0,8,-5,1,0,0,8,-5,0,0,0,8,-5,-1,0,0,8,-5,-2,0,0,8,-5,-3,0,0,8,-5,-4,0,0,8,-5,-5,0,0,8,-5,-6,0,0,8,-6,7,0,0,8,-6,6,0,0,8,-6,5,0,0,8,-6,4,0,0,8,-6,3,0,0,8,-6,2,0,0,8,-6,1,0,0,8,-6,0,0,0,8,-6,-1,0,0,8,-6,-2,0,0,8,-6,-3,0,0,8,-6,-4,0,0,8,-6,-5,0,0,8,-6,-6,0,0,8,-7,7,0,0,8,-7,6,0,0,8,-7,5,0,0,8,-7,4,0,0,8,-7,3,0,0,8,-7,2,0,0,8,-7,1,0,0,8,-7,0,0,0,8,-7,-1,0,0,8,-7,-2,0,0,8,-7,-3,0,0,8,-7,-4,0,0,8,-7,-5,0,0,8,-7,-6,0,0,8,-8,7,0,0,8,-8,6,0,0,8,-8,5,0,0,8,-8,4,0,0,8,-8,3,0,0,8,-8,2,0,0,8,-8,1,0,0,8,-8,0,0,0,8,-8,-1,0,0,8,-8,-2,0,0,8,-8,-3,0,0,8,-8,-4,0,0,8,-8,-5,0,0,8,-8,-6,0,0,8,-3,7,0,0,8,-3,6,0,0,8,-3,5,0,0,8,-3,4,0,0,8,-3,-3,0,0,8,-3,-4,0,0,8,-3,-5,0,0,8,-3,-6,0,0,8,-3,-2,0,0,8,-3,-1,0,0,8,-3,0,0,0,8,-3,1,0,0,8,-3,2,0,0,8,-3,3,0,0,8,-2,7,0,0,8,-2,6,0,0,8,-2,5,0,0,8,-2,4,0,0,8,-2,-3,0,0,8,-2,-4,0,0,8,-2,-5,0,0,8,-2,-6,0,0,8,-2,-2,0,0,8,-2,-1,0,0,8,-2,0,0,0,8,-2,1,0,0,8,-2,2,0,0,8,-2,3,0,0,8,-1,7,0,0,8,-1,6,0,0,8,-1,5,0,0,8,-1,4,0,0,8,-1,-3,0,0,8,-1,-4,0,0,8,-1,-5,0,0,8,-1,-6,0,0,8,-1,-2,0,0,8,-1,-1,0,0,8,-1,0,0,0,8,-1,1,0,0,8,-1,2,0,0,8,-1,3,0,0,8,0,7,0,0,8,0,6,0,0,8,0,5,0,0,8,0,4,0,0,8,0,-3,0,0,8,0,-4,0,0,8,0,-5,0,0,8,0,-6,0,0,8,0,-2,0,0,8,0,-1,0,0,8,0,0,0,0,8,0,1,0,0,8,0,2,0,0,8,0,3,0,0,8,1,7,0,0,8,1,6,0,0,8,1,5,0,0,8,1,4,0,0,8,1,-3,0,0,8,1,-4,0,0,8,1,-5,0,0,8,1,-6,0,0,8,1,-2,0,0,8,1,-1,0,0,8,1,0,0,0,8,1,1,0,0,8,1,2,0,0,8,1,3,0,0,8,2,7,0,0,8,2,6,0,0,8,2,5,0,0,8,2,4,0,0,8,2,-3,0,0,8,2,-4,0,0,8,2,-5,0,0,8,2,-6,0,0,8,2,-2,0,0,8,2,-1,0,0,8,2,0,0,0,8,2,1,0,0,8,2,2,0,0,8,2,3,0,0,8,3,7,0,0,8,3,6,0,0,8,3,5,0,0,8,3,4,0,0,8,3,-3,0,0,8,3,-4,0,0,8,3,-5,0,0,8,3,-6,0,0,8,3,-2,0,0,8,3,-1,0,0,8,3,0,0,0,8,3,1,0,0,8,3,2,0,0,8,3,3,0,0,8],"Middle":[-8,-7,0,2,7,-7,-7,0,2,7,-6,-7,0,2,7,-5,-7,0,2,7,-4,-7,0,2,7,-3,-7,0,2,7,-2,-7,0,2,7,-1,-7,0,2,7,0,-7,0,2,7,1,-7,0,2,7,2,-7,0,2,7,3,-7,0,2,7,4,-7,0,2,7,5,-7,0,2,7,6,-7,0,2,7,7,-7,0,2,7,8,-7,0,2,7],"Top":[-9,-7,0,3,4,-9,-6,0,3,3,-9,-5,0,3,3,-9,-4,0,3,3,-9,-3,0,3,3,-9,-2,0,3,3,-9,-1,0,3,3,-9,0,0,3,3,-9,1,0,3,3,-9,2,0,3,3,-9,3,0,3,3,-9,4,0,3,3,-9,5,0,3,3,-9,6,0,3,3,-9,7,0,3,3,-9,8,0,11,2,-8,8,0,2,2,-7,8,0,2,2,-6,8,0,2,2,-5,8,0,2,2,-4,8,0,2,2,-3,8,0,2,2,-2,8,0,2,2,-1,8,0,2,2,0,8,0,2,2,1,8,0,2,2,2,8,0,2,2,3,8,0,2,2,4,8,0,2,2,5,8,0,2,2,6,8,0,2,2,7,8,0,2,2,8,8,0,2,2,9,-7,0,1,4,9,-6,0,1,3,9,-5,0,1,3,9,-4,0,1,3,9,-3,0,1,3,9,-2,0,1,3,9,-1,0,1,3,9,0,0,1,3,9,1,0,1,3,9,2,0,1,3,9,3,0,1,3,9,4,0,1,3,9,5,0,1,3,9,6,0,1,3,9,7,0,1,3,9,8,0,13,2]} \ No newline at end of file +{"NavigationList":[{"Type":0,"Points":[-56,-40,72,-40,72,80,-56,80]}],"Floor":[1,4,0,0,8,1,3,0,0,8,1,2,0,0,8,1,1,0,0,8,1,0,0,0,8,1,-1,0,0,8,1,-2,0,0,8,1,-3,0,0,8,2,4,0,0,8,2,3,0,0,8,2,2,0,0,8,2,1,0,0,8,2,0,0,0,8,2,-1,0,0,8,2,-2,0,0,8,2,-3,0,0,8,3,4,0,0,8,3,3,0,0,8,3,2,0,0,8,3,1,0,0,8,3,0,0,0,8,3,-1,0,0,8,3,-2,0,0,8,3,-3,0,0,8,4,4,0,0,8,4,3,0,0,8,4,2,0,0,8,4,1,0,0,8,4,0,0,0,8,4,-1,0,0,8,4,-2,0,0,8,4,-3,0,0,8,0,4,0,0,8,0,3,0,0,8,0,2,0,0,8,0,1,0,0,8,0,0,0,0,8,0,-1,0,0,8,0,-2,0,0,8,0,-3,0,0,8,-1,4,0,0,8,-1,3,0,0,8,-1,2,0,0,8,-1,1,0,0,8,-1,0,0,0,8,-1,-1,0,0,8,-1,-2,0,0,8,-1,-3,0,0,8,-2,4,0,0,8,-2,3,0,0,8,-2,2,0,0,8,-2,1,0,0,8,-2,0,0,0,8,-2,-1,0,0,8,-2,-2,0,0,8,-2,-3,0,0,8,-3,4,0,0,8,-3,3,0,0,8,-3,2,0,0,8,-3,1,0,0,8,-3,0,0,0,8,-3,-1,0,0,8,-3,-2,0,0,8,-3,-3,0,0,8,-4,4,0,0,8,-4,3,0,0,8,-4,2,0,0,8,-4,1,0,0,8,-4,0,0,0,8,-4,-1,0,0,8,-4,-2,0,0,8,-4,-3,0,0,8],"Middle":[-4,-4,0,2,7,-3,-4,0,2,7,-2,-4,0,2,7,-1,-4,0,2,7,0,-4,0,2,7,1,-4,0,2,7,2,-4,0,2,7,3,-4,0,2,7,4,-4,0,2,7],"Top":[-5,-4,0,3,4,-5,-3,0,3,3,-5,-2,0,3,3,-5,-1,0,3,3,-5,0,0,3,3,-5,1,0,3,3,-5,2,0,3,3,-5,3,0,3,3,-5,4,0,3,3,-5,5,0,11,2,-4,5,0,2,2,-3,5,0,2,2,-2,5,0,2,2,-1,5,0,2,2,0,5,0,2,2,1,5,0,2,2,2,5,0,2,2,3,5,0,2,2,4,5,0,2,2,5,-4,0,1,4,5,-3,0,1,3,5,-2,0,1,3,5,-1,0,1,3,5,0,0,1,3,5,1,0,1,3,5,2,0,1,3,5,3,0,1,3,5,4,0,1,3,5,5,0,13,2]} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs index 40c0c4a..a2cb922 100644 --- a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs +++ b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs @@ -31,6 +31,8 @@ public bool IsFirstEnterFlag { get; private set; } = true; private bool _init = false; + private Vector2 _initSize; + private RectangleShape2D _shape; /// /// 根据矩形区域初始化归属区域 @@ -44,10 +46,12 @@ _init = true; + _initSize = rect2.Size; RoomInfo = roomInfo; var collisionShape = new CollisionShape2D(); collisionShape.GlobalPosition = rect2.Position + rect2.Size / 2; var shape = new RectangleShape2D(); + _shape = shape; shape.Size = rect2.Size; collisionShape.Shape = shape; AddChild(collisionShape); @@ -270,4 +274,20 @@ _includeItems.Clear(); _enterItems.Clear(); } + + /// + /// 在初始区域的基础上扩展区域, size为扩展大小 + /// + public void ExtendedRegion(Vector2 size) + { + _shape.Size = _initSize + size; + } + + /// + /// 将区域还原到初始大小 + /// + public void RestoreRegion() + { + _shape.Size = _initSize; + } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs index a37d67c..1d3b34a 100644 --- a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs @@ -85,6 +85,7 @@ public bool IsSeclusion { get; private set; } = false; public bool IsDestroyed { get; private set; } + private bool _openDoorFlag = true; // private bool _beReady = false; // private bool _waveStart = false; @@ -229,12 +230,9 @@ RoomPreinstall.StartWave(); return; } - + //关门 - foreach (var doorInfo in Doors) - { - doorInfo.Door.CloseDoor(); - } + CloseDoor(); IsSeclusion = true; //执行第一波生成 @@ -249,13 +247,10 @@ if (RoomPreinstall.IsLastWave) //所有 mark 都走完了 { IsSeclusion = false; - //开门 if (RoomPreinstall.HasEnemy()) { - foreach (var doorInfo in Doors) - { - doorInfo.Door.OpenDoor(); - } + //开门 + OpenDoor(); } //所有标记执行完成 RoomPreinstall.OverWave(); @@ -265,4 +260,38 @@ RoomPreinstall.NextWave(); } } + + /// + /// 打开所有门 + /// + public void OpenDoor() + { + if (!_openDoorFlag) + { + _openDoorFlag = true; + AffiliationArea.RestoreRegion(); + } + + foreach (var doorInfo in Doors) + { + doorInfo.Door.OpenDoor(); + } + } + + /// + /// 关闭所有门 + /// + public void CloseDoor() + { + if (_openDoorFlag) + { + _openDoorFlag = false; + AffiliationArea.ExtendedRegion(new Vector2(GameConfig.TileCellSize * 4, GameConfig.TileCellSize * 4)); + } + + foreach (var doorInfo in Doors) + { + doorInfo.Door.CloseDoor(); + } + } } \ No newline at end of file