Bläddra i källkod

新版9合1出怪表

WGL 3 månader sedan
förälder
incheckning
2f671796f4
81 ändrade filer med 7171 tillägg och 4366 borttagningar
  1. 154 419
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEdPopup.cs
  2. 70 131
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEditor.cs
  3. 2 3
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMap.cs
  4. 0 2
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapLayer.cs
  5. 1 2
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapsAsset.cs
  6. 3 3
      ActionTowerDefense/Assets/GameLevelEditor/maps.asset
  7. 6 6
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs
  8. 1 1
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs.meta
  9. 6 6
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs
  10. 1 1
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs.meta
  11. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs
  12. 1 1
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs.meta
  13. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs
  14. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs.meta
  15. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs
  16. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs.meta
  17. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs
  18. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs.meta
  19. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs
  20. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs.meta
  21. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs
  22. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs.meta
  23. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs
  24. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs.meta
  25. 8 12
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs
  26. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs.meta
  27. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs
  28. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs.meta
  29. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs
  30. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs.meta
  31. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs
  32. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs.meta
  33. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs
  34. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs.meta
  35. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs
  36. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs.meta
  37. 25 7
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs
  38. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs.meta
  39. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs
  40. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs.meta
  41. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs
  42. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs.meta
  43. 45 10
      ActionTowerDefense/Assets/Gen/Tables.cs
  44. 7 0
      ActionTowerDefense/Assets/PIDI Game Development Framework/Planar Reflections 4/Shared Assets/Amplify Shader Editor Nodes/4.0.0 - Amplify Shader Editor Nodes.unitypackage.meta
  45. 320 15
      ActionTowerDefense/Assets/Scenes/Game.unity
  46. 1 1
      ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs
  47. 209 140
      ActionTowerDefense/Assets/Scripts/EnemyCreater.cs
  48. 3 2
      ActionTowerDefense/Assets/Scripts/ExcelEditor.cs
  49. 86 7
      ActionTowerDefense/Assets/Scripts/GameManager.cs
  50. 44 0
      ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs
  51. 11 0
      ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs.meta
  52. 89 31
      ActionTowerDefense/Assets/Scripts/Levels/LevelSelect.cs
  53. 115 0
      ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs
  54. 1 1
      ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs.meta
  55. 9 0
      ActionTowerDefense/Assets/Scripts/PoolManager.cs
  56. 1 1
      ActionTowerDefense/Assets/Scripts/Portal/PortalsCreater.cs
  57. 5 2
      ActionTowerDefense/Assets/Scripts/Rougue/SoldierLevelRecord.cs
  58. 2 1
      ActionTowerDefense/Assets/Scripts/Rougue/Test_LevelSetting.cs
  59. 4 0
      ActionTowerDefense/Assets/Scripts/Tower/EnemyTower.cs
  60. 0 3296
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json
  61. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy0.json
  62. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy1.json
  63. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy2.json
  64. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy3.json
  65. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy4.json
  66. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy5.json
  67. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy6.json
  68. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy7.json
  69. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy8.json
  70. 0 265
      ActionTowerDefense/GenerateDatas/json/cfgdynamicenemy.json
  71. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表0.xlsx
  72. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表1.xlsx
  73. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表2.xlsx
  74. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表3.xlsx
  75. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表4.xlsx
  76. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表5.xlsx
  77. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表6.xlsx
  78. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表7.xlsx
  79. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表8.xlsx
  80. BIN
      ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx
  81. BIN
      ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx

+ 154 - 419
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEdPopup.cs

@@ -6,6 +6,7 @@ using cfg;
 using System;
 using System.IO;
 using OfficeOpenXml;
+using SimpleJSON;
 
 public class GameMapEdPopup : PopupWindowContent
 {
@@ -80,20 +81,13 @@ public class GameMapEdPopup : PopupWindowContent
 				GameMapEditor.mapSize_w = Asset.maps[0].width;
 				GameMapEditor.mapSize_h = Asset.maps[0].height;
 				Asset.maps[0].expRatio = 1;
+				Asset.maps[0].levelId = Asset.levelID;
 				OnMapSelected(0);
 			}
             else
             {
-				if (GameMapEditor.asset.maps[0].isDynamic)
-				{
-					SaveAsNewCreateEnemyData(true);
-				}
-				else
-				{
-					SaveAsNewCreateEnemyData(false);
-				}
-				
-            }
+				SaveAsNewCreateEnemyData();
+			}
 			editorWindow.Close();
 		}
     }
@@ -107,47 +101,25 @@ public class GameMapEdPopup : PopupWindowContent
 	{
         if (isSelect)
         {
-			if(list.index + 1 >= GameMapEditor.asset.dynamicSheetStart)
-            {
-				ReloadDynamicEnemyData(list.index + 1);
-            }
-            else
-            {
-				ReloadCreateEnemyData(list.index + 1);
-			}
-
+			ReloadCreateEnemyData(list.index + 1);
+			
 			OnMapSelected(0);
         }
         else
         {
-            if (GameMapEditor.asset.maps[0].isDynamic)
-            {
-				SaveDynamicEnemyData(list.index + 1);
-            }
-            else
-            {
-				SaveCreateEnemyData(list.index + 1);
-			}
-        }
+			SaveCreateEnemyData(list.index + 1);
+		}
 		editorWindow.Close();
 	}
 
-	void SaveAsNewCreateEnemyData(bool isDynamic)
+	void SaveAsNewCreateEnemyData()
     {
-		string path = "";
-        if (isDynamic)
-        {
-			path = GameMapEditor.dynamicEnemyExcelPath;
-        }
-        else
-        {
-			path = GameMapEditor.createEnemyExcelPath;
-		}
-		
+		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
+		string path = GameMapEditor.createEnemyExcelPath + $"/出怪表{gameMap.levelId}.xlsx";
+
 		FileInfo fileInfo = new FileInfo(path);
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
         {
-			GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
 			// 拷贝 Sheet
 			ExcelWorksheet sourceSheet = package.Workbook.Worksheets[1];
             // 保存目标文件
@@ -163,27 +135,19 @@ public class GameMapEdPopup : PopupWindowContent
 				return;
 			}
 		}
-        if (isDynamic)
-        {
-			SaveDynamicEnemyData(0, true);
-        }
-        else
-        {
-			SaveCreateEnemyData(0, true);
-		}
+		SaveCreateEnemyData(0, true);
 
 	}
 
 	void SaveCreateEnemyData(int mapIdx, bool isNew = false)
 	{
-		string path = GameMapEditor.createEnemyExcelPath;
-		List<string> excelWorksheets = new();
 		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
+		string path = GameMapEditor.createEnemyExcelPath + $"/出怪表{gameMap.levelId}.xlsx";
 		FileInfo fileInfo = new FileInfo(path);
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		{
 
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
+			List<string> excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
 			if (!isNew)
 			{
 				if (!ExcelEditor.RenameSheet(package, excelWorksheets[mapIdx - 1], gameMap.showIdent))
@@ -207,152 +171,22 @@ public class GameMapEdPopup : PopupWindowContent
 				switch (layer.waveType) 
 				{
 					case WaveType.Common:
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.duration.ToString());
+						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.duration.ToString());
 						idInt++;
 						break;
 					case WaveType.FromTower:
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", layer.buildingId);
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", layer.buildingHp.ToString());
+						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.buildingId);
+						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", layer.buildingHp.ToString());
 						idFloat += 0.01f;
 						break;
 					case WaveType.Tower:
 						if(i == 0)
                         {
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.duration.ToString());
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.duration.ToString());
 						}
 						break;
 				}
 
-				if (layer.isDynamic)
-				{
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.dynamicSheet.ToString());
-					switch (layer.waveType)
-					{
-						case WaveType.Common:
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
-							break;
-						case WaveType.Tower:
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
-							break;
-						case WaveType.FromTower:
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", $"{idFloat:F2}");
-							break;
-					}
-					cell_row++;
-                }
-                else
-                {
-					foreach (var item in layer.spawnTimes)
-					{
-						SpawnTime spawnTime = item.Value;
-						try
-						{
-							if (spawnTime.pos.Count == 0)
-							{
-								continue;
-							}
-						}
-						catch (Exception e)
-						{
-							UnityEngine.Debug.LogException(e);
-						}
-
-						switch (layer.waveType)
-						{
-							case WaveType.Common:
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
-								break;
-							case WaveType.Tower:
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
-								break;
-							case WaveType.FromTower:
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", $"{idFloat:F2}");
-								break;
-						}
-
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"H{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
-						string posString = "";
-						for (int k = 0; k < spawnTime.pos.Count; k++)
-						{
-							int pos = spawnTime.pos[k] + 1;
-							int w = pos % GameMapEditor.mapSize_w;
-							int h = pos / GameMapEditor.mapSize_w;
-							if (w == 0)
-							{
-								posString += GameMapEditor.mapSize_w.ToString();
-								posString += ",";
-								posString += h.ToString();
-							}
-							else
-							{
-								posString += w.ToString();
-								posString += ",";
-								posString += (h + 1).ToString();
-							}
-							if (k == spawnTime.pos.Count - 1)
-							{
-								break;
-							}
-							posString += ",";
-						}
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"I{cell_row}", posString);
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"J{cell_row}", spawnTime.startTime.ToString());
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"K{cell_row}", spawnTime.endTime.ToString());
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"L{cell_row}", spawnTime.num.ToString());
-						cell_row++;
-					}
-				}
-
-
-            }
-			try
-			{
-				package.Save();
-			}
-			catch (System.InvalidOperationException e)
-			{
-				EditorUtility.DisplayDialog("Error", $"出怪表未关闭或Sheet名重复,请重试", "OK");
-				UnityEngine.Debug.LogException(e);
-				return;
-			}
-
-		}
-		UnityEngine.Debug.Log($"\"{gameMap.showIdent}\"表保存完毕!");
-		UnityEngine.Debug.Log("记得运行\"gen_code_json.bat\"更新数据!");
-		ExcelEditor.RunBat();
-	}
-
-	void SaveDynamicEnemyData(int mapIdx, bool isNew = false)
-	{
-		string path = GameMapEditor.dynamicEnemyExcelPath;
-		List<string> excelWorksheets = new();
-		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
-		FileInfo fileInfo = new FileInfo(path);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-		{
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
-			if (!isNew)
-			{
-				if (!ExcelEditor.RenameSheet(package, excelWorksheets[mapIdx - 1], gameMap.showIdent))
-				{
-					return;
-				}
-			}
-			ExcelEditor.RemoveExcelRows(package, gameMap.showIdent, 10, 500);
-			ExcelEditor.ModifyExcel(package, gameMap.showIdent, "D5", GameMapEditor.mapSize_w.ToString());
-			ExcelEditor.ModifyExcel(package, gameMap.showIdent, "D6", GameMapEditor.mapSize_h.ToString());
-
-			int cell_row = 10;
-			int idInt = 0;
-			for (int i = 0; i < gameMap.layers.Length; i++)
-			{
-				GameMapLayer layer = gameMap.layers[i];
-
-				ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
-				idInt++;
-
 				foreach (var item in layer.spawnTimes)
 				{
 					SpawnTime spawnTime = item.Value;
@@ -368,8 +202,21 @@ public class GameMapEdPopup : PopupWindowContent
 						UnityEngine.Debug.LogException(e);
 					}
 
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
+					switch (layer.waveType)
+					{
+						case WaveType.Common:
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
+							break;
+						case WaveType.Tower:
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
+							break;
+						case WaveType.FromTower:
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", $"{idFloat:F2}");
+							break;
+					}
+
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
 					string posString = "";
 					for (int k = 0; k < spawnTime.pos.Count; k++)
 					{
@@ -394,12 +241,14 @@ public class GameMapEdPopup : PopupWindowContent
 						}
 						posString += ",";
 					}
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", posString);
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", spawnTime.startTime.ToString());
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", spawnTime.endTime.ToString());
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"H{cell_row}", spawnTime.num.ToString());
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"H{cell_row}", posString);
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"I{cell_row}", spawnTime.startTime.ToString());
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"J{cell_row}", spawnTime.endTime.ToString());
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"K{cell_row}", spawnTime.num.ToString());
 					cell_row++;
 				}
