|
@@ -124,7 +124,7 @@ public class GameMapEditor : EditorWindow
|
|
|
private static readonly GUIContent GC_new = new GUIContent("new");
|
|
private static readonly GUIContent GC_new = new GUIContent("new");
|
|
|
private static readonly GUIContent GC_rename = new GUIContent("rename");
|
|
private static readonly GUIContent GC_rename = new GUIContent("rename");
|
|
|
private static readonly GUIContent GC_apply = new GUIContent("apply");
|
|
private static readonly GUIContent GC_apply = new GUIContent("apply");
|
|
|
- private static readonly GUIContent GC_clear = new GUIContent("x", "Clear tile selection. Draw empty tiles.");
|
|
|
|
|
|
|
+ private static readonly GUIContent GC_reload = new GUIContent("reload");
|
|
|
private static readonly GUIContent GC_add = new GUIContent("+", "Add");
|
|
private static readonly GUIContent GC_add = new GUIContent("+", "Add");
|
|
|
private static readonly GUIContent GC_rem = new GUIContent("-", "Remove selected");
|
|
private static readonly GUIContent GC_rem = new GUIContent("-", "Remove selected");
|
|
|
private static readonly GUIContent GC_movL = new GUIContent("<", "Move selected");
|
|
private static readonly GUIContent GC_movL = new GUIContent("<", "Move selected");
|
|
@@ -136,7 +136,8 @@ public class GameMapEditor : EditorWindow
|
|
|
private static readonly GUIContent GC_EditAuto = new GUIContent("Setup Auto-tile");
|
|
private static readonly GUIContent GC_EditAuto = new GUIContent("Setup Auto-tile");
|
|
|
private static readonly GUIContent GC_Viz = new GUIContent("*", "Toggle layer visblity in editor");
|
|
private static readonly GUIContent GC_Viz = new GUIContent("*", "Toggle layer visblity in editor");
|
|
|
|
|
|
|
|
- public static string enemyExcelPath = "Luban/Config/Datas/出怪表.xlsx";
|
|
|
|
|
|
|
+ public static string createEnemyExcelPath = "Luban/Config/Datas/出怪表.xlsx";
|
|
|
|
|
+ public static string enemyExcelPath = "Luban/Config/Datas/怪物表.xlsx";
|
|
|
|
|
|
|
|
private GenericMenu addTileMenu = null;
|
|
private GenericMenu addTileMenu = null;
|
|
|
|
|
|
|
@@ -624,7 +625,7 @@ public class GameMapEditor : EditorWindow
|
|
|
r.x = r.xMax - 200f; r.width = 100f; r.height = 15f;
|
|
r.x = r.xMax - 200f; r.width = 100f; r.height = 15f;
|
|
|
if (GUI.Button(r, GC_ExcelSave))
|
|
if (GUI.Button(r, GC_ExcelSave))
|
|
|
{
|
|
{
|
|
|
- ReloadSheetName(enemyExcelPath);
|
|
|
|
|
|
|
+ ReloadSheetName(createEnemyExcelPath);
|
|
|
mapsPopup.Asset = asset;
|
|
mapsPopup.Asset = asset;
|
|
|
mapsPopup.isSelect = false;
|
|
mapsPopup.isSelect = false;
|
|
|
mapsPopup.OnMapSelected = OnMapSelected;
|
|
mapsPopup.OnMapSelected = OnMapSelected;
|
|
@@ -633,7 +634,7 @@ public class GameMapEditor : EditorWindow
|
|
|
r.x = r.xMax; r.width = 100f; r.height = 15f;
|
|
r.x = r.xMax; r.width = 100f; r.height = 15f;
|
|
|
if (GUI.Button(r, GC_MapSelect))
|
|
if (GUI.Button(r, GC_MapSelect))
|
|
|
{
|
|
{
|
|
|
- ReloadSheetName(enemyExcelPath);
|
|
|
|
|
|
|
+ ReloadSheetName(createEnemyExcelPath);
|
|
|
mapsPopup.Asset = asset;
|
|
mapsPopup.Asset = asset;
|
|
|
mapsPopup.isSelect = true;
|
|
mapsPopup.isSelect = true;
|
|
|
mapsPopup.OnMapSelected = OnMapSelected;
|
|
mapsPopup.OnMapSelected = OnMapSelected;
|
|
@@ -935,12 +936,12 @@ public class GameMapEditor : EditorWindow
|
|
|
|
|
|
|
|
// 显示并编辑图层名称
|
|
// 显示并编辑图层名称
|
|
|
EditorGUI.BeginChangeCheck();
|
|
EditorGUI.BeginChangeCheck();
|
|
|
- string addName = EditorGUILayout.TextField("Wave Name", layer.name);
|
|
|
|
|
|
|
+ string addName = EditorGUILayout.TextField("波次名称", layer.name);
|
|
|
|
|
|
|
|
- int duration = EditorGUILayout.IntField("Next Wave", layer.duration);
|
|
|
|
|
- float addHp = EditorGUILayout.FloatField("Hp", layer.Hp);
|
|
|
|
|
- float addMoveSpeed = EditorGUILayout.FloatField("MoveSpeed", layer.moveSpeed);
|
|
|
|
|
- float addAttack = EditorGUILayout.FloatField("Attack", layer.attack);
|
|
|
|
|
|
|
+ int duration = EditorGUILayout.IntField("波次出怪时间", layer.duration);
|
|
|
|
|
+ float addHp = EditorGUILayout.FloatField("血量倍率", layer.Hp);
|
|
|
|
|
+ float addMoveSpeed = EditorGUILayout.FloatField("速度倍率", layer.moveSpeed);
|
|
|
|
|
+ float addAttack = EditorGUILayout.FloatField("攻击倍率", layer.attack);
|
|
|
|
|
|
|
|
EditorGUILayout.BeginVertical("box");
|
|
EditorGUILayout.BeginVertical("box");
|
|
|
{
|
|
{
|
|
@@ -1074,24 +1075,30 @@ public class GameMapEditor : EditorWindow
|
|
|
GUI.enabled = tileIdx >= 0;
|
|
GUI.enabled = tileIdx >= 0;
|
|
|
if (GUI.Button(r, GC_rem, EditorStyles.miniButtonRight))
|
|
if (GUI.Button(r, GC_rem, EditorStyles.miniButtonRight))
|
|
|
{
|
|
{
|
|
|
- if (autoTileSelected)
|
|
|
|
|
- {
|
|
|
|
|
- if (tileCache.ContainsKey(asset.tileAsset.autoTiles[tileIdx].tiles[0].id)) tileCache.Remove(asset.tileAsset.autoTiles[tileIdx].tiles[0].id);
|
|
|
|
|
- Undo.RecordObject(asset.tileAsset, "Remove Auto-Tile Definition");
|
|
|
|
|
- asset.tileAsset.RemoveAutoTileAtIndex(tileIdx);
|
|
|
|
|
- EditorUtility.SetDirty(asset.tileAsset);
|
|
|
|
|
- tileIdx--; if (tileIdx < 0 && asset.tileAsset.autoTiles.Count > 0) tileIdx = 0;
|
|
|
|
|
- if (tileIdx < 0 && asset.tileAsset.tiles.Count > 0) { tileIdx = 0; autoTileSelected = false; }
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- if (tileCache.ContainsKey(asset.tileAsset.tiles[tileIdx].id)) tileCache.Remove(asset.tileAsset.tiles[tileIdx].id);
|
|
|
|
|
- Undo.RecordObject(asset.tileAsset, "Remove Tile Definition");
|
|
|
|
|
- asset.tileAsset.RemoveTileAtIndex(tileIdx);
|
|
|
|
|
- EditorUtility.SetDirty(asset.tileAsset);
|
|
|
|
|
- tileIdx--; if (tileIdx < 0 && asset.tileAsset.tiles.Count > 0) tileIdx = 0;
|
|
|
|
|
- if (tileIdx < 0 && asset.tileAsset.autoTiles.Count > 0) { tileIdx = 0; autoTileSelected = true; }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (tileCache.ContainsKey(asset.tileAsset.tiles[tileIdx].id)) tileCache.Remove(asset.tileAsset.tiles[tileIdx].id);
|
|
|
|
|
+ Undo.RecordObject(asset.tileAsset, "Remove Tile Definition");
|
|
|
|
|
+ asset.tileAsset.RemoveTileAtIndex(tileIdx);
|
|
|
|
|
+ EditorUtility.SetDirty(asset.tileAsset);
|
|
|
|
|
+ tileIdx--; if (tileIdx < 0 && asset.tileAsset.tiles.Count > 0) tileIdx = 0;
|
|
|
|
|
+ if (tileIdx < 0 && asset.tileAsset.autoTiles.Count > 0) { tileIdx = 0; autoTileSelected = true; }
|
|
|
|
|
+ //if (autoTileSelected)
|
|
|
|
|
+ //{
|
|
|
|
|
+ // if (tileCache.ContainsKey(asset.tileAsset.autoTiles[tileIdx].tiles[0].id)) tileCache.Remove(asset.tileAsset.autoTiles[tileIdx].tiles[0].id);
|
|
|
|
|
+ // Undo.RecordObject(asset.tileAsset, "Remove Auto-Tile Definition");
|
|
|
|
|
+ // asset.tileAsset.RemoveAutoTileAtIndex(tileIdx);
|
|
|
|
|
+ // EditorUtility.SetDirty(asset.tileAsset);
|
|
|
|
|
+ // tileIdx--; if (tileIdx < 0 && asset.tileAsset.autoTiles.Count > 0) tileIdx = 0;
|
|
|
|
|
+ // if (tileIdx < 0 && asset.tileAsset.tiles.Count > 0) { tileIdx = 0; autoTileSelected = false; }
|
|
|
|
|
+ //}
|
|
|
|
|
+ //else
|
|
|
|
|
+ //{
|
|
|
|
|
+ // if (tileCache.ContainsKey(asset.tileAsset.tiles[tileIdx].id)) tileCache.Remove(asset.tileAsset.tiles[tileIdx].id);
|
|
|
|
|
+ // Undo.RecordObject(asset.tileAsset, "Remove Tile Definition");
|
|
|
|
|
+ // asset.tileAsset.RemoveTileAtIndex(tileIdx);
|
|
|
|
|
+ // EditorUtility.SetDirty(asset.tileAsset);
|
|
|
|
|
+ // tileIdx--; if (tileIdx < 0 && asset.tileAsset.tiles.Count > 0) tileIdx = 0;
|
|
|
|
|
+ // if (tileIdx < 0 && asset.tileAsset.autoTiles.Count > 0) { tileIdx = 0; autoTileSelected = true; }
|
|
|
|
|
+ //}
|
|
|
doRepaint = true;
|
|
doRepaint = true;
|
|
|
}
|
|
}
|
|
|
r.x -= 25f;
|
|
r.x -= 25f;
|
|
@@ -1102,8 +1109,8 @@ public class GameMapEditor : EditorWindow
|
|
|
{
|
|
{
|
|
|
addTileMenu = new GenericMenu();
|
|
addTileMenu = new GenericMenu();
|
|
|
addTileMenu.AddItem(new GUIContent("Tile"), false, OnAddTile, 0);
|
|
addTileMenu.AddItem(new GUIContent("Tile"), false, OnAddTile, 0);
|
|
|
- addTileMenu.AddItem(new GUIContent("Auto-16Tile"), false, OnAddTile, 1);
|
|
|
|
|
- addTileMenu.AddItem(new GUIContent("Auto-46Tile"), false, OnAddTile, 2);
|
|
|
|
|
|
|
+ //addTileMenu.AddItem(new GUIContent("Auto-16Tile"), false, OnAddTile, 1);
|
|
|
|
|
+ //addTileMenu.AddItem(new GUIContent("Auto-46Tile"), false, OnAddTile, 2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
addTileMenu.ShowAsContext();
|
|
addTileMenu.ShowAsContext();
|
|
@@ -1133,17 +1140,12 @@ public class GameMapEditor : EditorWindow
|
|
|
}
|
|
}
|
|
|
GUI.enabled = true;
|
|
GUI.enabled = true;
|
|
|
|
|
|
|
|
- r.x -= 28f;
|
|
|
|
|
- if (GUI.Button(r, GC_clear, EditorStyles.miniButton))
|
|
|
|
|
|
|
+ r.x -= 85f;
|
|
|
|
|
+ r.width = 80;
|
|
|
|
|
+ if (GUI.Button(r, GC_reload, EditorStyles.miniButton))
|
|
|
{
|
|
{
|
|
|
- pasting = false;
|
|
|
|
|
- marking = false;
|
|
|
|
|
- clearMarked = false;
|
|
|
|
|
- markedTiles.Clear();
|
|
|
|
|
- tileIdx = -1;
|
|
|
|
|
- autoTileSelected = false;
|
|
|
|
|
- doRepaint = true;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ ReloadEnemyExcelData(enemyExcelPath);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
EditorGUI.BeginChangeCheck();
|
|
@@ -1211,6 +1213,48 @@ public class GameMapEditor : EditorWindow
|
|
|
DrawTileList(ev);
|
|
DrawTileList(ev);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ void ReloadEnemyExcelData(string path)
|
|
|
|
|
+ {
|
|
|
|
|
+ for (int i = asset.tileAsset.tiles.Count - 1; i>=0 ; i--)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (tileCache.ContainsKey(asset.tileAsset.tiles[i].id)) tileCache.Remove(asset.tileAsset.tiles[i].id);
|
|
|
|
|
+ asset.tileAsset.RemoveTileAtIndex(i);
|
|
|
|
|
+ }
|
|
|
|
|
+ pasting = false;
|
|
|
|
|
+ marking = false;
|
|
|
|
|
+ clearMarked = false;
|
|
|
|
|
+ markedTiles.Clear();
|
|
|
|
|
+ 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);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 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++;
|
|
|
|
|
+ }
|
|
|
|
|
+ doRepaint = true;
|
|
|
|
|
+ Debug.Log("怪物表数据导入成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void OnAutoTileChange(int idx)
|
|
private void OnAutoTileChange(int idx)
|
|
|
{
|
|
{
|
|
|
if (autoTileSelected && tileIdx >= 0 && tileIdx < asset.tileAsset.autoTiles.Count)
|
|
if (autoTileSelected && tileIdx >= 0 && tileIdx < asset.tileAsset.autoTiles.Count)
|