【回滚】考虑到 cfg table的DataList必须按照配置定义的顺序。如果改成data_json2格式,顺序就无法确定了。回滚上个版本的修改。

main
walon 2021-08-20 18:42:06 +08:00
parent 15d1e0b07e
commit 02481f03e1
3 changed files with 138 additions and 34 deletions

View File

@ -1,4 +1,5 @@
using Luban.Job.Cfg.Datas;
using Luban.Job.Cfg.DataVisitors;
using Luban.Job.Cfg.Defs;
using Luban.Job.Common.Types;
using System;
@ -16,38 +17,10 @@ namespace Luban.Job.Cfg.DataExporters
public override void Accept(DMap type, DefAssembly ass, Utf8JsonWriter x)
{
var keyType = type.Type.KeyType;
if (keyType is not TString
&& keyType is not TInt
&& keyType is not TLong)
{
throw new Exception($"data_json2格式只支持key为int,long,string类型的map");
}
x.WriteStartObject();
foreach (var d in type.Datas)
{
switch (d.Key)
{
case DString ds:
{
x.WritePropertyName(ds.Value);
break;
}
case DInt di:
{
x.WritePropertyName(di.Value.ToString());
break;
}
case DLong dl:
{
x.WritePropertyName(dl.Value.ToString());
break;
}
default:
{
throw new Exception($"data_json2格式只支持key为int,long,string类型的map");
}
}
x.WritePropertyName(d.Key.Apply(ToJsonPropertyNameVisitor.Ins));
d.Value.Apply(this, ass, x);
}
x.WriteEndObject();

View File

@ -46,7 +46,7 @@ namespace Luban.Job.Cfg
[Option("output_data_json_monolithic_file", Required = false, HelpText = "output monolithic json file")]
public string OutputDataJsonMonolithicFile { get; set; }
[Option("gen_types", Required = true, HelpText = "code_cs_bin,code_cs_json,code_cs_unity_json,code_lua_bin,code_java_bin,code_go_bin,code_go_json,code_cpp_bin,code_python3_json,code_typescript_bin,code_typescript_json,data_bin,data_lua,data_json,data_json_monolithic,data_resources . can be multi")]
[Option("gen_types", Required = true, HelpText = "code_cs_bin,code_cs_json,code_cs_unity_json,code_lua_bin,code_java_bin,code_go_bin,code_go_json,code_cpp_bin,code_python3_json,code_typescript_bin,code_typescript_json,data_bin,data_lua,data_json,data_json2,data_json_monolithic,data_resources . can be multi")]
public string GenType { get; set; }
[Option('s', "service", Required = true, HelpText = "service")]
@ -126,7 +126,8 @@ namespace Luban.Job.Cfg
switch (genType)
{
case "data_bin": return "bin";
case "data_json": return "json";
case "data_json":
case "data_json2": return "json";
case "data_lua": return "lua";
default: throw new Exception($"not support output data type:{genType}");
}
@ -167,8 +168,7 @@ namespace Luban.Job.Cfg
errMsg = "--outputcodedir missing";
return false;
}
List<string> dataGenTypes = genTypes.Where(t => t.StartsWith("data_", StringComparison.Ordinal)).ToList();
if (dataGenTypes.Count > 0)
if (genTypes.Any(t => t.StartsWith("data_", StringComparison.Ordinal)))
{
if (string.IsNullOrWhiteSpace(inputDataDir))
{
@ -384,6 +384,7 @@ namespace Luban.Job.Cfg
}
case "data_bin":
case "data_json":
case "data_json2":
case "data_lua":
{
await CheckLoadCfgDataAsync();
@ -786,7 +787,7 @@ namespace {ctx.TopModule}
{
allJsonTask.Add(Task.Run(() =>
{
return (string)DataExporterUtil.ToOutputData(c, ctx.Assembly.GetTableExportDataList(c), "data_json");
return (string)DataExporterUtil.ToOutputData(c, ctx.Assembly.GetTableExportDataList(c), "data_json2");
}));
}

View File

@ -0,0 +1,130 @@
using Luban.Job.Common.Types;
using Luban.Job.Common.TypeVisitors;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Luban.Job.Cfg.TypeVisitors
{
class CsStringDeserialize : ITypeFuncVisitor<string, string, string>
{
public static CsStringDeserialize Ins { get; } = new();
public string Accept(TBool type, string strName, string varName)
{
return $"{varName} = bool.Parse({strName});";
}
public string Accept(TByte type, string strName, string varName)
{
return $"{varName} = byte.Parse({strName});";
}
public string Accept(TShort type, string strName, string varName)
{
return $"{varName} = short.Parse({strName});";
}
public string Accept(TFshort type, string strName, string varName)
{
return $"{varName} = short.Parse({strName});";
}
public string Accept(TInt type, string strName, string varName)
{
return $"{varName} = int.Parse({strName});";
}
public string Accept(TFint type, string strName, string varName)
{
return $"{varName} = int.Parse({strName});";
}
public string Accept(TLong type, string strName, string varName)
{
return $"{varName} = long.Parse({strName});";
}
public string Accept(TFlong type, string strName, string varName)
{
return $"{varName} = long.Parse({strName});";
}
public string Accept(TFloat type, string strName, string varName)
{
return $"{varName} = float.Parse({strName});";
}
public string Accept(TDouble type, string strName, string varName)
{
return $"{varName} = double.Parse({strName});";
}
public string Accept(TEnum type, string strName, string varName)
{
return $"{varName} = ({type.Apply(CsDefineTypeName.Ins)})int.Parse({strName});";
}
public string Accept(TString type, string strName, string varName)
{
return $"{varName} = {strName};";
}
public string Accept(TBytes type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TText type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TBean type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TArray type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TList type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TSet type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TMap type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TVector2 type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TVector3 type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TVector4 type, string strName, string varName)
{
throw new NotSupportedException();
}
public string Accept(TDateTime type, string strName, string varName)
{
throw new NotSupportedException();
}
}
}