// Felix-Bang:MapEditor //   へ     /| //  /\7    ∠_/ //  / │   / / // │ Z _,< /   /`ヽ // │     ヽ   /  〉 //  Y     `  /  / // イ● 、 ●  ⊂⊃〈  / // ()  へ    | \〈 //  >ー 、_  ィ  │ // //  / へ   / ノ<| \\ //  ヽ_ノ  (_/  │// //  7       |/ //  >―r ̄ ̄`ー―_ // Describe:地图编辑器 // Createtime:2018/9/25 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using FBApplication; using System.IO; using System; namespace FBEditor { [CustomEditor(typeof(FBMap))] public class MapEditor : Editor { [HideInInspector] public FBMap Map=null; /// 关卡列表 List f_files = new List(); /// 当前编辑的关卡索引号 int f_selectInfoIndex = -1; public override void OnInspectorGUI() { base.OnInspectorGUI(); if (Application.isPlaying) { // 关联目标 为Map赋值 Map = target as FBMap; // 第一行按钮 EditorGUILayout.BeginHorizontal(); //LoadLevelFiles(); int currentIndex = EditorGUILayout.Popup(f_selectInfoIndex, GetNames(f_files)); if (currentIndex != f_selectInfoIndex) { f_selectInfoIndex = currentIndex; //加载关卡 LoadLevel(); } if (GUILayout.Button("读取列表")) { LoadLevelFiles(); } EditorGUILayout.EndHorizontal(); // 第二行按钮 EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("清空塔点")) Map.ClearHolder(); if (GUILayout.Button("清空路径")) Map.ClearRoad(); EditorGUILayout.EndHorizontal(); // 第三行按钮 EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("保存数据")) SaveLevel(); EditorGUILayout.EndHorizontal(); } if (GUI.changed) EditorUtility.SetDirty(target); } private string[] GetNames(List files) { List names = new List(); foreach (FileInfo file in files) names.Add(file.Name); return names.ToArray(); } private void LoadLevel() { FileInfo file = f_files[f_selectInfoIndex]; FBLevel level = new FBLevel(); FBTools.FillLevel(file.FullName, ref level); Map.LoadLevel(level); } private void LoadLevelFiles() { Clear(); f_files = FBTools.GetLevelFiles(); if (f_files.Count > 0) { f_selectInfoIndex = 0; LoadLevel(); } } private void SaveLevel() { //获取当前加载的关卡 FBLevel level = Map.Level; //临时索引点 List list = null; //收集塔点 list = new List(); for (int i = 0; i < Map.Grids.Count; i++) { FBGrid g = Map.Grids[i]; if (g.CanHold) { FBCoords c = new FBCoords(g.Index_X,g.Index_Y); list.Add(c); } } level.Holders = list; //收集寻路点 list = new List(); for (int i = 0; i < Map.Road.Count; i++) { FBGrid g = Map.Road[i]; FBCoords c = new FBCoords(g.Index_X, g.Index_Y); list.Add(c); } level.Path = list; //保存 string fileName = f_files[f_selectInfoIndex].FullName; FBTools.SaveLevel(fileName,level); //弹框 EditorUtility.DisplayDialog("保存关卡数据","保存成功","确定"); } private void Clear() { f_files.Clear(); f_selectInfoIndex = -1; } } }