From b2014ab7bb21f3d16b135d33ac673348146e4237 Mon Sep 17 00:00:00 2001 From: walon Date: Wed, 16 Feb 2022 18:03:57 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91vector{2,3,?= =?UTF-8?q?4}=E5=92=8Cdatetime=E7=B1=BB=E5=9E=8B=E4=B9=9F=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20externaltype=20=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Defs/TTypeTemplateCommonExtends.cs | 6 ++++++ .../TypeVisitors/CsUnderingDefineTypeName.cs | 20 +++++++++++++++++++ .../CsUnderingDeserializeVisitor.cs | 14 ++++++++----- .../Source/Utils/ExternalTypeUtil.cs | 11 +++++++--- .../Templates/config/cs_bin/bean.tpl | 2 +- .../Templates/config/cs_json/bean.tpl | 2 +- .../Templates/config/cs_unity_json/bean.tpl | 2 +- 7 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/Luban.Job.Common/Source/Defs/TTypeTemplateCommonExtends.cs b/src/Luban.Job.Common/Source/Defs/TTypeTemplateCommonExtends.cs index 9407bdf..53104d0 100644 --- a/src/Luban.Job.Common/Source/Defs/TTypeTemplateCommonExtends.cs +++ b/src/Luban.Job.Common/Source/Defs/TTypeTemplateCommonExtends.cs @@ -1,5 +1,6 @@ using Luban.Job.Common.Types; using Luban.Job.Common.TypeVisitors; +using Luban.Job.Common.Utils; using Scriban.Runtime; namespace Luban.Job.Common.Defs @@ -308,5 +309,10 @@ namespace Luban.Job.Common.Defs { return DefAssemblyBase.LocalAssebmly.GetOptionOr(optionName, defaultValue); } + + public static bool GenDatetimeMills(TType type) + { + return type is TDateTime && !type.IsNullable && ExternalTypeUtil.GetExternalTypeMappfer("datetime") == null; + } } } diff --git a/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDefineTypeName.cs b/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDefineTypeName.cs index eb48f2b..47bbc25 100644 --- a/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDefineTypeName.cs +++ b/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDefineTypeName.cs @@ -105,6 +105,11 @@ namespace Luban.Job.Common.TypeVisitors public string Accept(TVector2 type) { + var mapper = ExternalTypeUtil.GetExternalTypeMappfer("vector2"); + if (mapper != null) + { + return mapper.TargetTypeName; + } if (DefAssemblyBase.IsUseUnityVectors) { return "UnityEngine.Vector2"; @@ -114,6 +119,11 @@ namespace Luban.Job.Common.TypeVisitors public string Accept(TVector3 type) { + var mapper = ExternalTypeUtil.GetExternalTypeMappfer("vector3"); + if (mapper != null) + { + return mapper.TargetTypeName; + } if (DefAssemblyBase.IsUseUnityVectors) { return "UnityEngine.Vector3"; @@ -123,6 +133,11 @@ namespace Luban.Job.Common.TypeVisitors public string Accept(TVector4 type) { + var mapper = ExternalTypeUtil.GetExternalTypeMappfer("vector4"); + if (mapper != null) + { + return mapper.TargetTypeName; + } if (DefAssemblyBase.IsUseUnityVectors) { return "UnityEngine.Vector4"; @@ -132,6 +147,11 @@ namespace Luban.Job.Common.TypeVisitors public virtual string Accept(TDateTime type) { + var mapper = ExternalTypeUtil.GetExternalTypeMappfer("datetime"); + if (mapper != null) + { + return mapper.TargetTypeName; + } return "int"; } } diff --git a/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDeserializeVisitor.cs b/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDeserializeVisitor.cs index 3bd1de3..a4a8c0f 100644 --- a/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDeserializeVisitor.cs +++ b/src/Luban.Job.Common/Source/TypeVisitors/CsUnderingDeserializeVisitor.cs @@ -81,7 +81,7 @@ namespace Luban.Job.Common.TypeVisitors public string Accept(TBean type, string bufName, string fieldName) { string src = $"{type.Bean.FullName}.Deserialize{type.Bean.Name}({bufName})"; - return $"{fieldName} = {ExternalTypeUtil.CsCloneToExternal(type.Bean, src)};"; + return $"{fieldName} = {ExternalTypeUtil.CsCloneToExternal(type.Bean.FullName, src)};"; } public string Accept(TArray type, string bufName, string fieldName) @@ -109,22 +109,26 @@ namespace Luban.Job.Common.TypeVisitors public string Accept(TVector2 type, string bufName, string fieldName) { - return $"{fieldName} = {bufName}.Read{VectorName}2();"; + string src = $"{bufName}.Read{VectorName}2()"; + return $"{fieldName} = {ExternalTypeUtil.CsCloneToExternal("vector2", src)};"; } public string Accept(TVector3 type, string bufName, string fieldName) { - return $"{fieldName} = {bufName}.Read{VectorName}3();"; + string src = $"{bufName}.Read{VectorName}3()"; + return $"{fieldName} = {ExternalTypeUtil.CsCloneToExternal("vector3", src)};"; } public string Accept(TVector4 type, string bufName, string fieldName) { - return $"{fieldName} = {bufName}.Read{VectorName}4();"; + string src = $"{bufName}.Read{VectorName}4()"; + return $"{fieldName} = {ExternalTypeUtil.CsCloneToExternal("vector4", src)};"; } public string Accept(TDateTime type, string bufName, string fieldName) { - return $"{fieldName} = {bufName}.ReadInt();"; + string src = $"{bufName}.ReadInt()"; + return $"{fieldName} = {ExternalTypeUtil.CsCloneToExternal("datetime", src)};"; } } } diff --git a/src/Luban.Job.Common/Source/Utils/ExternalTypeUtil.cs b/src/Luban.Job.Common/Source/Utils/ExternalTypeUtil.cs index f5d5f00..3fc1a0c 100644 --- a/src/Luban.Job.Common/Source/Utils/ExternalTypeUtil.cs +++ b/src/Luban.Job.Common/Source/Utils/ExternalTypeUtil.cs @@ -27,22 +27,27 @@ namespace Luban.Job.Common.Utils // } //} + public static ExternalTypeMapper GetExternalTypeMappfer(string typeName) + { + return DefAssemblyBase.LocalAssebmly.GetExternalTypeMapper(typeName); + } + public static string CsMapperToExternalType(DefTypeBase type) { var mapper = DefAssemblyBase.LocalAssebmly.GetExternalTypeMapper(type.FullName); return mapper != null ? mapper.TargetTypeName : type.CsFullName; } - public static string CsCloneToExternal(DefTypeBase type, string src) + public static string CsCloneToExternal(string typeName, string src) { - var mapper = DefAssemblyBase.LocalAssebmly.GetExternalTypeMapper(type.FullName); + var mapper = DefAssemblyBase.LocalAssebmly.GetExternalTypeMapper(typeName); if (mapper == null) { return src; } if (string.IsNullOrWhiteSpace(mapper.CreateExternalObjectFunction)) { - throw new Exception($"type:{type.FullName} externaltype:{DefAssemblyBase.LocalAssebmly.GetExternalType(type.FullName)} lan:{mapper.Lan} selector:{mapper.Selector} 未定义 create_external_object_function 属性"); + throw new Exception($"type:{typeName} externaltype:{DefAssemblyBase.LocalAssebmly.GetExternalType(typeName)} lan:{mapper.Lan} selector:{mapper.Selector} 未定义 create_external_object_function 属性"); } return $"{mapper.CreateExternalObjectFunction}({src})"; } diff --git a/src/Luban.Server/Templates/config/cs_bin/bean.tpl b/src/Luban.Server/Templates/config/cs_bin/bean.tpl index 46fbc04..f095ba1 100644 --- a/src/Luban.Server/Templates/config/cs_bin/bean.tpl +++ b/src/Luban.Server/Templates/config/cs_bin/bean.tpl @@ -60,7 +60,7 @@ public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} { {{~if field.gen_ref~}} public {{field.cs_ref_validator_define}} {{~end~}} - {{~if field.ctype.type_name == "datetime" && !field.ctype.is_nullable ~}} + {{~if (gen_datetime_mills field.ctype) ~}} public long {{field.convention_name}}_Millis => {{field.convention_name}} * 1000L; {{~end~}} {{~if field.gen_text_key~}} diff --git a/src/Luban.Server/Templates/config/cs_json/bean.tpl b/src/Luban.Server/Templates/config/cs_json/bean.tpl index ee3a4c2..c649f6a 100644 --- a/src/Luban.Server/Templates/config/cs_json/bean.tpl +++ b/src/Luban.Server/Templates/config/cs_json/bean.tpl @@ -70,7 +70,7 @@ public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} { {{~if field.gen_ref~}} public {{field.cs_ref_validator_define}} {{~end~}} - {{~if field.ctype.type_name == "datetime" && !field.ctype.is_nullable ~}} + {{~if (gen_datetime_mills field.ctype) ~}} public long {{field.convention_name}}_Millis => {{field.convention_name}} * 1000L; {{~end~}} {{~if field.gen_text_key~}} diff --git a/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl b/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl index f0ab7de..6fee67d 100644 --- a/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl +++ b/src/Luban.Server/Templates/config/cs_unity_json/bean.tpl @@ -71,7 +71,7 @@ public {{x.cs_class_modifier}} partial class {{name}} : {{if parent_def_type}} { {{~if field.gen_ref~}} public {{field.cs_ref_validator_define}} {{~end~}} - {{~if field.ctype.type_name == "datetime" && !field.ctype.is_nullable ~}} + {{~if (gen_datetime_mills field.ctype) ~}} public long {{field.convention_name}}_Millis => {{field.convention_name}} * 1000L; {{~end~}} {{~if field.gen_text_key~}}