上海虹口龙之梦项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

199 lines
7.2 KiB

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class FloorButtonEditor : EditorWindow
{
[MenuItem("Tools/楼层面板编辑工具")]
public static void FloorButtonWindow()
{
var window = (FloorButtonEditor)GetWindow(typeof(FloorButtonEditor), true, "楼层面板编辑工具");
window.Show();
}
private Vector2 UIScrollow;
public string fullpath;
public FloorData Data = new FloorData { Floors = new List<FloorButton>() };
public bool ShowInfos;
public bool LoadData = true;
public bool NewData = false;
public string Prefix;
public int Highest;
public int lowest;
public string FileName="Floors";
private int ToolbarInt = 0;
private readonly string[] ToolbarStrings = { "新建数据", "修改数据" };
private void OnEnable()
{
fullpath = $"{Application.streamingAssetsPath}/Data/{FileName}.json";
}
private void OnGUI()
{
ToolbarInt = GUILayout.Toolbar(ToolbarInt, ToolbarStrings);
#region NewData
if (ToolbarInt == 0)
{
GUILayout.BeginHorizontal("Box");
FileName = EditorGUILayout.TextField("文件名:", FileName);
if (GUILayout.Button("SET"))
{
fullpath = $"{Application.streamingAssetsPath}/data/{FileName}.json";
}
GUILayout.EndHorizontal();
EditorGUILayout.LabelField($"存储路径预览:{fullpath}", new GUIStyle() { normal = new GUIStyleState() { textColor = Color.green } });
GUILayout.BeginVertical("Box");
Prefix = EditorGUILayout.TextField("前缀:", Prefix);
Highest = EditorGUILayout.IntField("最高层:", Highest);
lowest = EditorGUILayout.IntField("最底层:", lowest);
GUILayout.BeginHorizontal("Box");
if (GUILayout.Button("保存"))
{
SetData();
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
}
#endregion
#region Load Data
if (ToolbarInt==1)
{
UIScrollow = EditorGUILayout.BeginScrollView(UIScrollow, false, false);
GUILayout.BeginHorizontal("Box");
FileName = EditorGUILayout.TextField("文件名:", FileName);
if (GUILayout.Button("SET"))
{
fullpath = $"{Application.streamingAssetsPath}/data/{FileName}.json";
}
GUILayout.EndHorizontal();
EditorGUILayout.LabelField($"存储路径预览:{fullpath}", new GUIStyle() { normal = new GUIStyleState() { textColor = Color.green } });
GUILayout.BeginHorizontal("Box");
if (GUILayout.Button("获取数据")) { GetData(); }
GUILayout.EndHorizontal();
GUILayout.BeginVertical("Box");
Data.Prefix = EditorGUILayout.TextField("前缀:", Data.Prefix);
Data.Highest = EditorGUILayout.IntField("最高层:", Data.Highest);
Data.Lowest = EditorGUILayout.IntField("最底层:", Data.Lowest);
GUILayout.BeginHorizontal("Box");
ShowInfos = EditorGUILayout.Toggle("显示楼层详细信息:", ShowInfos);
GUILayout.EndHorizontal();
if (ShowInfos)
{
for (int i = 0; i < Data.Floors.Count; i++)
{
GUILayout.BeginHorizontal("Box");
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("按钮名称:");
Data.Floors[i].ButtonName = EditorGUILayout.TextField(Data.Floors[i].ButtonName);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("楼层名称:");
Data.Floors[i].FloorName = EditorGUILayout.TextField(Data.Floors[i].FloorName);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("避难层:");
Data.Floors[i].BNC = EditorGUILayout.Toggle(Data.Floors[i].BNC);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("防火分区:");
Data.Floors[i].FHFQ = EditorGUILayout.Toggle(Data.Floors[i].FHFQ);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("防火门:");
Data.Floors[i].FM = EditorGUILayout.Toggle(Data.Floors[i].FM);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("防火卷帘:");
Data.Floors[i].FHJL = EditorGUILayout.Toggle(Data.Floors[i].FHJL);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("室内消火栓:");
Data.Floors[i].SNXHS = EditorGUILayout.Toggle(Data.Floors[i].SNXHS);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("消控室:");
Data.Floors[i].XKS = EditorGUILayout.Toggle(Data.Floors[i].XKS);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("HelpBox");
GUILayout.Label("泵房水箱:");
Data.Floors[i].BFSX = EditorGUILayout.Toggle(Data.Floors[i].BFSX);
GUILayout.EndHorizontal();
GUILayout.EndHorizontal();
}
}
GUILayout.BeginHorizontal("Box");
if (GUILayout.Button("保存"))
{
SaveData();
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
//滑条结束,所有包含在滑条内的UI在此之上
EditorGUILayout.EndScrollView();
}
#endregion
}
private void SetData()
{
Data.Prefix = Prefix;
Data.Highest = Highest;
Data.Lowest = lowest;
Data.Floors = new List<FloorButton>();
for(int i = lowest; i < Highest; i++)
{
if (i != 0)
{
var floor = new FloorButton();
Data.Floors.Add(floor);
floor.ButtonName = "Floor" + i;
floor.FloorName = i + "F";
}
}
PostFile(fullpath, Data);
}
public void SaveData()
{
PostFile(fullpath, Data);
}
public void GetData()
{
GetFile<FloorData>(fullpath, data => Data = data);
ShowInfos = true;
}
//上传数据
public void PostFile<T>(string url, T obj)
{
var jsonParam = JsonConvert.SerializeObject(obj, Formatting.Indented);
File.WriteAllText(url, jsonParam);
Debug.Log($"数据保存完成");
}
//获取数据
public void GetFile<T>(string url, Action<T> action)
{
string json = File.ReadAllText(url);
T obj = JsonConvert.DeserializeObject<T>(json);
action?.Invoke(obj);
}
}