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

260 lines
9.3 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 previous;
Dictionary<string, object> dic;
Dictionary<string, object> curDic;
bool isFinish;
string addKey;
string targetPath;
// 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();
if (GUILayout.Button("加载config模板", GUILayout.ExpandWidth(false)))
{
dic.Clear();
tempConfigPath = EditorUtility.OpenFilePanel("Resource path", tempConfigPath,"*.*");
EditorPrefs.SetString("IMPORTCCONFIG_SOURCESFOLDERPATH", tempConfigPath);
StreamReader sr = File.OpenText(tempConfigPath);
SetConfigData(sr.ReadToEnd());
}
if (GUILayout.Button("下载config模板", GUILayout.ExpandWidth(false)))
{
isFinish = false;
dic.Clear();
string path = "http://60.1.1.12/assetbundles/config.txt";
EditorCoroutineRunner.StartEditorCoroutine(DownLoadTempComfig(path));
}
if (dic != null && dic.Count > 0)
{
RefreshWindowShow();
}
if (isFinish)
{
if (curDic != null && curDic.Count > 0)
{
RefreshWindowShow1();
}
}
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>();
tempConfigPath = EditorPrefs.GetString("IMPORTCCONFIG_SOURCESFOLDERPATH");
targetPath = EditorPrefs.GetString("IMPORTCCONFIG_TARGETFOLDERPATH");
configPath = EditorPrefs.GetString("IMPORTCCONFIG_DATAFOLDERPATH");
}
void SetJsonDataToDic(IDictionary data,Dictionary<string,object> dicc)
{
foreach (var item in data.Keys)
{
string key = item.ToString();
//Debug.Log(string.Format("{0}", item));
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();
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();
}
}
}