using System.Collections;
|
using System.Collections.Generic;
|
using UnityEditor.ProjectWindowCallback;
|
using UnityEngine;
|
using UnityEditor;
|
using System;
|
using System.IO;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
|
public class CreateConfigData
|
{
|
|
public static event Action fileCreateEvent;
|
|
public static string primaryKey = string.Empty;
|
public static string filedContent = string.Empty;
|
public static string readContent = string.Empty;
|
|
public static void CreateConfigClass(FileInfo fileInfo)
|
{
|
|
//filedContent = string.Empty;
|
//var obj = _obj;
|
//var name = obj.name;
|
//var assetPath = AssetDatabase.GetAssetPath(obj.GetInstanceID());
|
|
//var fullName = StringUtility.Contact(Directory.GetParent(Application.dataPath), "/", assetPath);
|
var lines = File.ReadAllLines(fileInfo.FullName);
|
|
if (lines.Length > 2) {
|
var typeLine = lines[0];
|
var fieldLine = lines[1];
|
var types = typeLine.Split('\t');
|
var fields = fieldLine.Split('\t');
|
var min = Mathf.Min(types.Length, fields.Length);
|
var fieldFulls = new List<string>();
|
var readFulls = new List<string>();
|
primaryKey = fields[0];
|
|
int index = 0;
|
for (int j = 0; j < min; j++) {
|
var type = types[j];
|
var field = fields[j];
|
var fieldstring = GetField(type, field);
|
var readString = GetRead(type, field, index);
|
if (!string.IsNullOrEmpty(fieldstring)) {
|
fieldFulls.Add(fieldstring);
|
}
|
|
if (!string.IsNullOrEmpty(readString)) {
|
index++;
|
readFulls.Add(readString);
|
}
|
}
|
|
filedContent = string.Join("\r\n\t\t", fieldFulls.ToArray());
|
readContent = string.Join("\r\n\t\t\t\r\n\t\t\t\t", readFulls.ToArray());
|
CreatNewConfigClass(fileInfo.Name.Substring(0, fileInfo.Name.IndexOf('.')));
|
}
|
|
}
|
|
public static string GetField(string _type, string _field)
|
{
|
_field = _field.Replace(" ", "");
|
if (_type.Contains("int[]")) {
|
return StringUtility.Contact("public int[] ", _field.Trim(), ";");
|
}
|
else if (_type.Contains("float[]")) {
|
return StringUtility.Contact("public float[] ", _field.Trim(), ";");
|
}
|
else if (_type.Contains("string[]")) {
|
return StringUtility.Contact("public string[] ", _field.Trim(), ";");
|
}
|
else if (_type.Contains("Vector3[]")) {
|
return StringUtility.Contact("public Vector3[] ", _field.Trim(), ";");
|
}
|
else if (_type.Contains("int")) {
|
return StringUtility.Contact("public int ", _field.Trim(), " { get ; private set ; }");
|
}
|
else if(_type.Contains("long")) {
|
return StringUtility.Contact("public long ", _field.Trim(), " { get ; private set ; }");
|
}
|
else if (_type.Contains("float")) {
|
return StringUtility.Contact("public float ", _field.Trim(), " { get ; private set; } ");
|
}
|
else if (_type.Contains("string")) {
|
return StringUtility.Contact("public string ", _field.Contains("[")? _field.Substring(0, _field.IndexOf("[")): _field, " { get ; private set; } ");
|
}
|
else if (_type.Contains("Vector3")) {
|
return StringUtility.Contact("public Vector3 ", _field.Trim(), " { get ; private set; } ");
|
}
|
else {
|
return string.Empty;
|
}
|
}
|
|
public static string GetRead(string _type, string _field, int _index)
|
{
|
_field = _field.Replace(" ", "");
|
if (_type.Contains("int[]")) {
|
|
var line1 = StringUtility.Contact("string[] ", _field, "StringArray", " = ", "rawContents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
|
var line2 = StringUtility.Contact("\t\t\t\t", _field, " = ", "new int", "[", _field, "StringArray.Length]", ";", "\n");
|
var line3 = StringUtility.Contact("\t\t\t\t", "for (int i=0;i<", _field, "StringArray", ".Length", ";", "i++", ")", "\n");
|
var line4 = "\t\t\t\t{\n";
|
var line5 = StringUtility.Contact("\t\t\t\t\t", " int.TryParse(", _field, "StringArray", "[i]", ",", "out ", _field, "[i]", ")", ";", "\n");
|
var line6 = "\t\t\t\t}";
|
|
return StringUtility.Contact(line1, line2, line3, line4, line5, line6);
|
}
|
else if (_type.Contains("float[]")) {
|
var line1 = StringUtility.Contact("string[] ", _field, "StringArray", " = ", "rawContents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
|
var line2 = StringUtility.Contact("\t\t\t\t", _field, " = ", "new float", "[", _field, "StringArray.Length", "]", ";", "\n");
|
var line3 = StringUtility.Contact("\t\t\t\t", "for (int i=0;i<", _field, "StringArray", ".Length", ";", "i++", ")", "\n");
|
var line4 = "\t\t\t\t{\n";
|
var line5 = StringUtility.Contact("\t\t\t\t\t", " float.TryParse(", _field, "StringArray", "[i]", ",", "out ", _field, "[i]", ")", ";", "\n");
|
var line6 = "\t\t\t\t}";
|
|
return StringUtility.Contact(line1, line2, line3, line4, line5, line6);
|
}
|
else if (_type.Contains("string[]")) {
|
var line1 = StringUtility.Contact(_field, " = ", "rawContents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);");
|
return line1;
|
}
|
else if (_type.Contains("Vector3[]")) {
|
var line1 = StringUtility.Contact("string[] ", _field, "StringArray", " = ", "rawContents", "[", _index, "]", ".Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);", "\n");
|
var line2 = StringUtility.Contact("\t\t\t\t", _field, " = ", "new Vector3", "[", _field, "StringArray.Length", "]", ";", "\n");
|
var line3 = StringUtility.Contact("\t\t\t\t", "for (int i=0;i<", _field, "StringArray", ".Length", ";", "i++", ")", "\n");
|
var line4 = "\t\t\t\t{\n";
|
var line5 = StringUtility.Contact("\t\t\t\t\t", _field, "[i]", "=", _field, "StringArray", "[i]", ".Vector3Parse()", ";", "\n");
|
var line6 = "\t\t\t\t}";
|
|
return StringUtility.Contact(line1, line2, line3, line4, line5, line6);
|
}
|
else if (_type.Contains("int")) {
|
return StringUtility.Contact(_field, "=IsNumeric(rawContents[", _index, "]) ? ", "int.Parse(rawContents", "[", _index, "]", "):0", "; ");
|
}
|
else if (_type.Contains("float")) {
|
return StringUtility.Contact(_field, "=IsNumeric(rawContents[", _index, "]) ? ", "float.Parse(rawContents", "[", _index, "]", "):0", "; ");
|
}
|
else if (_type.Contains("string")) {
|
return StringUtility.Contact(_field.Contains("[") ? _field.Substring(0, _field.IndexOf("[")) : _field, " = ", "rawContents", "[", _index, "]", ".Trim()", ";");
|
}
|
else if (_type.Contains("Vector3")) {
|
return StringUtility.Contact(_field, "=", "rawContents", "[", _index, "]", ".Vector3Parse()", ";");
|
}
|
else {
|
return string.Empty;
|
}
|
}
|
|
|
static string configClassPath = "Assets" + "/" + "Scripts/Core/GameEngine/Model/Config";
|
static string templatePath = "Assets/Editor/ScriptTemplate/ConfigDataTemplate.txt";
|
|
public static void CreatNewConfigClass(string _name)
|
{
|
var newConfigPath = configClassPath + string.Format("/{0}Config.cs", _name);
|
AssetDatabase.DeleteAsset(newConfigPath);
|
UnityEngine.Object o = CreateScriptAssetFromTemplate(newConfigPath, templatePath);
|
ProjectWindowUtil.ShowCreatedAsset(o);
|
|
if (CreateConfigData.fileCreateEvent != null) {
|
CreateConfigData.fileCreateEvent();
|
}
|
}
|
|
internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)
|
{
|
string fullPath = Path.GetFullPath(pathName);
|
|
StreamReader streamReader = new StreamReader(resourceFile);
|
string text = streamReader.ReadToEnd();
|
streamReader.Close();
|
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
|
text = Regex.Replace(text, "#ClassName*#", fileNameWithoutExtension);
|
text = Regex.Replace(text, "#DateTime#", System.DateTime.Now.ToLongDateString());
|
text = Regex.Replace(text, "#PrimaryKey#", CreateConfigData.primaryKey);
|
text = Regex.Replace(text, "#Field#", CreateConfigData.filedContent);
|
text = Regex.Replace(text, "#Read#", CreateConfigData.readContent);
|
|
bool encoderShouldEmitUTF8Identifier = true;
|
bool throwOnInvalidBytes = false;
|
UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
|
bool append = false;
|
StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
|
streamWriter.Write(text);
|
streamWriter.Close();
|
AssetDatabase.ImportAsset(pathName);
|
return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
|
}
|
}
|