miduo_client/Assets/Scripts/Editor/GameEditor/FrameTool/ConfigWindow.cs

332 lines
13 KiB
C#

using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
namespace GameEditor.FrameTool
{
public class ConfigWindowNew : EditorWindow
{
string tempConfigPath;
string configPath;
string downloadConfigPath;
string previous;
Dictionary<string, object> dic;
Dictionary<string, int> indexDic;
//Dictionary<string, object> curDic;
//bool isFinish;
string addKey;
string targetPath;
int index;
Vector2 scrollPos;
// Add menu named "My Window" to the Window menu
[MenuItem("Build/Config")]
static void Init()
{
// Get existing open window or if none, make a new one:
ConfigWindowNew window = (ConfigWindowNew)EditorWindow.GetWindow(typeof(ConfigWindowNew));
window.InitWindow();
window.Show();
}
void OnGUI()
{
EditorGUILayout.BeginVertical();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("加载config模板");
tempConfigPath = GUILayout.TextArea(tempConfigPath);
if (GUILayout.Button("Brown", GUILayout.ExpandWidth(false)))
{
dic.Clear();
tempConfigPath = EditorUtility.OpenFilePanel("Resource path", tempConfigPath, "*.*");
EditorPrefs.SetString("IMPORTCCONFIG_SOURCESFOLDERPATH", tempConfigPath);
StreamReader sr = File.OpenText(tempConfigPath);
SetConfigData(sr.ReadToEnd());
sr.Close();
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
downloadConfigPath = GUILayout.TextArea(downloadConfigPath);
if (GUILayout.Button("下载config模板", GUILayout.ExpandWidth(false)))
{
if (string.IsNullOrEmpty(downloadConfigPath))
{
return;
}
dic.Clear();
EditorPrefs.SetString("IMPORTCCONFIG_DownLOADCONFIGPATH", downloadConfigPath);
EditorCoroutineRunner.StartEditorCoroutine(DownLoadTempComfig(downloadConfigPath));
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("加载数据");
configPath = GUILayout.TextArea(configPath);
if (GUILayout.Button("Brown", GUILayout.ExpandWidth(false)))
{
configPath = EditorUtility.OpenFilePanel("Resource path", configPath, "*.*");
EditorPrefs.SetString("IMPORTCCONFIG_DATAFOLDERPATH", configPath);
StreamReader sr = File.OpenText(configPath);
SetConfigData(sr.ReadToEnd());
}
EditorGUILayout.EndHorizontal();
scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false,true);
if (dic != null && dic.Count > 0)
{
index = 0;
RefreshWindowShow2(dic);
}
EditorGUILayout.EndScrollView();
EditorGUILayout.BeginHorizontal();
targetPath = GUILayout.TextArea(targetPath);
if (GUILayout.Button("Brown", GUILayout.ExpandWidth(false)))
{
targetPath = EditorUtility.OpenFilePanel("Resource path", targetPath, "*.*");
EditorPrefs.SetString("IMPORTCCONFIG_TARGETFOLDERPATH", targetPath);
}
if (GUILayout.Button("保存数据", GUILayout.ExpandWidth(false)))
{
JsonData jsonData = new JsonData();
SetDicToJsonData(jsonData,dic);
string json = JsonMapper.ToJson(jsonData);
//Debug.Log("jsonData:" + json);
File.WriteAllText(targetPath, json, Encoding.UTF8);
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
}
IEnumerator DownLoadTempComfig(string path)
{
UnityWebRequest request0 = UnityWebRequest.Get(path);
request0.downloadHandler = new DownloadHandlerBuffer();
yield return request0.SendWebRequest();
while (!request0.isDone)
{
yield return 1;
}
if (request0.isNetworkError || request0.isHttpError)
{
Debug.Log(request0.error);
}
else
{
SetConfigData(request0.downloadHandler.text);
}
}
void InitWindow()
{
//isFinish = true;
addKey = "";
dic = new Dictionary<string, object>();
indexDic = new Dictionary<string, int>();
tempConfigPath = EditorPrefs.GetString("IMPORTCCONFIG_SOURCESFOLDERPATH");
targetPath = EditorPrefs.GetString("IMPORTCCONFIG_TARGETFOLDERPATH");
configPath = EditorPrefs.GetString("IMPORTCCONFIG_DATAFOLDERPATH");
downloadConfigPath = EditorPrefs.GetString("IMPORTCCONFIG_DownLOADCONFIGPATH");
}
void SetJsonDataToDic(IDictionary data,Dictionary<string,object> dicc)
{
foreach (var item in data.Keys)
{
string key = item.ToString();
try
{
IDictionary localData = data[item] as IDictionary;
if (!dicc.ContainsKey(key))
{
dicc.Add(key, new Dictionary<string, object>());
}
SetJsonDataToDic(localData, dicc[key] as Dictionary<string, object>);
}
catch
{
if (dicc.ContainsKey(key))
{
dicc.Remove(key);
}
dicc.Add(key, data[item]);
}
}
}
void SetDicToJsonData(JsonData jsonData, Dictionary<string, object> dicc)
{
foreach (KeyValuePair<string, object> keyValue in dicc)
{
//Debug.Log(string.Format("{0}", keyValue.Key));
try
{
Dictionary<string, object> localData = keyValue.Value as Dictionary<string, object>;
string key = keyValue.Key;
jsonData[keyValue.Key] = new JsonData();
SetDicToJsonData(jsonData[keyValue.Key], localData);
}
catch
{
//Debug.Log(string.Format("{0}-{1}", keyValue.Key, keyValue.Value.ToString()));
jsonData[keyValue.Key] = keyValue.Value.ToString();
}
}
}
void GetDicData(Dictionary<string, object> dicc)
{
foreach (KeyValuePair<string, object> keyValue in dicc)
{
//Debug.Log(string.Format("{0}", keyValue.Key));
try
{
Dictionary<string, object> localData = keyValue.Value as Dictionary<string, object>;
GetDicData(localData);
}
catch
{
//Debug.Log(string.Format("{0}-{1}", keyValue.Key, keyValue.Value.ToString()));
}
}
}
void SetConfigData(string strinfo)
{
//Debug.Log(strinfo);
JsonData modeInfo = JsonMapper.ToObject(strinfo);
IDictionary data = modeInfo;
SetJsonDataToDic(data,dic);
//isFinish = true;
//GetDicData(dic);
}
//void RefreshWindowShow()
//{
// EditorGUILayout.BeginVertical();
// EditorGUILayout.BeginHorizontal();
// GUILayout.Label("加载数据");
// configPath = GUILayout.TextArea(configPath);
// if (GUILayout.Button("Brown", GUILayout.ExpandWidth(false)))
// {
// configPath = EditorUtility.OpenFilePanel("Resource path", configPath, "*.*");
// EditorPrefs.SetString("IMPORTCCONFIG_DATAFOLDERPATH", configPath);
// StreamReader sr = File.OpenText(configPath);
// SetConfigData(sr.ReadToEnd());
// }
// EditorGUILayout.EndHorizontal();
// EditorGUILayout.BeginHorizontal();
// foreach (string key in dic.Keys)
// {
// if (GUILayout.Button(key, GUILayout.ExpandWidth(false)))
// {
// curDic = dic[key] as Dictionary<string, object>;
// }
// }
// //if (isFinish)
// //{
// if (curDic != null && curDic.Count > 0)
// {
// addKey = GUILayout.TextField(addKey);
// if (GUILayout.Button("添加key", GUILayout.ExpandWidth(false)))
// {
// curDic.Add(addKey, new Dictionary<string, object>());
// }
// }
// //}
// EditorGUILayout.EndHorizontal();
// EditorGUILayout.EndVertical();
//}
//void RefreshWindowShow1()
//{
// EditorGUILayout.BeginVertical();
// for (int i = 0; i < curDic.Count; i++)
// {
// EditorGUILayout.BeginHorizontal();
// GUILayout.Space(30);
// var item = curDic.ElementAt(i);
// var item1 = (curDic[item.Key] as Dictionary<string, object>);
// GUILayout.Label(item.Key);
// addKey = GUILayout.TextField(addKey);
// if (GUILayout.Button("添加key", GUILayout.ExpandWidth(false)))
// {
// item1.Add(addKey, "");
// }
// if (GUILayout.Button("删除", GUILayout.ExpandWidth(false)))
// {
// curDic.Remove(item.Key);
// }
// EditorGUILayout.EndHorizontal();
// for (int j = 0; j < item1.Count; j++)
// {
// EditorGUILayout.BeginHorizontal();
// GUILayout.Space(60);
// var item2 = item1.ElementAt(j);
// GUILayout.Label(item2.Key);
// item1[item2.Key] = GUILayout.TextField(item1[item2.Key].ToString());
// if (GUILayout.Button("删除", GUILayout.ExpandWidth(false)))
// {
// item1.Remove(item2.Key);
// }
// EditorGUILayout.EndHorizontal();
// }
// }
// EditorGUILayout.EndVertical();
//}
void RefreshWindowShow2(Dictionary<string,object> dicc,string indexDicKey = "0")
{
for (int i = 0; i < dicc.Count; i++)
{
var item = dicc.ElementAt(i);
if (!indexDic.ContainsKey(indexDicKey))
{
index = index + 1;
indexDic.Add(indexDicKey, index);
}
index = indexDic[indexDicKey];
//Debug.Log(string.Format("{0}-{1}", item.Key, item.Value));
Dictionary<string, object> localData = item.Value as Dictionary<string, object>;
if (localData == null)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Space(30 * index);
GUILayout.Label(item.Key);
dicc[item.Key] = GUILayout.TextField(dicc[item.Key].ToString());
if (GUILayout.Button("删除", GUILayout.ExpandWidth(false)))
{
dicc.Remove(item.Key);
}
EditorGUILayout.EndHorizontal();
}
else
{
EditorGUILayout.BeginHorizontal();
GUILayout.Space(30 * index);
GUILayout.Label(item.Key);
addKey = GUILayout.TextField(addKey);
if (GUILayout.Button("添加key", GUILayout.ExpandWidth(false)))
{
localData.Add(addKey, "");
}
if (GUILayout.Button("删除", GUILayout.ExpandWidth(false)))
{
localData.Remove(item.Key);
}
EditorGUILayout.EndHorizontal();
RefreshWindowShow2(localData, item.Key);
}
}
}
}
}