// 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;
}
}
}