|
|
@@ -6,7 +6,6 @@ using cfg;
|
|
|
using System;
|
|
|
using System.IO;
|
|
|
using OfficeOpenXml;
|
|
|
-using System.Diagnostics;
|
|
|
|
|
|
public class GameMapEdPopup : PopupWindowContent
|
|
|
{
|
|
|
@@ -52,7 +51,6 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
|
|
|
public override void OnGUI(Rect r)
|
|
|
{
|
|
|
-
|
|
|
DrawHeader(new Rect(0, 0, r.width, 25));
|
|
|
r.y += 25; r.height -= 25;
|
|
|
scroll = GUI.BeginScrollView(r, scroll, contentRect, false, true);
|
|
|
@@ -73,28 +71,7 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
GUI.Label(r, GC_Head, EditorStyles.boldLabel);
|
|
|
r.x = r.xMax - 90; r.y = 5; r.width = 80;
|
|
|
GUI.enabled = list.index >= 0;
|
|
|
- //if (GUI.Button(r, GC_Rem, EditorStyles.miniButtonRight))
|
|
|
- //{
|
|
|
- // if (list.index >= 0 && list.index < Asset.maps.Count)
|
|
|
- // {
|
|
|
- // Undo.RecordObject(Asset, "Remove Game Map");
|
|
|
- // int key = list.index;
|
|
|
- // Asset.RemoveMapAtIndex(list.index);
|
|
|
- // ChangeContentRect();
|
|
|
- // if (key == 0)
|
|
|
- // {
|
|
|
- // OnMapSelected(0);
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // OnMapSelected(key - 1);
|
|
|
- // }
|
|
|
-
|
|
|
- // }
|
|
|
- //}
|
|
|
-
|
|
|
- //GUI.enabled = true;
|
|
|
- //r.x -= 25;
|
|
|
+
|
|
|
if (GUI.Button(r, GC_Add, EditorStyles.miniButtonLeft))
|
|
|
{
|
|
|
if (isSelect)
|
|
|
@@ -106,7 +83,15 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- SaveAsNewExcelData(GameMapEditor.createEnemyExcelPath);
|
|
|
+ if (GameMapEditor.asset.maps[0].isDynamic)
|
|
|
+ {
|
|
|
+ SaveAsNewCreateEnemyData(true);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SaveAsNewCreateEnemyData(false);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
editorWindow.Close();
|
|
|
}
|
|
|
@@ -121,18 +106,43 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
{
|
|
|
if (isSelect)
|
|
|
{
|
|
|
- ReloadExcelData(GameMapEditor.createEnemyExcelPath, list.index + 1);
|
|
|
+ if(list.index + 1 >= GameMapEditor.asset.dynamicSheetStart)
|
|
|
+ {
|
|
|
+ ReloadDynamicEnemyData(list.index + 1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ReloadCreateEnemyData(list.index + 1);
|
|
|
+ }
|
|
|
+
|
|
|
OnMapSelected(0);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- SaveExcelData(GameMapEditor.createEnemyExcelPath, list.index + 1);
|
|
|
+ if (GameMapEditor.asset.maps[0].isDynamic)
|
|
|
+ {
|
|
|
+ SaveDynamicEnemyData(list.index + 1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SaveCreateEnemyData(list.index + 1);
|
|
|
+ }
|
|
|
}
|
|
|
editorWindow.Close();
|
|
|
}
|
|
|
|
|
|
- void SaveAsNewExcelData(string path)
|
|
|
+ void SaveAsNewCreateEnemyData(bool isDynamic)
|
|
|
{
|
|
|
+ string path = "";
|
|
|
+ if (isDynamic)
|
|
|
+ {
|
|
|
+ path = GameMapEditor.dynamicEnemyExcelPath;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ path = GameMapEditor.createEnemyExcelPath;
|
|
|
+ }
|
|
|
+
|
|
|
FileInfo fileInfo = new FileInfo(path);
|
|
|
using (ExcelPackage package = new ExcelPackage(fileInfo))
|
|
|
{
|
|
|
@@ -152,11 +162,20 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
- SaveExcelData(path, 0,true);
|
|
|
+ if (isDynamic)
|
|
|
+ {
|
|
|
+ SaveDynamicEnemyData(0, true);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SaveCreateEnemyData(0, true);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- void SaveExcelData(string path, int mapIdx, bool isNew = false)
|
|
|
+ void SaveCreateEnemyData(int mapIdx, bool isNew = false)
|
|
|
{
|
|
|
+ string path = GameMapEditor.createEnemyExcelPath;
|
|
|
List<string> excelWorksheets = new();
|
|
|
GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
|
|
|
FileInfo fileInfo = new FileInfo(path);
|
|
|
@@ -174,107 +193,218 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
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;
|
|
|
float idFloat = 0f;
|
|
|
- int idInt = 0;
|
|
|
+ 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);
|
|
|
- if (layer.isFromTower)
|
|
|
- {
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.buildingId);
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", layer.buildingHp.ToString());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if ((!layer.isTowerWave && !layer.isFromTower) || i == 0)
|
|
|
- {
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.duration.ToString());
|
|
|
- }
|
|
|
-
|
|
|
+ switch (layer.waveType)
|
|
|
+ {
|
|
|
+ case WaveType.Common:
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{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());
|
|
|
+ idFloat += 0.01f;
|
|
|
+ break;
|
|
|
+ case WaveType.Tower:
|
|
|
+ if(i == 0)
|
|
|
+ {
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.duration.ToString());
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
- if (!layer.isTowerWave)
|
|
|
+ if (layer.isDynamic)
|
|
|
{
|
|
|
- if (layer.isFromTower)
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.dynamicSheet.ToString());
|
|
|
+ switch (layer.waveType)
|
|
|
{
|
|
|
- idFloat += 0.01f;
|
|
|
+ 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;
|
|
|
}
|
|
|
- else
|
|
|
+ cell_row++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ foreach (var item in layer.spawnTimes)
|
|
|
{
|
|
|
- idInt++;
|
|
|
+ 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());
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"M{cell_row}", (spawnTime.attack == 0 ? 1 : spawnTime.attack).ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"N{cell_row}", (spawnTime.moveSpeed == 0 ? 1 : spawnTime.moveSpeed).ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"O{cell_row}", (spawnTime.Hp == 0 ? 1 : spawnTime.Hp).ToString());
|
|
|
+ cell_row++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for (int j = 0;j< layer.spawnTimes.Count; j++)
|
|
|
- {
|
|
|
- SpawnTime spawnTime = layer.spawnTimes[j];
|
|
|
+
|
|
|
+ }
|
|
|
+ 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;
|
|
|
try
|
|
|
{
|
|
|
if (spawnTime.pos.Count == 0)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- UnityEngine.Debug.LogException(e);
|
|
|
- }
|
|
|
-
|
|
|
- if (layer.isTowerWave)
|
|
|
- {
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
|
|
|
- }
|
|
|
- else if (layer.isFromTower)
|
|
|
- {
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row:F2}", idFloat.ToString());
|
|
|
}
|
|
|
- else
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row:F2}", idInt.ToString());
|
|
|
+ UnityEngine.Debug.LogException(e);
|
|
|
}
|
|
|
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
|
|
|
string posString = "";
|
|
|
- for(int k = 0; k < spawnTime.pos.Count; k++)
|
|
|
- {
|
|
|
+ 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
|
|
|
- {
|
|
|
+ else
|
|
|
+ {
|
|
|
posString += w.ToString();
|
|
|
posString += ",";
|
|
|
posString += (h + 1).ToString();
|
|
|
}
|
|
|
- if(k == spawnTime.pos.Count - 1)
|
|
|
- {
|
|
|
+ if (k == spawnTime.pos.Count - 1)
|
|
|
+ {
|
|
|
break;
|
|
|
- }
|
|
|
+ }
|
|
|
posString += ",";
|
|
|
- }
|
|
|
- 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());
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"L{cell_row}", (spawnTime.attack == 0?1:spawnTime.attack).ToString());
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"M{cell_row}", (spawnTime.moveSpeed == 0?1:spawnTime.moveSpeed).ToString());
|
|
|
- ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"N{cell_row}", (spawnTime.Hp == 0?1:spawnTime.Hp).ToString());
|
|
|
+ }
|
|
|
+ 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, $"I{cell_row}", (spawnTime.attack == 0 ? 1 : spawnTime.attack).ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"J{cell_row}", (spawnTime.moveSpeed == 0 ? 1 : spawnTime.moveSpeed).ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"K{cell_row}", (spawnTime.Hp == 0 ? 1 : spawnTime.Hp).ToString());
|
|
|
cell_row++;
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
try
|
|
|
{
|
|
|
package.Save();
|
|
|
@@ -292,8 +422,9 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
ExcelEditor.RunBat();
|
|
|
}
|
|
|
|
|
|
- public void ReloadExcelData(string path, int mapIdx)
|
|
|
+ public void ReloadCreateEnemyData(int mapIdx)
|
|
|
{
|
|
|
+ string path = GameMapEditor.createEnemyExcelPath;
|
|
|
ExcelEditor.RunBat();
|
|
|
List<string> excelWorksheets = new();
|
|
|
Tables allCfgData = new Tables(ExcelEditor.Loader);
|
|
|
@@ -316,6 +447,7 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
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)
|
|
|
@@ -325,7 +457,6 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
break;
|
|
|
}
|
|
|
mapId++;
|
|
|
- ArrayUtility.Clear(ref gameMap.layers);
|
|
|
continue;
|
|
|
}
|
|
|
if(mapId == mapIdx - 1)
|
|
|
@@ -338,7 +469,7 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
|
|
|
gameMapLayer.name = singleCreateEnemyConfig.WaveName;
|
|
|
gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
|
|
|
- gameMapLayer.isTowerWave = true;
|
|
|
+ gameMapLayer.waveType = WaveType.Tower;
|
|
|
|
|
|
ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
|
|
|
}
|
|
|
@@ -363,19 +494,25 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
gameMapLayer.name = singleCreateEnemyConfig.WaveName;
|
|
|
if(cfgCreateEnemy[i].WaveID < 1)
|
|
|
{
|
|
|
- gameMapLayer.isFromTower = true;
|
|
|
+ gameMapLayer.waveType = WaveType.FromTower;
|
|
|
gameMapLayer.buildingId = singleCreateEnemyConfig.BuildingID;
|
|
|
gameMapLayer.buildingHp = singleCreateEnemyConfig.BuildingHP;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- gameMapLayer.isFromTower = false;
|
|
|
+ gameMapLayer.waveType = WaveType.Common;
|
|
|
gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- //波次第一行怪物数据
|
|
|
- ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
|
|
|
+ if(cfgCreateEnemy[i].Dynamic == 0)
|
|
|
+ {
|
|
|
+ //波次第一行怪物数据
|
|
|
+ ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ gameMapLayer.isDynamic = true;
|
|
|
+ gameMapLayer.dynamicSheet = cfgCreateEnemy[i].Dynamic;
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -399,6 +536,75 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
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]}\"表导入完毕!");
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
public void ReloadEnemyInWave(GameMapLayer layer, SingleCreateEnemyConfig cfgData, string SheetName)
|
|
|
{
|
|
|
@@ -407,12 +613,11 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
|
|
|
return;
|
|
|
}
|
|
|
- int spawnTimeId = layer.spawnTimes.FindIndex(x => GameMapEditor.asset.tileAsset.GetTile(x.id).name == cfgData.EnemyName);
|
|
|
- if (layer.spawnTimes.Count == 0 || spawnTimeId == -1)
|
|
|
+ GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
|
|
|
+ if (!layer.spawnTimes.ContainsKey(tile.id))
|
|
|
{
|
|
|
SpawnTime spawnTime = new();
|
|
|
|
|
|
- GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
|
|
|
spawnTime.id = tile.id;
|
|
|
if (cfgData.Position.Count % 2 != 0)
|
|
|
{
|
|
|
@@ -433,12 +638,52 @@ public class GameMapEdPopup : PopupWindowContent
|
|
|
spawnTime.moveSpeed = cfgData.SpeedRatio;
|
|
|
spawnTime.attack = cfgData.AttackRatio;
|
|
|
|
|
|
- layer.spawnTimes.Add(spawnTime);
|
|
|
+ layer.spawnTimes.Add(tile.id,spawnTime);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- UnityEngine.Debug.LogError($"波次中\"{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}\"重复");
|
|
|
+ }
|
|
|
+ }
|
|
|
// ----------------------------------------------------------------------------------------------------------------
|
|
|
}
|