|
|
@@ -7,6 +7,7 @@ using System.Linq;
|
|
|
using cfg;
|
|
|
using SimpleJSON;
|
|
|
using System.IO;
|
|
|
+using OfficeOpenXml;
|
|
|
|
|
|
public class GameMapEditor : EditorWindow
|
|
|
{
|
|
|
@@ -125,6 +126,7 @@ public class GameMapEditor : EditorWindow
|
|
|
private static readonly GUIContent GC_rename = new GUIContent("rename");
|
|
|
private static readonly GUIContent GC_apply = new GUIContent("apply");
|
|
|
private static readonly GUIContent GC_reload = new GUIContent("reload");
|
|
|
+ private static readonly GUIContent GC_save = new GUIContent("save");
|
|
|
private static readonly GUIContent GC_add = new GUIContent("+", "Add");
|
|
|
private static readonly GUIContent GC_rem = new GUIContent("-", "Remove selected");
|
|
|
private static readonly GUIContent GC_movL = new GUIContent("<", "Move selected");
|
|
|
@@ -703,7 +705,13 @@ public class GameMapEditor : EditorWindow
|
|
|
|
|
|
void ReloadSheetName(string path)
|
|
|
{
|
|
|
- List<string> excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(path);
|
|
|
+ List<string> excelWorksheets = new();
|
|
|
+ FileInfo fileInfo = new FileInfo(path);
|
|
|
+ using (ExcelPackage package = new ExcelPackage(fileInfo))
|
|
|
+ {
|
|
|
+ excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
|
|
|
+ }
|
|
|
+
|
|
|
Tables allCfgData = new Tables(ExcelEditor.Loader);
|
|
|
List<SingleCreateEnemyConfig> cfgCreateEnemy = allCfgData.CfgCreateEnemy.DataList;
|
|
|
//导入关卡数据
|
|
|
@@ -937,8 +945,7 @@ public class GameMapEditor : EditorWindow
|
|
|
// 显示并编辑图层名称
|
|
|
EditorGUI.BeginChangeCheck();
|
|
|
string addName = EditorGUILayout.TextField("波次名称", layer.name);
|
|
|
-
|
|
|
- int duration = EditorGUILayout.IntField("波次出怪时间", layer.duration);
|
|
|
+ int duration = EditorGUILayout.IntField("下一波时间", layer.duration);
|
|
|
float addHp = EditorGUILayout.FloatField("血量倍率", layer.Hp);
|
|
|
float addMoveSpeed = EditorGUILayout.FloatField("速度倍率", layer.moveSpeed);
|
|
|
float addAttack = EditorGUILayout.FloatField("攻击倍率", layer.attack);
|
|
|
@@ -1146,7 +1153,14 @@ public class GameMapEditor : EditorWindow
|
|
|
{
|
|
|
ReloadEnemyExcelData(enemyExcelPath);
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ r.x -= 65f;
|
|
|
+ r.width = 60;
|
|
|
+ if (GUI.Button(r, GC_save, EditorStyles.miniButton))
|
|
|
+ {
|
|
|
+ SaveToEnemyExcel(enemyExcelPath);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
|
showTileProperties = EditorGUILayout.Foldout(showTileProperties, GC_TilesHead, true);
|
|
|
@@ -1213,6 +1227,7 @@ public class GameMapEditor : EditorWindow
|
|
|
DrawTileList(ev);
|
|
|
}
|
|
|
|
|
|
+ //读取怪物表数据
|
|
|
void ReloadEnemyExcelData(string path)
|
|
|
{
|
|
|
for (int i = asset.tileAsset.tiles.Count - 1; i>=0 ; i--)
|
|
|
@@ -1227,32 +1242,108 @@ public class GameMapEditor : EditorWindow
|
|
|
tileIdx = -1;
|
|
|
Tables allCfgData = new Tables(ExcelEditor.Loader);
|
|
|
int id = 0;
|
|
|
- foreach (var item in allCfgData.CfgEnemy.DataMap)
|
|
|
- {
|
|
|
- SingleEnemyConfig cfgEnemy = item.Value;
|
|
|
- asset.tileAsset.AddTile();
|
|
|
- GameMapTile tile = asset.tileAsset.tiles[asset.tileAsset.tiles.Count - 1];
|
|
|
|
|
|
- Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>($"Assets/GameLevelEditor/Ui_Textures/{cfgEnemy.SpriteName}.png");
|
|
|
- tile.name = cfgEnemy.Name;
|
|
|
- foreach(var sheetName in ExcelEditor.ReadExcelSheetsInfo(createEnemyExcelPath))
|
|
|
- {
|
|
|
- ExcelEditor.ModifyExcel(createEnemyExcelPath, sheetName, 7, 3 + id, tile.name);
|
|
|
+ List<string> excelsSheets = new();
|
|
|
+ FileInfo fileInfo = new FileInfo(createEnemyExcelPath);
|
|
|
+ using (ExcelPackage package = new ExcelPackage(fileInfo))
|
|
|
+ {
|
|
|
+ excelsSheets = ExcelEditor.ReadExcelSheetsInfo(package);
|
|
|
+ foreach (var item in allCfgData.CfgEnemy.DataMap)
|
|
|
+ {
|
|
|
+ SingleEnemyConfig cfgEnemy = item.Value;
|
|
|
+ asset.tileAsset.AddTile();
|
|
|
+ GameMapTile tile = asset.tileAsset.tiles[asset.tileAsset.tiles.Count - 1];
|
|
|
+
|
|
|
+ Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>($"Assets/GameLevelEditor/Ui_Textures/{cfgEnemy.SpriteName}.png");
|
|
|
+ tile.name = cfgEnemy.Name;
|
|
|
+ foreach (var sheetName in excelsSheets)
|
|
|
+ {
|
|
|
+ ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + id, tile.name);
|
|
|
+ }
|
|
|
|
|
|
+ tile.sprite = sprite;
|
|
|
+ ColorUtility.TryParseHtmlString(cfgEnemy.Color, out tile.color);
|
|
|
+ Enum.TryParse(cfgEnemy.Type, out tile.type);
|
|
|
+ Enum.TryParse(cfgEnemy.EnemyPrefab, out tile.ch);
|
|
|
+ tile.radius = new Vector2(cfgEnemy.Radius[0], cfgEnemy.Radius[1]);
|
|
|
+ tile.parameter.HP = cfgEnemy.HP;
|
|
|
+ tile.parameter.Attack_summon = cfgEnemy.AttackSummon;
|
|
|
+ tile.parameter.Attack_march = cfgEnemy.AttackMarch;
|
|
|
+ tile.parameter.MinMoveSpeed = cfgEnemy.MinMoveSpeed;
|
|
|
+ tile.parameter.MaxMoveSpeed = cfgEnemy.MaxMoveSpeed;
|
|
|
+
|
|
|
+ TileDef def = new TileDef() { id = tile.id };
|
|
|
+ UpdateCachedValues(def, tile, false);
|
|
|
+ tileCache.Add(def.id, def);
|
|
|
+ id++;
|
|
|
}
|
|
|
-
|
|
|
- tile.sprite = sprite;
|
|
|
- ColorUtility.TryParseHtmlString(cfgEnemy.Color, out tile.color);
|
|
|
- Enum.TryParse(cfgEnemy.Type, out tile.type);
|
|
|
- Enum.TryParse(cfgEnemy.EnemyPrefab, out tile.ch);
|
|
|
-
|
|
|
- TileDef def = new TileDef() { id = tile.id };
|
|
|
- UpdateCachedValues(def, tile, false);
|
|
|
- tileCache.Add(def.id, def);
|
|
|
- id++;
|
|
|
+
|
|
|
+ for (int i = 0; i < 100; i++)
|
|
|
+ {
|
|
|
+ foreach (var sheetName in excelsSheets)
|
|
|
+ {
|
|
|
+ ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + id + i, "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ package.Save();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
doRepaint = true;
|
|
|
- Debug.Log("怪物表数据导入成功!");
|
|
|
+ Debug.Log("怪物表数据导入完毕!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存怪物表
|
|
|
+ void SaveToEnemyExcel(string path)
|
|
|
+ {
|
|
|
+ List<string> excelsSheets = new();
|
|
|
+ FileInfo fileInfo = new FileInfo(createEnemyExcelPath);
|
|
|
+ using (ExcelPackage package = new ExcelPackage(fileInfo))
|
|
|
+ {
|
|
|
+ excelsSheets = ExcelEditor.ReadExcelSheetsInfo(package);
|
|
|
+ for (int i = 0; i < asset.tileAsset.tiles.Count; i++)
|
|
|
+ {
|
|
|
+ GameMapTile tile = asset.tileAsset.tiles[i];
|
|
|
+ foreach (var sheetName in excelsSheets)
|
|
|
+ {
|
|
|
+ ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + i, tile.name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = 0; i < 100; i++)
|
|
|
+ {
|
|
|
+ foreach (var sheetName in excelsSheets)
|
|
|
+ {
|
|
|
+ ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + asset.tileAsset.tiles.Count + i, "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ package.Save();
|
|
|
+ }
|
|
|
+ fileInfo = new FileInfo(path);
|
|
|
+ using (ExcelPackage package = new ExcelPackage(fileInfo))
|
|
|
+ {
|
|
|
+ for (int i = 0; i < asset.tileAsset.tiles.Count; i++)
|
|
|
+ {
|
|
|
+ GameMapTile tile = asset.tileAsset.tiles[i];
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"B{8 + i}", tile.name);
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"C{8 + i}", tile.sprite.name);
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"D{8 + i}", $"#{ColorUtility.ToHtmlStringRGB(tile.color)}");
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"E{8 + i}", Enum.GetName(typeof(GameMapTile.Type), tile.type));
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"F{8 + i}", Enum.GetName(typeof(GameMapTile.CH), tile.ch));
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"G{8 + i}", $"{tile.radius.x},{tile.radius.y}");
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"H{8 + i}", tile.parameter.HP.ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"I{8 + i}", tile.parameter.Attack_summon.ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"J{8 + i}", tile.parameter.Attack_march.ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"K{8 + i}", tile.parameter.MinMoveSpeed.ToString());
|
|
|
+ ExcelEditor.ModifyExcel(package, "CfgEnemy", $"L{8 + i}", tile.parameter.MaxMoveSpeed.ToString());
|
|
|
+ }
|
|
|
+ ExcelEditor.RemoveExcelRows(package, "CfgEnemy", 8 + asset.tileAsset.tiles.Count, 108 + asset.tileAsset.tiles.Count);
|
|
|
+ package.Save();
|
|
|
+ }
|
|
|
+ Debug.Log("怪物表数据保存完毕!");
|
|
|
}
|
|
|
|
|
|
private void OnAutoTileChange(int idx)
|