159 lines
4.5 KiB
C#
159 lines
4.5 KiB
C#
|
// 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;
|
|||
|
/// <summary> 关卡列表 </summary>
|
|||
|
List<FileInfo> f_files = new List<FileInfo>();
|
|||
|
/// <summary> 当前编辑的关卡索引号 </summary>
|
|||
|
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<FileInfo> files)
|
|||
|
{
|
|||
|
List<string> names = new List<string>();
|
|||
|
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<FBCoords> list = null;
|
|||
|
|
|||
|
//收集塔点
|
|||
|
list = new List<FBCoords>();
|
|||
|
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<FBCoords>();
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|