+
+
 			}
 			try
 			{
@@ -420,267 +269,153 @@ public class GameMapEdPopup : PopupWindowContent
 
 	public void ReloadCreateEnemyData(int mapIdx)
 	{
-		string path = GameMapEditor.createEnemyExcelPath;
-		ExcelEditor.RunBat();
-		List<string> excelWorksheets = new();
-		Tables allCfgData = new Tables(ExcelEditor.Loader);
-		List<SingleCreateEnemyConfig> cfgCreateEnemy = allCfgData.CfgCreateEnemy.DataList;
 		GameMap gameMap = GameMapEditor.asset.maps[0];
-		FileInfo fileInfo = new FileInfo(path);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-		{
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
-
-			//导入关卡数据
-			gameMap.ident = GameMapEditor.asset.maps[mapIdx].ident;
-			gameMap.showIdent = gameMap.ident;
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D5"), out GameMapEditor.mapSize_w);
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D6"), out GameMapEditor.mapSize_h);
-			float.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "F5"), out gameMap.expRatio);
-			gameMap.Resize(GameMapEditor.mapSize_w, GameMapEditor.mapSize_h);
-		}
+		string path = GameMapEditor.createEnemyExcelPath + $"/出怪表{Asset.levelID}.xlsx";
+		gameMap.levelId = Asset.levelID;
+        ExcelEditor.RunBat();
+        List<string> excelWorksheets = new();
+		JSONNode keyValuePairs = JSON.Parse(File.ReadAllText($"GenerateDatas/json/CfgCreateEnemy{gameMap.levelId}.json"));
+		CreateEnemyConfig createEnemyConfig = new CreateEnemyConfig(keyValuePairs);
+		List<SingleCreateEnemyConfig> cfgCreateEnemy = createEnemyConfig.DataList;
+        
+        FileInfo fileInfo = new FileInfo(path);
+        using (ExcelPackage package = new ExcelPackage(fileInfo))
+        {
+            excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
 
-		//导入波次数据
-		GameMapEditor.currLayer = -1;
-		int mapId = -1;
-		float id = 0;
-		ArrayUtility.Clear(ref gameMap.layers);
-		for (int i = 0; i < cfgCreateEnemy.Count; i++)
-		{
-			if (cfgCreateEnemy[i].WaveID == -1)
-			{
-				if(mapId == mapIdx - 1)
+            //导入关卡数据
+            gameMap.ident = GameMapEditor.asset.maps[mapIdx].ident;
+            gameMap.showIdent = gameMap.ident;
+            int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D5"), out GameMapEditor.mapSize_w);
+            int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D6"), out GameMapEditor.mapSize_h);
+            float.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "F5"), out gameMap.expRatio);
+            gameMap.Resize(GameMapEditor.mapSize_w, GameMapEditor.mapSize_h);
+
+        }
+
+        //导入波次数据
+        GameMapEditor.currLayer = -1;
+        int mapId = -1;
+        float id = 0;
+        ArrayUtility.Clear(ref gameMap.layers);
+        for (int i = 0; i < cfgCreateEnemy.Count; i++)
+        {
+            if (cfgCreateEnemy[i].WaveID == -1)
+            {
+                if (mapId == mapIdx - 1)
                 {
-					break;
+                    break;
                 }
-				mapId++;
-				continue;
-			}
-			if(mapId == mapIdx - 1)
+                mapId++;
+                continue;
+            }
+            if (mapId == mapIdx - 1)
             {
-				if (cfgCreateEnemy[i].WaveID == 0)
+                if (cfgCreateEnemy[i].WaveID == 0)
                 {
-					SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
-					ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
-					gameMap.InitLayer(gameMap.layers.Length);
-					GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-					gameMapLayer.name = singleCreateEnemyConfig.WaveName;
-					gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
-					gameMapLayer.waveType = WaveType.Tower;
-
-					ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
-				}
+                    SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
+                    ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
+                    gameMap.InitLayer(gameMap.layers.Length);
+                    GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
+                    gameMapLayer.name = singleCreateEnemyConfig.WaveName;
+                    gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
+                    gameMapLayer.waveType = WaveType.Tower;
+
+                    ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
+                }
                 else
                 {
-					
-					if (cfgCreateEnemy[i].WaveID - cfgCreateEnemy[i - 1].WaveID > 1
-					|| cfgCreateEnemy[i].WaveID < cfgCreateEnemy[i - 1].WaveID)
-					{
-						UnityEngine.Debug.Log(cfgCreateEnemy[i].WaveID);
-						UnityEngine.Debug.Log(cfgCreateEnemy[i - 1].WaveID);
-						EditorUtility.DisplayDialog("Error", $"\"{excelWorksheets[mapIdx - 1]}\"关卡第\"{cfgCreateEnemy[i].WaveID}\"波顺序有误", "OK");
-					}
-					if (cfgCreateEnemy[i].WaveID != id)
-					{
-						//波次第一行的波次数据
-						SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
-						id = cfgCreateEnemy[i].WaveID;
-						ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
-						gameMap.InitLayer(gameMap.layers.Length);
-						GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-						gameMapLayer.name = singleCreateEnemyConfig.WaveName;
-						if(cfgCreateEnemy[i].WaveID < 1)
+
+                    if (cfgCreateEnemy[i].WaveID - cfgCreateEnemy[i - 1].WaveID > 1
+                    || cfgCreateEnemy[i].WaveID < cfgCreateEnemy[i - 1].WaveID)
+                    {
+                        UnityEngine.Debug.Log(cfgCreateEnemy[i].WaveID);
+                        UnityEngine.Debug.Log(cfgCreateEnemy[i - 1].WaveID);
+                        EditorUtility.DisplayDialog("Error", $"\"{excelWorksheets[mapIdx - 1]}\"关卡第\"{cfgCreateEnemy[i].WaveID}\"波顺序有误", "OK");
+                    }
+                    if (cfgCreateEnemy[i].WaveID != id)
+                    {
+                        //波次第一行的波次数据
+                        SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
+                        id = cfgCreateEnemy[i].WaveID;
+                        ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
+                        gameMap.InitLayer(gameMap.layers.Length);
+                        GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
+                        gameMapLayer.name = singleCreateEnemyConfig.WaveName;
+                        if (cfgCreateEnemy[i].WaveID < 1)
                         {
-							gameMapLayer.waveType = WaveType.FromTower;
-							gameMapLayer.buildingId = singleCreateEnemyConfig.BuildingID;
-							gameMapLayer.buildingHp = singleCreateEnemyConfig.BuildingHP;
-						}
+                            gameMapLayer.waveType = WaveType.FromTower;
+                            gameMapLayer.buildingId = singleCreateEnemyConfig.BuildingID;
+                            gameMapLayer.buildingHp = singleCreateEnemyConfig.BuildingHP;
+                        }
                         else
                         {
-							gameMapLayer.waveType = WaveType.Common;
-							gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
-						}
-						if(cfgCreateEnemy[i].Dynamic == 0)
-                        {
-							//波次第一行怪物数据
-							ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
-						}
-						else
-                        {
-							gameMapLayer.isDynamic = true;
-							gameMapLayer.dynamicSheet = cfgCreateEnemy[i].Dynamic;
+                            gameMapLayer.waveType = WaveType.Common;
+                            gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
                         }
-					}
-					else
-					{
-						GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
 						ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
 					}
-				}
+                    else
+                    {
+                        GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
+                        ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
+                    }
+                }
 
-			}
+            }
             else
             {
-				if(i == cfgCreateEnemy.Count - 1)
+                if (i == cfgCreateEnemy.Count - 1)
                 {
-					UnityEngine.Debug.LogError("请运行\"gen_code_json.bat\"更新表格数据");
+                    UnityEngine.Debug.LogError("请运行\"gen_code_json.bat\"更新表格数据");
                 }
             }
-		}
-		// 标记资源为脏数据,以便保存更改
-		EditorUtility.SetDirty(GameMapEditor.asset);
-		AssetDatabase.SaveAssets();
-		UnityEngine.Debug.Log($"\"{excelWorksheets[mapIdx - 1]}\"表导入完毕!");
-	}
-
-	public void ReloadDynamicEnemyData(int mapIdx)
-	{
-		int sheetId = mapIdx - GameMapEditor.asset.dynamicSheetStart;
-		string path = GameMapEditor.dynamicEnemyExcelPath;
-		ExcelEditor.RunBat();
-		List<string> excelWorksheets = new();
-		Tables allCfgData = new Tables(ExcelEditor.Loader);
-		List<SingleDynamicEnemyConfig> cfgDynamicEnemy = allCfgData.CfgDynamicEnemy.DataList;
-		GameMap gameMap = GameMapEditor.asset.maps[0];
-		FileInfo fileInfo = new FileInfo(path);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-		{
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
-
-			//导入关卡数据
-			gameMap.ident = GameMapEditor.asset.maps[mapIdx].ident;
-			gameMap.showIdent = gameMap.ident;
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[sheetId], "D5"), out GameMapEditor.mapSize_w);
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[sheetId], "D6"), out GameMapEditor.mapSize_h);
-			gameMap.Resize(GameMapEditor.mapSize_w, GameMapEditor.mapSize_h);
-			gameMap.isDynamic = true;
-		}
-
-		//导入波次数据
-		GameMapEditor.currLayer = -1;
-		int mapId = -1;
-		float id = 0;
-		ArrayUtility.Clear(ref gameMap.layers);
-		UnityEngine.Debug.Log(sheetId);
-		for (int i = 0; i < cfgDynamicEnemy.Count; i++)
-		{
-			if (cfgDynamicEnemy[i].WaveID == -1)
-			{
-				if (mapId == sheetId)
-				{
-					break;
-				}
-				mapId++;
-				continue;
-			}
-			if (mapId == sheetId)
-			{
-				
-				if (cfgDynamicEnemy[i].WaveID != id)
-				{
-					//波次第一行的波次数据
-					SingleDynamicEnemyConfig singleDynamicEnemyConfig = cfgDynamicEnemy[i];
-					id = cfgDynamicEnemy[i].WaveID;
-					ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
-					gameMap.InitLayer(gameMap.layers.Length);
-					GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-					gameMapLayer.name = singleDynamicEnemyConfig.WaveName;
-					gameMapLayer.waveType = WaveType.Common;
-					ReloadDynamicEnemy(gameMapLayer, cfgDynamicEnemy[i], excelWorksheets[sheetId]);
-				}
-				else
-				{
-					GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-					ReloadDynamicEnemy(gameMapLayer, cfgDynamicEnemy[i], excelWorksheets[sheetId]);
-				}
-
-			}
-		}
-		// 标记资源为脏数据,以便保存更改
-		EditorUtility.SetDirty(GameMapEditor.asset);
-		AssetDatabase.SaveAssets();
-		UnityEngine.Debug.Log($"\"{excelWorksheets[sheetId]}\"表导入完毕!");
-	}
+        }
+        // 标记资源为脏数据,以便保存更改
+        EditorUtility.SetDirty(GameMapEditor.asset);
+        AssetDatabase.SaveAssets();
+        UnityEngine.Debug.Log($"\"{excelWorksheets[mapIdx - 1]}\"表导入完毕!");
+    }
 
 
-	public void ReloadEnemyInWave(GameMapLayer layer, SingleCreateEnemyConfig cfgData, string SheetName)
+    public void ReloadEnemyInWave(GameMapLayer layer, SingleCreateEnemyConfig cfgData, string SheetName)
     {
-		if (cfgData.EnemyName == "")
-		{
-			EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
-			return;
-		}
-		GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
-		if (!layer.spawnTimes.ContainsKey(tile.id))
+        if (cfgData.EnemyName == "")
+        {
+            EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
+            return;
+        }
+        GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
+        if (!layer.spawnTimes.ContainsKey(tile.id))
         {
-			SpawnTime spawnTime = new();
+            SpawnTime spawnTime = new();
 
-			spawnTime.id = tile.id;
+            spawnTime.id = tile.id;
             if (cfgData.Position.Count % 2 != 0)
             {
-				UnityEngine.Debug.LogError($"出怪表\"{cfgData.WaveName}\"中\"{cfgData.EnemyName}\"的Position格式错误");
+                UnityEngine.Debug.LogError($"出怪表\"{cfgData.WaveName}\"中\"{cfgData.EnemyName}\"的Position格式错误");
             }
-			spawnTime.pos = new();
-			for(int i = 0; i < cfgData.Position.Count; i+=2)
+            spawnTime.pos = new();
+            for (int i = 0; i < cfgData.Position.Count; i += 2)
             {
-				int x = cfgData.Position[i];
-				int y = cfgData.Position[i + 1];
-				layer.grid[(y - 1) * GameMapEditor.mapSize_w + x -1] = spawnTime.id;
-				spawnTime.pos.Add((y - 1) * GameMapEditor.mapSize_w + x - 1);
+                int x = cfgData.Position[i];
+                int y = cfgData.Position[i + 1];
+                layer.grid[(y - 1) * GameMapEditor.mapSize_w + x - 1] = spawnTime.id;
+                spawnTime.pos.Add((y - 1) * GameMapEditor.mapSize_w + x - 1);
             }
-			spawnTime.startTime = cfgData.StartTime;
-			spawnTime.endTime = cfgData.EndTime;
-			spawnTime.num = cfgData.Count;
-			spawnTime.Hp = cfgData.HPRatio;
-			spawnTime.moveSpeed = cfgData.SpeedRatio;
-			spawnTime.attack = cfgData.AttackRatio;
-
-			layer.spawnTimes.Add(tile.id,spawnTime);
+            spawnTime.startTime = cfgData.StartTime;
+            spawnTime.endTime = cfgData.EndTime;
+            spawnTime.num = cfgData.Count;
+            spawnTime.Hp = cfgData.HPRatio;
+            spawnTime.moveSpeed = cfgData.SpeedRatio;
+            spawnTime.attack = cfgData.AttackRatio;
+
+            layer.spawnTimes.Add(tile.id, spawnTime);
         }
         else
         {
-			UnityEngine.Debug.LogError($"\"{layer.name}\"波次中\"{cfgData.EnemyName}\"重复");
+            UnityEngine.Debug.LogError($"\"{layer.name}\"波次中\"{cfgData.EnemyName}\"重复");
         }
     }
