【新增】vector{2,3,4}和datetime类型也支持 externaltype 映射

main
walon 2022-02-16 18:03:57 +08:00
parent d5184e136e
commit b2014ab7bb
7 changed files with 46 additions and 11 deletions

View File

@ -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;
}
}
}

View File

@ -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";
}
}

View File

@ -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)};";
}
}
}

View File

@ -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})";
}

View File

@ -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~}}

View File

@ -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~}}

View File

@ -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~}}