-
-	public void ReloadDynamicEnemy(GameMapLayer layer, SingleDynamicEnemyConfig cfgData, string SheetName)
-	{
-		if (cfgData.EnemyName == "")
-		{
-			EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
-			return;
-		}
-		GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
-		if (!layer.spawnTimes.ContainsKey(tile.id))
-		{
-			SpawnTime spawnTime = new();
-
-			spawnTime.id = tile.id;
-			if (cfgData.Position.Count % 2 != 0)
-			{
-				UnityEngine.Debug.LogError($"出怪表\"{cfgData.WaveName}\"中\"{cfgData.EnemyName}\"的Position格式错误");
-			}
-			spawnTime.pos = new();
-			for (int i = 0; i < cfgData.Position.Count; i += 2)
-			{
-				int x = cfgData.Position[i];
-				int y = cfgData.Position[i + 1];
-				layer.grid[(y - 1) * GameMapEditor.mapSize_w + x - 1] = spawnTime.id;
-				spawnTime.pos.Add((y - 1) * GameMapEditor.mapSize_w + x - 1);
-			}
-			spawnTime.startTime = cfgData.StartTime;
-			spawnTime.endTime = cfgData.EndTime;
-			spawnTime.num = cfgData.Count;
-			spawnTime.Hp = cfgData.HPRatio;
-			spawnTime.moveSpeed = cfgData.SpeedRatio;
-			spawnTime.attack = cfgData.AttackRatio;
-
-			layer.spawnTimes.Add(tile.id, spawnTime);
-		}
-		else
-		{
-			UnityEngine.Debug.LogError($"\"{layer.name}\"波次中\"{cfgData.EnemyName}\"重复");
-		}
-	}
-	// ----------------------------------------------------------------------------------------------------------------
+    // ----------------------------------------------------------------------------------------------------------------
 }

+ 70 - 131
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEditor.cs

@@ -6,6 +6,7 @@ using UnityEditor;
 using cfg;
 using System.IO;
 using OfficeOpenXml;
+using SimpleJSON;
 
 public class GameMapEditor : EditorWindow
 {
@@ -137,8 +138,7 @@ public class GameMapEditor : EditorWindow
 	private static readonly GUIContent GC_EditAuto = new GUIContent("Setup Auto-tile");
     private static readonly GUIContent GC_Viz = new GUIContent("*", "Toggle layer visblity in editor");
 
-	public static string createEnemyExcelPath = "Luban/Config/Datas/出怪表.xlsx";
-	public static string dynamicEnemyExcelPath = "Luban/Config/Datas/动态出怪表.xlsx";
+	public static string createEnemyExcelPath = "Luban/Config/Datas/EnemyCreater";
 	public static string enemyExcelPath = "Luban/Config/Datas/怪物表.xlsx";
 
     private GenericMenu addTileMenu = null;
@@ -629,30 +629,37 @@ public class GameMapEditor : EditorWindow
 		GUILayout.Box(GUIContent.none, GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.Height(3f));
 		Rect r = EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true));
 		{
-			// map selection button
-			r.height = EditorGUIUtility.singleLineHeight;
-			r.x = r.xMax - 200f; r.width = 100f; r.height = 15f;
-            if (GUI.Button(r, GC_ExcelSave))
-            {
-				ReloadSheetName(createEnemyExcelPath,dynamicEnemyExcelPath,true);
-				mapsPopup.Asset = asset;
-				mapsPopup.isSelect = false;
-				mapsPopup.OnMapSelected = OnMapSelected;
-				PopupWindow.Show(r, mapsPopup);
-			}
-			r.x = r.xMax; r.width = 100f; r.height = 15f;
-			if (GUI.Button(r, GC_MapSelect))
-            {
-				ReloadSheetName(createEnemyExcelPath, dynamicEnemyExcelPath);
-				mapsPopup.Asset = asset;
-				mapsPopup.isSelect = true;
-				mapsPopup.OnMapSelected = OnMapSelected;
-				PopupWindow.Show(r, mapsPopup);
+			EditorGUI.BeginChangeCheck();
+			EditorGUILayout.BeginHorizontal();
+			{
+				showMapProperties = EditorGUILayout.Foldout(showMapProperties, GC_MapHead, true);
+
+				asset.levelID = EditorGUILayout.IntField(asset.levelID, GUILayout.Width(15));
+
+				r.height = EditorGUIUtility.singleLineHeight;
+
+				r.x = r.xMax - 200f; r.width = 100f; r.height = 15f;
+				if (GUILayout.Button(GC_ExcelSave, GUILayout.Width(70)))
+				{
+					ReloadSheetName(createEnemyExcelPath, true);
+					mapsPopup.Asset = asset;
+					mapsPopup.isSelect = false;
+					mapsPopup.OnMapSelected = OnMapSelected;
+					PopupWindow.Show(r, mapsPopup);
+				}
+				r.x = r.xMax; r.width = 100f; r.height = 15f;
+				if (GUILayout.Button(GC_MapSelect, GUILayout.Width(75)))
+				{
+					ReloadSheetName(createEnemyExcelPath);
+					mapsPopup.Asset = asset;
+					mapsPopup.isSelect = true;
+					mapsPopup.OnMapSelected = OnMapSelected;
+					PopupWindow.Show(r, mapsPopup);
+				}
+				
 			}
+			EditorGUILayout.EndHorizontal();
 
-			// the active map's properties
-			EditorGUI.BeginChangeCheck();
-			showMapProperties = EditorGUILayout.Foldout(showMapProperties, GC_MapHead, true);
 			if (EditorGUI.EndChangeCheck()) EditorPrefs.SetBool("plyGameMapEd.showMapProps", showMapProperties);
 
 			if (showMapProperties)
@@ -712,71 +719,31 @@ public class GameMapEditor : EditorWindow
 		EditorGUILayout.EndVertical();
 	}
 
-	void ReloadSheetName(string path1, string path2, bool isSave = false)
+	void ReloadSheetName(string path1, bool isSave = false)
     {
-		List<string> excelWorksheets = new();
-		List<string> excelWorksheets1 = new();
-		FileInfo fileInfo = new FileInfo(path1);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-        {
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
+		for (int i = asset.maps.Count - 1; i > 0; i--)
+		{
+			asset.RemoveMapAtIndex(i);
 		}
-		fileInfo = new FileInfo(path2);
+		string path;
+		path = path1 + $"/出怪表{asset.levelID}.xlsx";
+		List<string> excelWorksheets = new();
+		FileInfo fileInfo = new FileInfo(path);
+
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		{
-			excelWorksheets1 = ExcelEditor.ReadExcelSheetsInfo(package);
+			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
 		}
-		Tables allCfgData = new Tables(ExcelEditor.Loader);
-		List<SingleCreateEnemyConfig> cfgCreateEnemy = allCfgData.CfgCreateEnemy.DataList;
 		//导入关卡数据
 		mapIdx = 0;
-		for (int i = asset.maps.Count - 1; i > 0; i--)
+
+		for (int j = 1; j < excelWorksheets.Count + 1; j++)
 		{
-			asset.RemoveMapAtIndex(i);
-		}
-		asset.dynamicSheetStart = excelWorksheets.Count + 1;
-		if (isSave)
-        {
-            if (asset.maps[0].isDynamic)
-            {
-				for (int i = 1; i < excelWorksheets1.Count + 1; i++)
-				{
-					if (i >= asset.maps.Count)
-					{
-						asset.AddMap();
-					}
-					asset.maps[i].ident = excelWorksheets1[i - 1];
-				}
-			}else
-            {
-				for (int i = 1; i < excelWorksheets.Count + 1; i++)
-				{
-					if (i >= asset.maps.Count)
-					{
-						asset.AddMap();
-					}
-					asset.maps[i].ident = excelWorksheets[i - 1];
-				}
-			}
-        }
-        else
-        {
-			for (int i = 1; i < excelWorksheets.Count + 1; i++)
-			{
-				if (i >= asset.maps.Count)
-				{
-					asset.AddMap();
-				}
-				asset.maps[i].ident = excelWorksheets[i - 1];
-			}
-			for (int i = asset.dynamicSheetStart; i < asset.dynamicSheetStart + excelWorksheets1.Count; i++)
+			if (j >= asset.maps.Count)
 			{
-				if (i >= asset.maps.Count)
-				{
-					asset.AddMap();
-				}
-				asset.maps[i].ident = excelWorksheets1[i - asset.dynamicSheetStart];
+				asset.AddMap();
 			}
+			asset.maps[j].ident = excelWorksheets[j - 1];
 		}
 	}
 
@@ -998,33 +965,23 @@ public class GameMapEditor : EditorWindow
 		};
 		int selectedIndex = (int)layer.waveType;
 		WaveType waveType = WaveType.Common;
-		bool isDynamic = layer.isDynamic;
-		int dynamicSheet = 0;
-		if (!asset.maps[mapIdx].isDynamic)
-        {
-			selectedIndex = EditorGUILayout.Popup("种类", selectedIndex, options);
-			waveType = (WaveType)selectedIndex;
-			switch (layer.waveType)
-			{
-				case WaveType.Common:
+		selectedIndex = EditorGUILayout.Popup("种类", selectedIndex, options);
+		waveType = (WaveType)selectedIndex;
+		switch (waveType)
+		{
+			case WaveType.Common:
+				duration = EditorGUILayout.IntField("下一波时间", layer.duration);
+				break;
+			case WaveType.Tower:
+				if (currLayer == 0)
+				{
 					duration = EditorGUILayout.IntField("下一波时间", layer.duration);
-					break;
-				case WaveType.Tower:
-					if (currLayer == 0)
-					{
-						duration = EditorGUILayout.IntField("下一波时间", layer.duration);
-					}
-					break;
-				case WaveType.FromTower:
-					buildingId = EditorGUILayout.TextField("出怪建筑", layer.buildingId);
-					buildingHp = EditorGUILayout.FloatField("剩余血量", layer.buildingHp);
-					break;
-			}
-			isDynamic = EditorGUILayout.ToggleLeft("动态", layer.isDynamic);
-			if (isDynamic)
-			{
-				dynamicSheet = EditorGUILayout.IntField("动态表", layer.dynamicSheet);
-			}
+				}
+				break;
+			case WaveType.FromTower:
+				buildingId = EditorGUILayout.TextField("出怪建筑", layer.buildingId);
+				buildingHp = EditorGUILayout.FloatField("剩余血量", layer.buildingHp);
+				break;
 		}
 
 
@@ -1107,8 +1064,6 @@ public class GameMapEditor : EditorWindow
 			layer.buildingHp = buildingHp;
 			layer.spawnTimes = newSpawnTimes;
 			layer.waveType = waveType;
-			layer.isDynamic = isDynamic;
-			layer.dynamicSheet = dynamicSheet;
 			AssetDatabase.SaveAssets();
 		}
 		// 标记资源为脏数据,以便保存更改
@@ -1350,33 +1305,25 @@ public class GameMapEditor : EditorWindow
 		string path = enemyExcelPath;
 		List<string> excelsSheets = new();
 		FileInfo fileInfo = null;
-		for (int j = 0; j < 2; j++)
+		for (int i = 0; i < 9; i++)
         {
-            switch (j)
-            {
-				case 0:
-					fileInfo = new FileInfo(createEnemyExcelPath);
-					break;
-				case 1:
-					fileInfo = new FileInfo(dynamicEnemyExcelPath);
-					break;
-            }
+			fileInfo = new FileInfo(createEnemyExcelPath + $"/怪物表{i}.xlsx");
 			using (ExcelPackage package = new ExcelPackage(fileInfo))
 			{
 				excelsSheets = ExcelEditor.ReadExcelSheetsInfo(package);
-				for (int i = 0; i < asset.tileAsset.tiles.Count; i++)
+				for (int j = 0; j < asset.tileAsset.tiles.Count; j++)
 				{
-					GameMapTile tile = asset.tileAsset.tiles[i];
+					GameMapTile tile = asset.tileAsset.tiles[j];
 					foreach (var sheetName in excelsSheets)
 					{
-						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + i, tile.name);
+						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + j, tile.name);
 					}
 				}
-				for (int i = 0; i < 100; i++)
+				for (int j = 0; j < 100; j++)
 				{
 					foreach (var sheetName in excelsSheets)
 					{
-						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + asset.tileAsset.tiles.Count + i, "");
+						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + asset.tileAsset.tiles.Count + j, "");
 					}
 				}
 				try
@@ -1385,15 +1332,7 @@ public class GameMapEditor : EditorWindow
 				}
 				catch (System.InvalidOperationException e)
 				{
-                    switch (j)
-                    {
-						case 0:
-							Debug.LogError($"出怪表未关闭请重试");
-							break;
-						case 1:
-							Debug.LogError($"动态出怪表未关闭请重试");
-							break;
-                    }
+					Debug.LogError($"出怪表未关闭请重试");
 					Debug.LogException(e);
 					return;
 				}

+ 2 - 3
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMap.cs

@@ -19,8 +19,7 @@ public class GameMap
 
 	/// <summary> height of map (determines how big grid is) </summary>
 	public int height;
-
-	public bool isDynamic;
+	public int levelId;
 	public float expRatio;
 	/// <summary> The grid/map. -1 is an empty tile, else a value related to GameMapTile.id will be present 
     /// This is also known as layer-0 or the default layer when there are movethan one layer in the map.
@@ -196,7 +195,7 @@ public class GameMap
 
 	public override string ToString()
 	{
-		return ident;
+		return  ident;
 	}
 
 	// ----------------------------------------------------------------------------------------------------------------

+ 0 - 2
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapLayer.cs

@@ -38,7 +38,5 @@ public class GameMapLayer
 	public string name;
 	public Dictionary<int, SpawnTime> spawnTimes = new();
 	public WaveType waveType;
-	public bool isDynamic;
-	public int dynamicSheet;
 	// ----------------------------------------------------------------------------------------------------------------
 }

+ 1 - 2
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapsAsset.cs

@@ -6,10 +6,9 @@ public class GameMapsAsset : ScriptableObject
 {
 	/// <summary> All maps created via MapEditor </summary>	
 	[SerializeField] public List<GameMap> maps = new List<GameMap>();
-	[DisplayOnly]public int dynamicSheetStart;
 	/// <summary> The tiles asset associated with the maps </summary>	
 	[SerializeField] public GameMapTilesAsset tileAsset;
-
+	[HideInInspector] public int levelID;
 	//[SerializeField] private int nextMapId = 1;
 
 	// *** extra properties related to this maps asset

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 3
ActionTowerDefense/Assets/GameLevelEditor/maps.asset


+ 6 - 6
ActionTowerDefense/Assets/Gen/CfgDynamicEnemy.cs → ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs

@@ -14,24 +14,24 @@ using SimpleJSON;
 namespace cfg
 { 
 
-public sealed partial class CfgDynamicEnemy
+public sealed partial class CfgCreateEnemy0
 {
-    private readonly List<SingleDynamicEnemyConfig> _dataList;
+    private readonly List<SingleCreateEnemy0Config> _dataList;
     
 
-    public CfgDynamicEnemy(JSONNode _json)
+    public CfgCreateEnemy0(JSONNode _json)
     {
-        _dataList = new List<SingleDynamicEnemyConfig>();
+        _dataList = new List<SingleCreateEnemy0Config>();
         
         foreach(JSONNode _row in _json.Children)
         {
-            var _v = SingleDynamicEnemyConfig.DeserializeSingleDynamicEnemyConfig(_row);
+            var _v = SingleCreateEnemy0Config.DeserializeSingleCreateEnemy0Config(_row);
             _dataList.Add(_v);
         }
         PostInit();
     }
 
-    public List<SingleDynamicEnemyConfig> DataList => _dataList;
+    public List<SingleCreateEnemy0Config> DataList => _dataList;
 
 
     public void Resolve(Dictionary<string, object> _tables)

+ 1 - 1
ActionTowerDefense/Assets/Gen/SingleDynamicEnemyConfig.cs.meta → ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 95a8caa39cf245a4a86d9e132bd42ae9
+guid: 93ab35fa0f2477343bd0b07a078515b1
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 6 - 6
ActionTowerDefense/Assets/Gen/CfgCreateEnemy.cs → ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs

@@ -14,24 +14,24 @@ using SimpleJSON;
 namespace cfg
 { 
 
-public sealed partial class CfgCreateEnemy
+public sealed partial class CfgCreateEnemy1
 {
-    private readonly List<SingleCreateEnemyConfig> _dataList;
+    private readonly List<SingleCreateEnemy1Config> _dataList;
     
 
-    public CfgCreateEnemy(JSONNode _json)
+    public CfgCreateEnemy1(JSONNode _json)
     {
-        _dataList = new List<SingleCreateEnemyConfig>();
+        _dataList = new List<SingleCreateEnemy1Config>();
         
         foreach(JSONNode _row in _json.Children)
         {
-            var _v = SingleCreateEnemyConfig.DeserializeSingleCreateEnemyConfig(_row);
+            var _v = SingleCreateEnemy1Config.DeserializeSingleCreateEnemy1Config(_row);
             _dataList.Add(_v);
         }
         PostInit();
     }
 
-    public List<SingleCreateEnemyConfig> DataList => _dataList;
+    public List<SingleCreateEnemy1Config> DataList => _dataList;
 
 
     public void Resolve(Dictionary<string, object> _tables)

+ 1 - 1
ActionTowerDefense/Assets/Gen/CfgCreateEnemy.cs.meta → ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a3e8402db9a2bce4a9b46554fb2c30c1
+guid: 51db6e1ac9a296043895a19f181d2084
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy2
+{
+    private readonly List<SingleCreateEnemy2Config> _dataList;
+    
+
+    public CfgCreateEnemy2(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy2Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy2Config.DeserializeSingleCreateEnemy2Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy2Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 1 - 1
ActionTowerDefense/Assets/Gen/CfgDynamicEnemy.cs.meta → ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: bc2b87c48bddd4b418bbf4e0d7e2c473
+guid: f3301952fb917be48be724d5006b89af
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy3
+{
+    private readonly List<SingleCreateEnemy3Config> _dataList;
+    
+
+    public CfgCreateEnemy3(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy3Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy3Config.DeserializeSingleCreateEnemy3Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy3Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 64daadb0b1f008545b656fc30aa1c353
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy4
+{
+    private readonly List<SingleCreateEnemy4Config> _dataList;
+    
+
+    public CfgCreateEnemy4(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy4Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy4Config.DeserializeSingleCreateEnemy4Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy4Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b07d4ced9f68f7a43b6ab9a42addc156
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy5
+{
+    private readonly List<SingleCreateEnemy5Config> _dataList;
+    
+
+    public CfgCreateEnemy5(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy5Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy5Config.DeserializeSingleCreateEnemy5Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy5Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 76921c9802f6d1f49b33375dd8d98b01
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy6
+{
+    private readonly List<SingleCreateEnemy6Config> _dataList;
+    
+
+    public CfgCreateEnemy6(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy6Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy6Config.DeserializeSingleCreateEnemy6Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy6Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f811d4641a20ef94ca9ee93b547329b3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy7
+{
+    private readonly List<SingleCreateEnemy7Config> _dataList;
+    
+
+    public CfgCreateEnemy7(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy7Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy7Config.DeserializeSingleCreateEnemy7Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy7Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc4d8fd74502fdb4ca054fefe50e7f0a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy8
+{
+    private readonly List<SingleCreateEnemy8Config> _dataList;
+    
+
+    public CfgCreateEnemy8(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy8Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy8Config.DeserializeSingleCreateEnemy8Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy8Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cb69602c10f028445a7ad5f79218e88a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 12
ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs → ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs

@@ -14,13 +14,12 @@ using SimpleJSON;
 namespace cfg
 { 
 
-public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase 
+public sealed partial class SingleCreateEnemy0Config :  Bright.Config.BeanBase 
 {
-    public SingleCreateEnemyConfig(JSONNode _json) 
+    public SingleCreateEnemy0Config(JSONNode _json) 
     {
         { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
         { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
-        { if(!_json["Dynamic"].IsNumber) { throw new SerializationException(); }  Dynamic = _json["Dynamic"]; }
         { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
         { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
         { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
@@ -37,11 +36,10 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         PostInit();
     }
 
-    public SingleCreateEnemyConfig(float WaveID, string WaveName, int Dynamic, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    public SingleCreateEnemy0Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
     {
         this.WaveID = WaveID;
         this.WaveName = WaveName;
-        this.Dynamic = Dynamic;
         this.WaveTime = WaveTime;
         this.BuildingID = BuildingID;
         this.BuildingHP = BuildingHP;
@@ -58,9 +56,9 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         PostInit();
     }
 
-    public static SingleCreateEnemyConfig DeserializeSingleCreateEnemyConfig(JSONNode _json)
+    public static SingleCreateEnemy0Config DeserializeSingleCreateEnemy0Config(JSONNode _json)
     {
-        return new SingleCreateEnemyConfig(_json);
+        return new SingleCreateEnemy0Config(_json);
     }
 
     /// <summary>
@@ -74,15 +72,14 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
     /// <summary>
     /// 140
     /// </summary>
-    public int Dynamic { get; private set; }
+    public int WaveTime { get; private set; }
     /// <summary>
     /// 经验倍率:
     /// </summary>
-    public int WaveTime { get; private set; }
+    public string BuildingID { get; private set; }
     /// <summary>
     /// 1
     /// </summary>
-    public string BuildingID { get; private set; }
     public float BuildingHP { get; private set; }
     public string EnemyName { get; private set; }
     public System.Collections.Generic.List<int> Position { get; private set; }
@@ -95,7 +92,7 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
     public float ArmorRatio { get; private set; }
     public float ArmorPiercingRatio { get; private set; }
 
-    public const int __ID__ = 691467974;
+    public const int __ID__ = -980553554;
     public override int GetTypeId() => __ID__;
 
     public  void Resolve(Dictionary<string, object> _tables)
@@ -112,7 +109,6 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         return "{ "
         + "WaveID:" + WaveID + ","
         + "WaveName:" + WaveName + ","
-        + "Dynamic:" + Dynamic + ","
         + "WaveTime:" + WaveTime + ","
         + "BuildingID:" + BuildingID + ","
         + "BuildingHP:" + BuildingHP + ","

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 791dbec7b32c65743bbe41f2a6c16e0d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy1Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy1Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy1Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy1Config DeserializeSingleCreateEnemy1Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy1Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -93049873;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8f4d43752aadf7849bbed502904c5e19
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy2Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy2Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy2Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy2Config DeserializeSingleCreateEnemy2Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy2Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 794453808;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b03735fc6d570f4439e07f627fa47fe2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy3Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy3Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy3Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy3Config DeserializeSingleCreateEnemy3Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy3Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 1681957489;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a467a70315d60d643ae3226048fecf8a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy4Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy4Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy4Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy4Config DeserializeSingleCreateEnemy4Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy4Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -1725506126;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f53267384f77a0949abf696845e14ba7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy5Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy5Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy5Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy5Config DeserializeSingleCreateEnemy5Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy5Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -838002445;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1e371081c465bcc43b51cee7f6c68160
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 25 - 7
ActionTowerDefense/Assets/Gen/SingleDynamicEnemyConfig.cs → ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs

@@ -14,12 +14,15 @@ using SimpleJSON;
 namespace cfg
 { 
 
-public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase 
+public sealed partial class SingleCreateEnemy6Config :  Bright.Config.BeanBase 
 {
-    public SingleDynamicEnemyConfig(JSONNode _json) 
+    public SingleCreateEnemy6Config(JSONNode _json) 
     {
         { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
         { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
         { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
         { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
         { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
@@ -33,10 +36,13 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
         PostInit();
     }
 
-    public SingleDynamicEnemyConfig(int WaveID, string WaveName, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    public SingleCreateEnemy6Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
     {
         this.WaveID = WaveID;
         this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
         this.EnemyName = EnemyName;
         this.Position = Position;
         this.StartTime = StartTime;
@@ -50,15 +56,15 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
         PostInit();
     }
 
-    public static SingleDynamicEnemyConfig DeserializeSingleDynamicEnemyConfig(JSONNode _json)
+    public static SingleCreateEnemy6Config DeserializeSingleCreateEnemy6Config(JSONNode _json)
     {
-        return new SingleDynamicEnemyConfig(_json);
+        return new SingleCreateEnemy6Config(_json);
     }
 
     /// <summary>
     /// 表格参数:
     /// </summary>
-    public int WaveID { get; private set; }
+    public float WaveID { get; private set; }
     /// <summary>
     /// 宽:
     /// </summary>
@@ -66,6 +72,15 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
     /// <summary>
     /// 140
     /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
     public string EnemyName { get; private set; }
     public System.Collections.Generic.List<int> Position { get; private set; }
     public int StartTime { get; private set; }
@@ -77,7 +92,7 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
     public float ArmorRatio { get; private set; }
     public float ArmorPiercingRatio { get; private set; }
 
-    public const int __ID__ = 1939625395;
+    public const int __ID__ = 49501236;
     public override int GetTypeId() => __ID__;
 
     public  void Resolve(Dictionary<string, object> _tables)
@@ -94,6 +109,9 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
         return "{ "
         + "WaveID:" + WaveID + ","
         + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
         + "EnemyName:" + EnemyName + ","
         + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
         + "StartTime:" + StartTime + ","

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9df8331d0d4012944bb1eb240eb3e641
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy7Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy7Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy7Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy7Config DeserializeSingleCreateEnemy7Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy7Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 937004917;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 62380de861aa833489cdfa18d69c7993
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy8Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy8Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy8Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy8Config DeserializeSingleCreateEnemy8Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy8Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 1824508598;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8ac5655bc849b504c8f1c9474c62116e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 45 - 10
ActionTowerDefense/Assets/Gen/Tables.cs

@@ -15,8 +15,15 @@ namespace cfg
 public sealed partial class Tables
 {
     public CfgEnemy CfgEnemy {get; }
-    public CfgCreateEnemy CfgCreateEnemy {get; }
-    public CfgDynamicEnemy CfgDynamicEnemy {get; }
+    public CfgCreateEnemy0 CfgCreateEnemy0 {get; }
+    public CfgCreateEnemy1 CfgCreateEnemy1 {get; }
+    public CfgCreateEnemy2 CfgCreateEnemy2 {get; }
+    public CfgCreateEnemy3 CfgCreateEnemy3 {get; }
+    public CfgCreateEnemy4 CfgCreateEnemy4 {get; }
+    public CfgCreateEnemy5 CfgCreateEnemy5 {get; }
+    public CfgCreateEnemy6 CfgCreateEnemy6 {get; }
+    public CfgCreateEnemy7 CfgCreateEnemy7 {get; }
+    public CfgCreateEnemy8 CfgCreateEnemy8 {get; }
     public CfgSoldierLevel CfgSoldierLevel {get; }
 
     public Tables(System.Func<string, JSONNode> loader)
@@ -24,17 +31,38 @@ public sealed partial class Tables
         var tables = new System.Collections.Generic.Dictionary<string, object>();
         CfgEnemy = new CfgEnemy(loader("cfgenemy")); 
         tables.Add("CfgEnemy", CfgEnemy);
-        CfgCreateEnemy = new CfgCreateEnemy(loader("cfgcreateenemy")); 
-        tables.Add("CfgCreateEnemy", CfgCreateEnemy);
-        CfgDynamicEnemy = new CfgDynamicEnemy(loader("cfgdynamicenemy")); 
-        tables.Add("CfgDynamicEnemy", CfgDynamicEnemy);
+        CfgCreateEnemy0 = new CfgCreateEnemy0(loader("cfgcreateenemy0")); 
+        tables.Add("CfgCreateEnemy0", CfgCreateEnemy0);
+        CfgCreateEnemy1 = new CfgCreateEnemy1(loader("cfgcreateenemy1")); 
+        tables.Add("CfgCreateEnemy1", CfgCreateEnemy1);
+        CfgCreateEnemy2 = new CfgCreateEnemy2(loader("cfgcreateenemy2")); 
+        tables.Add("CfgCreateEnemy2", CfgCreateEnemy2);
+        CfgCreateEnemy3 = new CfgCreateEnemy3(loader("cfgcreateenemy3")); 
+        tables.Add("CfgCreateEnemy3", CfgCreateEnemy3);
+        CfgCreateEnemy4 = new CfgCreateEnemy4(loader("cfgcreateenemy4")); 
+        tables.Add("CfgCreateEnemy4", CfgCreateEnemy4);
+        CfgCreateEnemy5 = new CfgCreateEnemy5(loader("cfgcreateenemy5")); 
+        tables.Add("CfgCreateEnemy5", CfgCreateEnemy5);
+        CfgCreateEnemy6 = new CfgCreateEnemy6(loader("cfgcreateenemy6")); 
+        tables.Add("CfgCreateEnemy6", CfgCreateEnemy6);
+        CfgCreateEnemy7 = new CfgCreateEnemy7(loader("cfgcreateenemy7")); 
+        tables.Add("CfgCreateEnemy7", CfgCreateEnemy7);
+        CfgCreateEnemy8 = new CfgCreateEnemy8(loader("cfgcreateenemy8")); 
+        tables.Add("CfgCreateEnemy8", CfgCreateEnemy8);
         CfgSoldierLevel = new CfgSoldierLevel(loader("cfgsoldierlevel")); 
         tables.Add("CfgSoldierLevel", CfgSoldierLevel);
         PostInit();
 
         CfgEnemy.Resolve(tables); 
-        CfgCreateEnemy.Resolve(tables); 
-        CfgDynamicEnemy.Resolve(tables); 
+        CfgCreateEnemy0.Resolve(tables); 
+        CfgCreateEnemy1.Resolve(tables); 
+        CfgCreateEnemy2.Resolve(tables); 
+        CfgCreateEnemy3.Resolve(tables); 
+        CfgCreateEnemy4.Resolve(tables); 
+        CfgCreateEnemy5.Resolve(tables); 
+        CfgCreateEnemy6.Resolve(tables); 
+        CfgCreateEnemy7.Resolve(tables); 
+        CfgCreateEnemy8.Resolve(tables); 
         CfgSoldierLevel.Resolve(tables); 
         PostResolve();
     }
@@ -42,8 +70,15 @@ public sealed partial class Tables
     public void TranslateText(System.Func<string, string, string> translator)
     {
         CfgEnemy.TranslateText(translator); 
-        CfgCreateEnemy.TranslateText(translator); 
-        CfgDynamicEnemy.TranslateText(translator); 
+        CfgCreateEnemy0.TranslateText(translator); 
+        CfgCreateEnemy1.TranslateText(translator); 
+        CfgCreateEnemy2.TranslateText(translator); 
+        CfgCreateEnemy3.TranslateText(translator); 
+        CfgCreateEnemy4.TranslateText(translator); 
+        CfgCreateEnemy5.TranslateText(translator); 
+        CfgCreateEnemy6.TranslateText(translator); 
+        CfgCreateEnemy7.TranslateText(translator); 
+        CfgCreateEnemy8.TranslateText(translator); 
         CfgSoldierLevel.TranslateText(translator); 
     }
     

+ 7 - 0
ActionTowerDefense/Assets/PIDI Game Development Framework/Planar Reflections 4/Shared Assets/Amplify Shader Editor Nodes/4.0.0 - Amplify Shader Editor Nodes.unitypackage.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 68e1c94b04df60048974896754524c17
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 320 - 15
ActionTowerDefense/Assets/Scenes/Game.unity

@@ -5728,6 +5728,141 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 256026858}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &280230254
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 280230255}
+  - component: {fileID: 280230257}
+  - component: {fileID: 280230256}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &280230255
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 280230254}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2041973835}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &280230256
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 280230254}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: "\u4E0B\u4E00\u5173"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 39a7404a24ab897418249c0d649949a8, type: 2}
+  m_sharedMaterial: {fileID: -1504297583073342176, guid: 39a7404a24ab897418249c0d649949a8, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4281479730
+  m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 50
+  m_fontSizeBase: 50
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &280230257
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 280230254}
+  m_CullTransparentMesh: 1
 --- !u!1 &283838323
 GameObject:
   m_ObjectHideFlags: 0
@@ -7615,7 +7750,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &741372828
 RectTransform:
   m_ObjectHideFlags: 0
@@ -20660,6 +20795,7 @@ GameObject:
   - component: {fileID: 1714821085}
   - component: {fileID: 1714821087}
   - component: {fileID: 1714821088}
+  - component: {fileID: 1714821093}
   - component: {fileID: 1714821089}
   - component: {fileID: 1714821090}
   - component: {fileID: 1714821091}
@@ -20684,6 +20820,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   gameTime: 0
+  totalGameTime: 0
   p1uiHP: {fileID: 2035765039221954013}
   p1uiMP: {fileID: 7582378586151668411}
   demonicNum:
@@ -20692,6 +20829,9 @@ MonoBehaviour:
   - {fileID: 1934719935}
   text: {fileID: 1634269188}
   chapterBG: {fileID: 0}
+  leveType: 0
+  nextLevelButton: {fileID: 2041973834}
+  isGaming: 0
 --- !u!4 &1714821086
 Transform:
   m_ObjectHideFlags: 0
@@ -20719,11 +20859,18 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 0b88ebc6e4d3df6439f5464df5614ec5, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  soldierEXP: {fileID: 0}
+  levelSelect: {fileID: 1714821088}
+  soldierEXP: {fileID: 1714821090}
   createdEnemy: 
+  createdEnemy1: 
   idRange: {x: 0, y: 0}
+  idRange1: {x: 0, y: 0}
   createdEnemyTower: []
+  createdEnemyTower1: []
   createdEnemyTowerHp: []
+  createdEnemyTowerHp1: []
+  nowLevel: 0
+  levelTypes: 0000000000000000
 --- !u!114 &1714821088
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -20736,18 +20883,17 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: cc3bac8dfa08dec4eb5eb9ed66ff6369, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  isDebug: 1
+  isAddLevel_debug: 0
+  levelIdA_debug: 8
+  levelIdB_debug: 2
   curLevel: {fileID: 741372831}
-  curLevelID: 9
+  curLevelID: 0
   levels:
-  - "1:\u54C8\u5C41"
-  - "2:\u54C8\u5C41 (2)"
-  - "3:\u54C8\u5C41 (3)"
-  - "4:\u521D\u59CB\u53E4\u7EB3\u5361"
-  - "5:\u521D\u59CB\u53E4\u7EB3\u5361 (2)"
-  - "6:\u521D\u59CB\u53E4\u7EB3\u5361 (3)"
-  - "7:\u521D\u59CB\u53E4\u7EB3\u5361 (4)"
-  - 8:test
-  - 9:test2
+  - "0:\u6C34\u9762\u5173\u53611"
+  - "1:\u6C34\u9762\u5173\u53612"
+  - "2:\u4ED9\u5BAB\u5173\u53611"
+  - "3:\u4ED9\u5BAB\u5173\u53612"
 --- !u!114 &1714821089
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -20808,6 +20954,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 4d5827f0fa0c0104983cbcf4dc8cc942, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  levelSelect: {fileID: 1714821088}
   seb:
   - st: 0
     summonAttack: 0
@@ -20848,6 +20995,25 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 089f096f5129267449881ed8ae316682, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!114 &1714821093
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1714821084}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4b509edfbc0a728499dbf937a04ce3e1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  levelSettings:
+  - st: 0
+    origLevel: 1
+  - st: 1
+    origLevel: 2
+  - st: 2
+    origLevel: 5
 --- !u!1 &1729202001
 GameObject:
   m_ObjectHideFlags: 0
@@ -21574,6 +21740,140 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2033440887}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &2041973834
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2041973835}
+  - component: {fileID: 2041973838}
+  - component: {fileID: 2041973837}
+  - component: {fileID: 2041973836}
+  m_Layer: 5
+  m_Name: NextLevelButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2041973835
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 280230255}
+  m_Father: {fileID: 3490440114689228974}
+  m_RootOrder: 12
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -142, y: -78}
+  m_SizeDelta: {x: 187.39001, y: 69.099976}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2041973836
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 2041973837}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 1714821085}
+        m_TargetAssemblyTypeName: GameManager, Assembly-CSharp
+        m_MethodName: NextLevel
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!114 &2041973837
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &2041973838
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_CullTransparentMesh: 1
 --- !u!1 &2051679828
 GameObject:
   m_ObjectHideFlags: 0
@@ -22358,6 +22658,10 @@ PrefabInstance:
       propertyPath: m_Materials.Array.data[0]
       value: 
       objectReference: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+    - target: {fileID: 6189424681395494106, guid: 956ff4379e83d3c49a9c10310dbf7cc7, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 956ff4379e83d3c49a9c10310dbf7cc7, type: 3}
 --- !u!114 &7709371648474228
@@ -22442,7 +22746,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &7709371724858932
 Transform:
   m_ObjectHideFlags: 0
@@ -23163,7 +23467,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 1338420724588688035, guid: 8e99578d43abbeb4d95b0ae7f30a436a, type: 3}
       propertyPath: m_IsActive
-      value: 1
+      value: 0
       objectReference: {fileID: 0}
     - target: {fileID: 2185887633804281442, guid: 8e99578d43abbeb4d95b0ae7f30a436a, type: 3}
       propertyPath: m_LocalPosition.x
@@ -24097,7 +24401,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!114 &3490440114689228963
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -24139,6 +24443,7 @@ RectTransform:
   - {fileID: 741372828}
   - {fileID: 1634269187}
   - {fileID: 1171248097}
+  - {fileID: 2041973835}
   m_Father: {fileID: 0}
   m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs

@@ -551,7 +551,7 @@ public class Enemy : MoveCharacter
             case CharacterState.Die:
                 if (dieKeepTime <= 0)
                 {
-                    if (killer.GetComponent<Demonic>())
+                    if (killer!=null && killer.GetComponent<Demonic>())
                     {
                         SoldierType st = killer.GetComponent<Demonic>().soldierType;
                         SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));

+ 209 - 140
ActionTowerDefense/Assets/Scripts/EnemyCreater.cs

@@ -7,20 +7,27 @@ using System.Threading;
 
 public class EnemyCreater : MonoBehaviour
 {
+    public LevelSelect levelSelect;
     private CancellationTokenSource _cancellationTokenSource;
     public static EnemyCreater instance;
     public SoldierEXP soldierEXP;
-    [SerializeField] public List<SingleCreateEnemyConfig> cfgCreateEnemy;
+    public List<SingleCreateEnemyConfig> cfgCreateEnemy;
+    public List<SingleCreateEnemyConfig> cfgCreateEnemy1;
     public List<bool> createdEnemy;
+    public List<bool> createdEnemy1;
     public List<List<float>> createEnemyTime = new();
+    public List<List<float>> createEnemyTime1 = new();
     public Dictionary<string, List<Enemy>> enemyDic;
     public Dictionary<string, List<GameObject>> buildingDic;
-    private int curLevel;
     public Vector2Int idRange;  //当前关卡为出怪表[x,y]行
+    public Vector2Int idRange1;  //当前关卡为出怪表[x,y]行
     public Dictionary<string, EnemyTower> enemyCreateTowerDic;
     public List<string> createdEnemyTower = new();
+    public List<string> createdEnemyTower1 = new();
     public List<float> createdEnemyTowerHp = new();
-    public List<List<List<SingleDynamicEnemyConfig>>> cfgDynamicEnemy;
+    public List<float> createdEnemyTowerHp1 = new();
+    public int nowLevel;
+    public int[] levelTypes;   //“承”“转”关卡的类型
 
     private void Awake()
     {
@@ -33,117 +40,211 @@ public class EnemyCreater : MonoBehaviour
             DestroyImmediate(gameObject);
             return;
         }
-        enemyDic = new Dictionary<string, List<Enemy>>();
-        buildingDic = new Dictionary<string, List<GameObject>>();
-        enemyCreateTowerDic = new Dictionary<string, EnemyTower>();
+
         soldierEXP = GetComponent<SoldierEXP>();
     }
 
     private void Start()
     {
+        levelSelect.ReloadCfg();
         _cancellationTokenSource = new CancellationTokenSource();
-        curLevel = GetComponent<LevelSelect>().curLevelID;
-        cfgCreateEnemy = GameManager.instance.allCfgData.CfgCreateEnemy.DataList;
+        Init();
+        ////把所有怪物prefab生成一遍防止后面初次生成卡顿
+        ////foreach (var item in createCharacter)
+        ////{
+        ////    for(int i = 0; i < item.tile.spawnTime[item.spawnTimeId].num; i++)
+        ////    {
+        ////        CreateEnemy(item.tile, Vector3.zero, 1, 1,false);
+        ////    }
+        ////}
+    }
+
+    public void Init()
+    {
+        if (LevelSelect.instance.isDebug)
+        {
+            if (LevelSelect.instance.isAddLevel_debug)
+            {
+                levelTypes[1] = LevelSelect.instance.levelIdB_debug;
+                GameManager.instance.leveType = LeveType.Conclusion;
+            }
+            nowLevel = LevelSelect.instance.levelIdA_debug;
+        }
+        else
+        {
+            switch (GameManager.instance.leveType)
+            {
+                case LeveType.Introduction:
+                    nowLevel = 0;
+                    break;
+                case LeveType.Development:
+                    nowLevel = levelTypes[0];
+                    break;
+                case LeveType.Transition:
+                    nowLevel = levelTypes[1];
+                    break;
+                case LeveType.Conclusion:
+                    nowLevel = levelTypes[0];
+                    break;
+            }
+        }
+
+
+        enemyDic = new Dictionary<string, List<Enemy>>();
+        buildingDic = new Dictionary<string, List<GameObject>>();
+        enemyCreateTowerDic = new Dictionary<string, EnemyTower>();
         createdEnemy = new List<bool>();
+        createEnemyTime = new List<List<float>>();
+        createdEnemyTower = new List<string>();
+        createdEnemyTowerHp = new List<float>();
         float waveTime = 0;
         float id = 0;
-        int mapId = 1;
-        int start = -1;
-        int end = -1;
-        bool haveStart = false;
-        for(int i = 0; i < cfgCreateEnemy.Count; i++)
+        int startId;
+        int endId;
+
+        cfgCreateEnemy = GameManager.instance.createEnemyConfigs[nowLevel].DataList;
+
+        startId = levelSelect.levelsId[nowLevel][levelSelect.curLevelID];
+        endId = levelSelect.curLevelID < levelSelect.levels.Count ?
+            levelSelect.levelsId[nowLevel][levelSelect.curLevelID + 1]
+            : cfgCreateEnemy.Count;
+        if (cfgCreateEnemy[startId].WaveID != -1 || endId != cfgCreateEnemy.Count && cfgCreateEnemy[endId].WaveID != -1)
         {
-            if (cfgCreateEnemy[i].WaveID == -1)
+            Debug.LogError("关卡导入出错");
+        }
+        idRange = new Vector2Int(startId, endId);
+
+        for (int i = startId + 1; i < endId; i++)
+        {
+            if (cfgCreateEnemy[i].WaveID == 0)
+            {
+                createdEnemy.Add(false);
+                createEnemyTime.Add(new List<float> { cfgCreateEnemy[i].StartTime, cfgCreateEnemy[i].EndTime });
+                createdEnemyTower.Add("");
+                createdEnemyTowerHp.Add(0);
+                waveTime = cfgCreateEnemy[i].WaveTime;
+            }
+            else if (cfgCreateEnemy[i].WaveID < 1)
+            {
+                createdEnemy.Add(false);
+                createEnemyTime.Add(new List<float> { 0, 0 });
+                if (id != cfgCreateEnemy[i].WaveID)
+                {
+                    createdEnemyTower.Add(cfgCreateEnemy[i].BuildingID);
+                    createdEnemyTowerHp.Add(cfgCreateEnemy[i].BuildingHP);
+                    id = cfgCreateEnemy[i].WaveID;
+                }
+                else
+                {
+                    int l = createdEnemyTower.Count;
+                    createdEnemyTower.Add(createdEnemyTower[l - 1]);
+                    createdEnemyTowerHp.Add(createdEnemyTowerHp[l - 1]);
+                }
+            }
+            else
             {
-                if (curLevel == mapId)
+                createdEnemy.Add(false);
+                createEnemyTime.Add(new List<float> { waveTime + cfgCreateEnemy[i].StartTime, waveTime + cfgCreateEnemy[i].EndTime });
+                createdEnemyTower.Add("");
+                createdEnemyTowerHp.Add(0);
+                if (id != cfgCreateEnemy[i].WaveID)
                 {
-                    haveStart = true;
-                    start = i;
+                    waveTime += cfgCreateEnemy[i].WaveTime;
+                    id = cfgCreateEnemy[i].WaveID;
                 }
-                else if (curLevel + 1 == mapId)
+            }
+        }
+
+        if (GameManager.instance.leveType == LeveType.Conclusion 
+            || LevelSelect.instance.isDebug && LevelSelect.instance.isAddLevel_debug)
+        {
+            createdEnemy1 = new List<bool>();
+            createEnemyTime1 = new List<List<float>>();
+            createdEnemyTower1 = new List<string>();
+            createdEnemyTowerHp1 = new List<float>();
+            int startId1;
+            int endId1;
+            cfgCreateEnemy1 = GameManager.instance.createEnemyConfigs[levelTypes[1]].DataList;
+            startId1 = levelSelect.levelsId[levelTypes[1]][levelSelect.curLevelID];
+            endId1 = levelSelect.curLevelID < levelSelect.levels.Count ?
+                levelSelect.levelsId[levelTypes[1]][levelSelect.curLevelID + 1]
+                : cfgCreateEnemy.Count;
+            id = 0;
+            waveTime = 0;
+            for (int i = startId1 + 1; i < endId1; i++)
+            {
+                if (cfgCreateEnemy1[i].WaveID != 0)
                 {
-                    end = i - 1;
+                    startId1 = i - 1;
                     break;
                 }
-                mapId++;
-                continue;
             }
-            if (haveStart)
+            idRange1 = new Vector2Int(startId1, endId1);
+
+            for (int i = startId1 + 1; i < endId1; i++)
             {
-                if(cfgCreateEnemy[i].WaveID == 0)
+                if (cfgCreateEnemy1[i].WaveID == 0)
                 {
-                    createdEnemy.Add(false);
-                    createEnemyTime.Add(new List<float> { cfgCreateEnemy[i].StartTime, cfgCreateEnemy[i].EndTime });
-                    createdEnemyTower.Add("");
-                    createdEnemyTowerHp.Add(0);
-                    waveTime = cfgCreateEnemy[i].WaveTime;
+                    Debug.LogError("出怪表导入数据异常");
                 }
-                else if(cfgCreateEnemy[i].WaveID < 1)
+                else if (cfgCreateEnemy1[i].WaveID < 1)
                 {
-                    createdEnemy.Add(false);
-                    createEnemyTime.Add(new List<float> { 0,0});
-                    if(id != cfgCreateEnemy[i].WaveID)
+                    createdEnemy1.Add(false);
+                    createEnemyTime1.Add(new List<float> { 0, 0 });
+                    if (id != cfgCreateEnemy1[i].WaveID)
                     {
-                        createdEnemyTower.Add(cfgCreateEnemy[i].BuildingID);
-                        createdEnemyTowerHp.Add(cfgCreateEnemy[i].BuildingHP);
-                        id = cfgCreateEnemy[i].WaveID;
+                        createdEnemyTower1.Add(cfgCreateEnemy1[i].BuildingID);
+                        createdEnemyTowerHp1.Add(cfgCreateEnemy1[i].BuildingHP);
+                        id = cfgCreateEnemy1[i].WaveID;
                     }
                     else
                     {
-                        int l = createdEnemyTower.Count;
-                        createdEnemyTower.Add(createdEnemyTower[l - 1]);
-                        createdEnemyTowerHp.Add(createdEnemyTowerHp[l - 1]);
+                        int l = createdEnemyTower1.Count;
+                        createdEnemyTower1.Add(createdEnemyTower1[l - 1]);
+                        createdEnemyTowerHp1.Add(createdEnemyTowerHp1[l - 1]);
                     }
                 }
                 else
                 {
-                    createdEnemy.Add(false);
-                    createEnemyTime.Add(new List<float> { waveTime + cfgCreateEnemy[i].StartTime, waveTime + cfgCreateEnemy[i].EndTime });
-                    createdEnemyTower.Add("");
-                    createdEnemyTowerHp.Add(0);
-                    if (id != cfgCreateEnemy[i].WaveID)
+                    createdEnemy1.Add(false);
+                    createEnemyTime1.Add(new List<float> 
+                    { waveTime + cfgCreateEnemy1[i].StartTime, waveTime + cfgCreateEnemy1[i].EndTime });
+                    createdEnemyTower1.Add("");
+                    createdEnemyTowerHp1.Add(0);
+                    if (id != cfgCreateEnemy1[i].WaveID)
                     {
-                        waveTime += cfgCreateEnemy[i].WaveTime;
-                        id = cfgCreateEnemy[i].WaveID;
+                        waveTime += cfgCreateEnemy1[i].WaveTime;
+                        id = cfgCreateEnemy1[i].WaveID;
                     }
                 }
             }
         }
-        if(end == -1)
+    }
+
+    //计算是九个出怪表中的哪个出怪表
+    public void GetLevelOrientation()
+    {
+        List<int> soldierRank = new List<int>();
+        for(int i = 0; i < 3; i++)
         {
-            end = cfgCreateEnemy.Count - 1;
+            soldierRank.Add(SoldierEXP.expInstance.ssexp[i].level);
         }
-        idRange = new Vector2Int(start, end);
-
-        List<SingleDynamicEnemyConfig> cfg = GameManager.instance.allCfgData.CfgDynamicEnemy.DataList;
-        cfgDynamicEnemy = new();
-        int sheet = -1;
-        for(int i = 0; i < cfg.Count; i++)
+        int maxId = MaxSoldierLevel(soldierRank);
+        List<int> typeDir = new List<int> { 6, 4, 1 };
+        for(int i = 0; i < 2; i++)
         {
-            if(cfg[i].WaveID == -1)
+            levelTypes[i] = (typeDir[maxId] + 4 * i + Random.Range(-1, 2)+8)%8;
+            if(levelTypes[i] == 0)
             {
-                sheet++;
-                cfgDynamicEnemy.Add(new List<List<SingleDynamicEnemyConfig>>());
-                for (int j = 0; j < 3; j++)
-                {
-                    cfgDynamicEnemy[sheet].Add(new List<SingleDynamicEnemyConfig>());
-                }
-                continue;
+                levelTypes[i] = 8;
             }
-            cfgDynamicEnemy[sheet][cfg[i].WaveID - 1].Add(cfg[i]);
+            
         }
-        //把所有怪物prefab生成一遍防止后面初次生成卡顿
-        //foreach (var item in createCharacter)
-        //{
-        //    for(int i = 0; i < item.tile.spawnTime[item.spawnTimeId].num; i++)
-        //    {
-        //        CreateEnemy(item.tile, Vector3.zero, 1, 1,false);
-        //    }
-        //}
     }
+
     public void OnGameTimeChange(float gameTime)
     {
-        for (int i = idRange[0] + 1; i <= idRange[1]; i++)
+        for (int i = idRange[0] + 1; i < idRange[1]; i++)
         {
             int id = i - idRange[0] - 1;
             if (!createdEnemy[id])
@@ -153,10 +254,10 @@ public class EnemyCreater : MonoBehaviour
                     createdEnemy[id] = true;
                     StartCreateEnemy(cfgCreateEnemy[i]);
                 }
-                else if(cfgCreateEnemy[i].WaveID < 1)
+                else if (cfgCreateEnemy[i].WaveID < 1)
                 {
                     EnemyTower enemyTower = enemyCreateTowerDic[createdEnemyTower[id]];
-                    if (enemyTower != null && enemyTower.hp <= enemyTower.totalHp * createdEnemyTowerHp[id]/100f)
+                    if (enemyTower != null && enemyTower.hp <= enemyTower.totalHp * createdEnemyTowerHp[id] / 100f)
                     {
                         createdEnemy[id] = true;
                         StartCreateEnemy(cfgCreateEnemy[i]);
@@ -167,17 +268,37 @@ public class EnemyCreater : MonoBehaviour
                     if (createEnemyTime[id][0] <= gameTime)
                     {
                         createdEnemy[id] = true;
-                        if(cfgCreateEnemy[i].Dynamic == 0)
+                        StartCreateEnemy(cfgCreateEnemy[i]);
+                    }
+                }
+            }
+        }
+        if (GameManager.instance.leveType == LeveType.Conclusion)
+        {
+            for (int i = idRange1[0] + 1; i < idRange1[1]; i++)
+            {
+                int id = i - idRange1[0] - 1;
+                if (!createdEnemy1[id])
+                {
+                    if (cfgCreateEnemy1[i].WaveID == 0)
+                    {
+                        Debug.LogError("出怪表导入数据异常");
+                    }
+                    else if (cfgCreateEnemy1[i].WaveID < 1)
+                    {
+                        EnemyTower enemyTower = enemyCreateTowerDic[createdEnemyTower1[id]];
+                        if (enemyTower != null && enemyTower.hp <= enemyTower.totalHp * createdEnemyTowerHp1[id] / 100f)
                         {
-                            StartCreateEnemy(cfgCreateEnemy[i]);
+                            createdEnemy1[id] = true;
+                            StartCreateEnemy(cfgCreateEnemy1[i]);
                         }
-                        else
+                    }
+                    else
+                    {
+                        if (createEnemyTime1[id][0] <= gameTime)
                         {
-                            int maxID = MaxSoldierLevel();
-                            foreach(var item in cfgDynamicEnemy[cfgCreateEnemy[i].Dynamic - 1][maxID])
-                            {
-                                StartCreateEnemy(item);
-                            }
+                            createdEnemy1[id] = true;
+                            StartCreateEnemy(cfgCreateEnemy1[i]);
                         }
                     }
                 }
@@ -192,51 +313,7 @@ public class EnemyCreater : MonoBehaviour
         {
             return;
         }
-        if(cfgCreateEnemy.Count == 0 || cfgCreateEnemy.Position.Count < 2)
-        {
-            return;
-        }
-        if (cfgCreateEnemy.Count == 1)
-        {
-            int randId = Random.Range(0, cfgCreateEnemy.Position.Count / 2 - 1);
-            Vector3 pos = new Vector3(cfgCreateEnemy.Position[randId * 2], cfgCreateEnemy.Position[randId * 2 + 1], 0);
-            CreateEnemy(cfgCreateEnemy, pos, true);
-            return;
-        }
-        int num1 = cfgCreateEnemy.Count / (cfgCreateEnemy.Position.Count / 2);
-        int num2 = cfgCreateEnemy.Count % (cfgCreateEnemy.Position.Count / 2);
-        float TimeInterval = cfgCreateEnemy.StartTime >= cfgCreateEnemy.EndTime
-            ? 0
-            : (float)(cfgCreateEnemy.EndTime - cfgCreateEnemy.StartTime) / (num2 == 0 ? num1 - 1 : num1);
-        for (int i = 0; i < num1; i++)
-        {
-            for (int j = 0; j < cfgCreateEnemy.Position.Count; j += 2)
-            {
-                Vector3 pos = new Vector3(cfgCreateEnemy.Position[j], cfgCreateEnemy.Position[j + 1], 0);
-                CreateEnemy(cfgCreateEnemy, pos, true);
-            }
-            await Task.Delay((int)(TimeInterval * 1000), _cancellationTokenSource.Token);
-            if (this == null || !this.isActiveAndEnabled)
-            {
-                Debug.Log("取消任务");
-                return; // 如果对象已被销毁,直接返回
-            }
-        }
-        List<int> randomPos = new(cfgCreateEnemy.Position);
-        for (int i = 0; i < num2; i++)
-        {
-            int randId = Random.Range(0, randomPos.Count / 2 - 1);
-            Vector3 pos = new Vector3(randomPos[randId * 2], randomPos[randId * 2 + 1], 0);
-            randomPos.Remove(randId * 2 + 1);
-            randomPos.Remove(randId * 2);
-            CreateEnemy(cfgCreateEnemy, pos, true);
-        }
-    }
-
-    //动态每一行怪
-    public async void StartCreateEnemy(SingleDynamicEnemyConfig cfgCreateEnemy)
-    {
-        if (!instance)
+        if (cfgCreateEnemy.Count == 0 || cfgCreateEnemy.Position.Count < 2)
         {
             return;
         }
@@ -260,7 +337,7 @@ public class EnemyCreater : MonoBehaviour
                 CreateEnemy(cfgCreateEnemy, pos, true);
             }
             await Task.Delay((int)(TimeInterval * 1000), _cancellationTokenSource.Token);
-            if (this == null || !this.isActiveAndEnabled)
+            if (this == null || !this.isActiveAndEnabled || !GameManager.instance.isGaming)
             {
                 Debug.Log("取消任务");
                 return; // 如果对象已被销毁,直接返回
@@ -277,12 +354,12 @@ public class EnemyCreater : MonoBehaviour
         }
     }
 
-    public int MaxSoldierLevel()
+    //比较三个值里的最大值为哪个,等级相同则随机一个
+    public int MaxSoldierLevel(List<int> soldierRank)
     {
-        SoldierEXP.SingleSoldierEXP[] singleSoldierEXP = soldierEXP.ssexp;
-        int a = singleSoldierEXP[0].level;
-        int b = singleSoldierEXP[1].level;
-        int c = singleSoldierEXP[2].level;
+        int a = soldierRank[0];
+        int b = soldierRank[1];
+        int c = soldierRank[2];
         int max = Mathf.Max(a, Mathf.Max(b, c)); // 先找到最大值
 
         // 收集所有等于最大值的变量名(可能有多个)
@@ -307,14 +384,6 @@ public class EnemyCreater : MonoBehaviour
             pos, active);
     }
 
-    //动态出怪表每一波怪
-    public void CreateEnemy(SingleDynamicEnemyConfig cfg, Vector3 pos, bool active = false)
-    {
-        CreateEnemyInit(cfg.EnemyName, cfg.WaveName,
-            cfg.HPRatio, cfg.AttackRatio, cfg.SpeedRatio, cfg.ArmorRatio, cfg.ArmorPiercingRatio,
-            pos, active);
-    }
-
     public GameObject CreateEnemyInit(string EnemyName, string WaveName,
         float HPRatio, float AttackRatio, float SpeedRatio, float ArmorRatio, float ArmorPiercingRatio,
         Vector3 pos, bool active = false)

+ 3 - 2
ActionTowerDefense/Assets/Scripts/ExcelEditor.cs

@@ -157,8 +157,9 @@ public class ExcelEditor
         // 配置进程启动信息
         ProcessStartInfo psi = new ProcessStartInfo
         {
-            FileName = "cmd.exe", // 通过cmd调用
-            Arguments = $"/C \"{batPath}\"", // 传递.bat路径
+            //FileName = "cmd.exe", // 通过cmd调用
+            //Arguments = $"/C \"{batPath}\"", // 传递.bat路径
+            FileName = batPath, // 直接运行.bat文件
             WorkingDirectory = System.IO.Path.GetDirectoryName(batPath),
             UseShellExecute = true,
             CreateNoWindow = false

+ 86 - 7
ActionTowerDefense/Assets/Scripts/GameManager.cs

@@ -8,15 +8,16 @@ using TMPro;
 
 public enum SoldierType
 {
-    spear = 0,
-    sword = 1,
-    shield = 2,
+    sword = 0,
+    shield = 1,
+    spear = 2,
 }
 
 public class GameManager : MonoBehaviour
 {
     public static GameManager instance;
     public float gameTime;
+    public float totalGameTime;
     public Tables allCfgData;
     public UIHP p1uiHP;
     public UIHP p1uiMP;
@@ -24,6 +25,10 @@ public class GameManager : MonoBehaviour
     public TextMeshProUGUI text;
     static public SoldierType[] curSoldiers;   //本局游戏选择的三个士兵
     public GameObject chapterBG;    //当前关卡的原始背景(用于和boss背景做替换)
+    public List<CreateEnemyConfig> createEnemyConfigs;
+    public LeveType leveType;
+    public GameObject nextLevelButton;
+    public bool isGaming;
 
     private JSONNode Loader(string fileName)
     {
@@ -34,7 +39,17 @@ public class GameManager : MonoBehaviour
     {
         allCfgData = new Tables(Loader);
     }
+    public void ReloadCfgCreateEnemyData()
+    {
+        createEnemyConfigs = new List<CreateEnemyConfig>(); ;
+        for (int i = 0; i < 9; i++)
+        {
+            JSONNode keyValuePairs = JSON.Parse(File.ReadAllText($"GenerateDatas/json/CfgCreateEnemy{i}.json"));
+            CreateEnemyConfig createEnemyConfig = new CreateEnemyConfig(keyValuePairs);
+            createEnemyConfigs.Add(createEnemyConfig);
 
+        }
+    }
     private void Awake()
     {
         //选定本局游戏有哪些士兵,后面兵多了这里要改
@@ -47,24 +62,88 @@ public class GameManager : MonoBehaviour
         {
             instance = this;
             GetAllExcel();
+            ReloadCfgCreateEnemyData();
         }
         else
         {
             DestroyImmediate(gameObject);
             return;
         }
+        leveType = LeveType.Introduction;
+
     }
 
     private void Start()
     {
         gameTime = 0;
+        isGaming = true;
     }
 
     private void FixedUpdate()
     {
-        gameTime += Time.deltaTime;
-        EnemyCreater.instance.OnGameTimeChange(gameTime);
-        int timeText = (int)gameTime;
-        text.text = $"{timeText / 60:D2}:{timeText % 60:D2}({timeText}s)";
+        if (isGaming)
+        {
+            gameTime += Time.deltaTime;
+            totalGameTime += Time.deltaTime;
+            EnemyCreater.instance.OnGameTimeChange(gameTime);
+            int timeText = (int)totalGameTime;
+            text.text = $"{timeText / 60:D2}:{timeText % 60:D2}({timeText}s)";
+        }
+    }
+
+    //游戏结束
+    public void GameEnd()
+    {
+
+        isGaming = false;
+        foreach (List<Enemy> objs in EnemyCreater.instance.enemyDic.Values)
+        {
+            for (int i = 0; i < objs.Count; i++)
+            {
+                if (objs[i].gameObject.activeSelf)
+                {
+                    objs[i].ChangeState(CharacterState.Die);
+                }
+            }
+        }
+        if (leveType == LeveType.Conclusion)
+        {
+            return;
+        }
+
+        nextLevelButton.SetActive(true);
+    }
+
+    //下一关
+    public void NextLevel()
+    {
+        nextLevelButton.SetActive(false);
+
+        switch (leveType)
+        {
+            case LeveType.Introduction:
+                EnemyCreater.instance.GetLevelOrientation();
+                leveType = LeveType.Development;
+                break;
+            case LeveType.Development:
+                leveType = LeveType.Transition;
+                break;
+            case LeveType.Transition:
+                leveType = LeveType.Conclusion;
+                break;
+        }
+        PlayersInput.instance[0].PlayerRevive();
+        foreach(List<GameObject> objs in PoolManager.instance.activeObjs.Values)
+        {
+            List<GameObject> newObjs = new List<GameObject>(objs);
+            for(int i = 0; i < newObjs.Count; i++)
+            {
+                newObjs[i].gameObject.SetActive(false);
+            }
+        }
+        EnemyCreater.instance.Init();
+        LevelSelect.instance.ChangeText();
+        gameTime = 0;
+        isGaming = true;
     }
 }

+ 44 - 0
ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs

@@ -0,0 +1,44 @@
+using SimpleJSON;
+using System.Collections.Generic;
+
+public sealed partial class CreateEnemyConfig
+{
+    private readonly List<SingleCreateEnemyConfig> _dataList;
+
+
+    public CreateEnemyConfig(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemyConfig>();
+
+        foreach (JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemyConfig.DeserializeSingleCreateEnemyConfig(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemyConfig> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach (var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach (var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+
+    partial void PostInit();
+    partial void PostResolve();
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cd1879ea378c5724a944f52e56960ac3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 89 - 31
ActionTowerDefense/Assets/Scripts/Levels/LevelSelect.cs

@@ -1,39 +1,40 @@
-using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
-using UnityEditor;
 using UnityEngine.UI;
 using TMPro;
 using OfficeOpenXml;
 using System.IO;
 using Sirenix.OdinInspector;
+using SimpleJSON;
+
+public enum LeveType
+{
+    [LabelText("起")] Introduction,
+    [LabelText("承")] Development,
+    [LabelText("转")] Transition,
+    [LabelText("合")] Conclusion,
+}
 
 public class LevelSelect : MonoBehaviour
 {
+    public static LevelSelect instance;
+    [LabelText("调试开关")] public bool isDebug;
+    [ShowIf("isDebug")] [LabelText("合并关卡(测试用)")] public bool isAddLevel_debug;
+    [ShowIf("isDebug")] [LabelText("关卡类型A(测试用)")] public int levelIdA_debug;
+    [ShowIf("@isDebug && isAddLevel_debug")] [LabelText("关卡类型B(测试用)")] public int levelIdB_debug;
     public TextMeshProUGUI curLevel;
 
-    //[System.Serializable]
-    //public struct Level
-    //{
-    //    [Header("关卡名称")]
-    //    public string levelName;
-    //    public int levelId;
-    //    //[Header("出怪表sheet几")]
-    //    //public int enemyExcelID;
-    //    //[Header("建筑生成表sheet几")]
-    //    //public int buildingExcelID;
-    //}
-
-    [Header("当前关卡序号")]
-    public int curLevelID;
+    [LabelText("当前关卡序号")] public int curLevelID;
     [ReadOnly] public static float EXPRatio;
-
     [DisplayOnly] public List<string> levels;
-    [Button("-Reload-",ButtonSizes.Large)]
+
+
+    public List<List<int>> levelsId;
+    [Button("-Reload-", ButtonSizes.Large)]
     public void ReloadEnemyCreatExcel()
     {
         List<string> sheets = new();
-        FileInfo fileInfo = new FileInfo("Luban/Config/Datas/出怪表.xlsx");
+        FileInfo fileInfo = new FileInfo("Luban/Config/Datas/EnemyCreater/出怪表0.xlsx");
         using (ExcelPackage package = new ExcelPackage(fileInfo))
         {
             sheets = ExcelEditor.ReadExcelSheetsInfo(package);
@@ -41,28 +42,85 @@ public class LevelSelect : MonoBehaviour
         levels.Clear();
         for(int i = 0; i < sheets.Count; i++)
         {
-            levels.Add($"{i + 1}:{sheets[i]}");
+            levels.Add($"{i}:{sheets[i]}");
         }
         ExcelEditor.RunBat();
     }
 
-    //[Header("所有关卡配置")]
-    //public Level[] levelConfig;
-    private void OnValidate()
+
+
+    public void ReloadCfg()
     {
-        List<string> sheets = new();
-        FileInfo fileInfo = new FileInfo("Luban/Config/Datas/出怪表.xlsx");
-        using (ExcelPackage package = new ExcelPackage(fileInfo))
+        GameManager.instance.ReloadCfgCreateEnemyData();
+        levelsId = new List<List<int>>();
+        for (int i = 0; i < 9; i++)
         {
-            sheets = ExcelEditor.ReadExcelSheetsInfo(package);
-            float.TryParse(ExcelEditor.GetCellData(package, sheets[curLevelID - 1], "F5"), out EXPRatio);
+            List<int> levelId = new List<int>();
+            List<SingleCreateEnemyConfig> cfgCreateEnemy = GameManager.instance.createEnemyConfigs[i].DataList;
+            for (int j = 0; j < cfgCreateEnemy.Count; j++)
+            {
+                if(cfgCreateEnemy[j].WaveID == -1)
+                {
+                    levelId.Add(j);
+                }
+            }
+            levelsId.Add(levelId);
         }
+        Debug.Log("关卡数据导入完毕");
     }
-
-
     private void Awake()
     {
-        curLevel.text = levels[curLevelID - 1];
+        if (!instance)
+        {
+            instance = this;
+        }
+        else
+        {
+            DestroyImmediate(gameObject);
+            return;
+        }
+        
+    }
+
+    private void Start()
+    {
+        ChangeText();
+    }
+    public void ChangeText()
+    {
+        string text = levels[curLevelID];
 
+        if (isDebug)
+        {
+            text += $"_{levelIdA_debug}";
+            if (isAddLevel_debug)
+            {
+                text += $"+{levelIdB_debug}";
+            }
+        }
+        else
+        {
+            switch (GameManager.instance.leveType)
+            {
+                case LeveType.Introduction:
+                    text += "_起";
+                    break;
+                case LeveType.Development:
+                    text += "_承";
+                    text += $"_{EnemyCreater.instance.levelTypes[0]}";
+                    break;
+                case LeveType.Transition:
+                    text += "_转";
+                    text += $"_{EnemyCreater.instance.levelTypes[1]}";
+                    break;
+                case LeveType.Conclusion:
+                    text += "_合";
+                    text += $"_{EnemyCreater.instance.levelTypes[0]}+{EnemyCreater.instance.levelTypes[1]}";
+                    break;
+            }
+        }
+
+        curLevel.text = text;
     }
+
 }

+ 115 - 0
ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs

@@ -0,0 +1,115 @@
+using SimpleJSON;
+using Bright.Serialization;
+using System.Collections.Generic;
+
+public sealed partial class SingleCreateEnemyConfig : Bright.Config.BeanBase
+{
+    public SingleCreateEnemyConfig(JSONNode _json)
+    {
+        { if (!_json["WaveID"].IsNumber) { throw new SerializationException(); } WaveID = _json["WaveID"]; }
+        { if (!_json["WaveName"].IsString) { throw new SerializationException(); } WaveName = _json["WaveName"]; }
+        { if (!_json["WaveTime"].IsNumber) { throw new SerializationException(); } WaveTime = _json["WaveTime"]; }
+        { if (!_json["BuildingID"].IsString) { throw new SerializationException(); } BuildingID = _json["BuildingID"]; }
+        { if (!_json["BuildingHP"].IsNumber) { throw new SerializationException(); } BuildingHP = _json["BuildingHP"]; }
+        { if (!_json["EnemyName"].IsString) { throw new SerializationException(); } EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if (!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach (JSONNode __e0 in __json0.Children) { int __v0; { if (!__e0.IsNumber) { throw new SerializationException(); } __v0 = __e0; } Position.Add(__v0); } }
+        { if (!_json["StartTime"].IsNumber) { throw new SerializationException(); } StartTime = _json["StartTime"]; }
+        { if (!_json["EndTime"].IsNumber) { throw new SerializationException(); } EndTime = _json["EndTime"]; }
+        { if (!_json["Count"].IsNumber) { throw new SerializationException(); } Count = _json["Count"]; }
+        { if (!_json["AttackRatio"].IsNumber) { throw new SerializationException(); } AttackRatio = _json["AttackRatio"]; }
+        { if (!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); } SpeedRatio = _json["SpeedRatio"]; }
+        { if (!_json["HPRatio"].IsNumber) { throw new SerializationException(); } HPRatio = _json["HPRatio"]; }
+        { if (!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); } ArmorRatio = _json["ArmorRatio"]; }
+        { if (!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); } ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+    public SingleCreateEnemyConfig(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio)
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemyConfig DeserializeSingleCreateEnemyConfig(JSONNode _json)
+    {
+        return new SingleCreateEnemyConfig(_json);
+    }
+
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public string BuildingID { get; private set; }
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -980553554;
+    public override int GetTypeId() => __ID__;
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+
+    partial void PostInit();
+    partial void PostResolve();
+}

+ 1 - 1
ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs.meta → ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: b9c10a1e619909c4287d953082566739
+guid: 82dcfeb6c9bedc44580e5916f8cc94d8
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 9 - 0
ActionTowerDefense/Assets/Scripts/PoolManager.cs

@@ -6,6 +6,7 @@ public class PoolManager : MonoBehaviour
 {
     public static PoolManager instance;
     public Dictionary<GameObject, List<GameObject>> pools;
+    public Dictionary<GameObject, List<GameObject>> activeObjs;
 
     void Awake()
     {
@@ -17,6 +18,7 @@ public class PoolManager : MonoBehaviour
         instance = this;
 
         pools = new Dictionary<GameObject, List<GameObject>>();
+        activeObjs = new Dictionary<GameObject, List<GameObject>>();
     }
 
     public static GameObject Instantiate(GameObject prefab, Vector3 pos = default, Quaternion rotation = default, Transform parent = null)
@@ -37,6 +39,11 @@ public class PoolManager : MonoBehaviour
             poolItem.prefab = prefab;
         }
         go.SetActive(true);
+        if (!instance.activeObjs.ContainsKey(prefab))
+        {
+            instance.activeObjs.Add(prefab, new List<GameObject>());
+        }
+        instance.activeObjs[prefab].Add(go);
         return go;
     }
 
@@ -47,6 +54,7 @@ public class PoolManager : MonoBehaviour
             pools.Add(poolItem.prefab, new List<GameObject>());
         }
         pools[poolItem.prefab].Add(poolItem.gameObject);
+        activeObjs[poolItem.prefab].Remove(poolItem.gameObject);
     }
 
     public void DestroyItem(PoolItem poolItem)
@@ -56,5 +64,6 @@ public class PoolManager : MonoBehaviour
             return;
         }
         pools[poolItem.prefab].Remove(poolItem.gameObject);
+        activeObjs[poolItem.prefab].Remove(poolItem.gameObject);
     }
 }

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Portal/PortalsCreater.cs

@@ -9,7 +9,7 @@ public class PortalsCreater : MonoBehaviour
     public PortalsController[] portalsControllers = new PortalsController[2];
     public CoreCharacter coreCharacter;
     [HideInInspector]
-    public EnemyCreater enemyCreater;
+    //public EnemyCreater enemyCreater;
     public PortalsCountDownUI portalsDownUI;
 
     public TextMeshProUGUI[] countDowns;        //µ¹¼ÆÊ±

+ 5 - 2
ActionTowerDefense/Assets/Scripts/Rougue/SoldierLevelRecord.cs

@@ -5,6 +5,8 @@ using cfg;
 
 public class SoldierLevelRecord : MonoBehaviour
 {
+    public LevelSelect levelSelect;
+
     [System.Serializable]
     public struct SoldierExtraBuff
     {
@@ -49,10 +51,11 @@ public class SoldierLevelRecord : MonoBehaviour
         allSoldierEXPLists = new List<SoldierEXPList>();
         RecordLevelLists();
         CurGameSoldierEXPList();
+        Test_LevelSetting test_LevelSetting = GetComponent<Test_LevelSetting>();
         //测试用——开局士兵初始等级
-        if(GetComponent<Test_LevelSetting>() != null)
+        if(test_LevelSetting != null && levelSelect.isDebug)
         {
-            GetComponent<Test_LevelSetting>().TestLevel();
+            test_LevelSetting.TestLevel();
         }
 
     }

+ 2 - 1
ActionTowerDefense/Assets/Scripts/Rougue/Test_LevelSetting.cs

@@ -6,6 +6,7 @@ using cfg;
 
 public class Test_LevelSetting : MonoBehaviour
 {
+    
     [System.Serializable]
     public struct LevelSetting
     {
@@ -33,7 +34,7 @@ public class Test_LevelSetting : MonoBehaviour
             {
                 if (sel.st == ls.st)
                 {
-                    needEXP = sel.ssl[ls.origLevel - 1].EXP;
+                    needEXP = sel.ssl[ls.origLevel - 2].EXP;
                 }
             }
             sexp.AddEXP(ls.st, needEXP);

+ 4 - 0
ActionTowerDefense/Assets/Scripts/Tower/EnemyTower.cs

@@ -71,6 +71,10 @@ public class EnemyTower : Character
                 if (dieKeepTime <= 0)
                 {
                     TowerMap.enemyTowers.Remove(gameObject);
+                    if(TowerMap.enemyTowers.Count ==0)
+                    {
+                        GameManager.instance.GameEnd();
+                    }
                     gameObject.SetActive(false);
                     break;
                 }

+ 0 - 3296
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json

@@ -1,3296 +0,0 @@
-[
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "敌塔1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      120,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "血量动态",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "敌塔1",
-    "BuildingHP": 50,
-    "EnemyName": "飞胖",
-    "Position": [
-      57,
-      4,
-      60,
-      4,
-      60,
-      6
-    ],
-    "StartTime": 1,
-    "EndTime": 2,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "白鹭",
-    "Position": [
-      60,
-      8
-    ],
-    "StartTime": 5,
-    "EndTime": 60,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "1.5爆发",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "白鹭",
-    "Position": [
-      59,
-      12,
-      63,
-      12
-    ],
-    "StartTime": 40,
-    "EndTime": 45,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      32,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      118,
-      1,
-      120,
-      1,
-      122,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "1塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 99,
-    "EnemyName": "大猪",
-    "Position": [
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      57,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      56,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "1塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 40,
-    "EnemyName": "大猪",
-    "Position": [
-      58,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 2,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      56,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      55,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "2塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 99,
-    "EnemyName": "老鬼头",
-    "Position": [
-      28,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      28,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "2塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 50,
-    "EnemyName": "道士",
-    "Position": [
-      26,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      27,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "3塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 99,
-    "EnemyName": "幽灵头",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "3塔出2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 70,
-    "EnemyName": "道士",
-    "Position": [
-      1,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "3塔出3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 40,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 30,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      2,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 15,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      1,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "动",
-    "Dynamic": 2,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔1",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      32,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      118,
-      1,
-      120,
-      1,
-      122,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "1塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 99,
-    "EnemyName": "大猪",
-    "Position": [
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      57,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      56,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "1塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 40,
-    "EnemyName": "大猪",
-    "Position": [
-      58,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 2,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      56,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      55,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "2塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 99,
-    "EnemyName": "老鬼头",
-    "Position": [
-      28,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      28,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "2塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 50,
-    "EnemyName": "道士",
-    "Position": [
-      26,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      27,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "3塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 99,
-    "EnemyName": "幽灵头",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "3塔出2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 70,
-    "EnemyName": "道士",
-    "Position": [
-      1,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "3塔出3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 40,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      2,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 15,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 3,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 3,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 3,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 3,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 3,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 3,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔3",
-    "Dynamic": 0,
-    "WaveTime": 5,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      55,
-      1,
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      118,
-      1,
-      120,
-      1,
-      122,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "1出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 99,
-    "EnemyName": "1013",
-    "Position": [
-      58,
-      1,
-      61,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 8,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      57,
-      5
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "1出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 40,
-    "EnemyName": "1013",
-    "Position": [
-      56,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 12,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      58,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      56,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "初始",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      67,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      68,
-      4,
-      70,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 8,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      58,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2波",
-    "Dynamic": 0,
-    "WaveTime": 15,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      35,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 8,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      26,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 10,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      35,
-      1,
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      26,
-      8,
-      51,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 15,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      53,
-      1,
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      8,
-      50,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 15,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      35,
-      1,
-      53,
-      1,
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 12,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      42,
-      1,
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      26,
-      8,
-      44,
-      8,
-      50,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 6,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  }
-]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy0.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy1.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "小猪",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "小猪",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 11,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy2.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy3.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "大猪",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "大猪",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy4.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "幽灵头",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "幽灵头",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy5.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy6.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy7.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy8.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 0 - 265
ActionTowerDefense/GenerateDatas/json/cfgdynamicenemy.json

@@ -1,265 +0,0 @@
-[
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "对空",
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "EnemyName": "小猪",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "对肉",
-    "EnemyName": "老鬼头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "",
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "对地",
-    "EnemyName": "道士",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "",
-    "EnemyName": "小猪",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "对空",
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 6,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1.5,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "对肉",
-    "EnemyName": "老鬼头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1.5,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "对地",
-    "EnemyName": "道士",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 15,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1.5,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "对空",
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "对肉",
-    "EnemyName": "老鬼头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 40,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "对地",
-    "EnemyName": "道士",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  }
-]

BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表0.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表1.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表2.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表3.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表4.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表5.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表6.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表7.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表8.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx


Vissa filer visades inte eftersom för många filer har ändrats