From ba1a552d3ec7c3a7b619fd5d9d3c01b6e8c23179 Mon Sep 17 00:00:00 2001 From: Dongua <597559675@qq.com> Date: Sat, 11 Jun 2022 16:40:15 +0800 Subject: [PATCH] =?UTF-8?q?[change]gdscript=20=E6=94=AF=E6=8C=81=E5=A4=9A?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E4=B8=BB=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Luban.Job.Cfg/Source/Defs/DefTable.cs | 10 ++++-- .../Templates/config/gdscript_json/table.tpl | 34 +++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/Luban.Job.Cfg/Source/Defs/DefTable.cs b/src/Luban.Job.Cfg/Source/Defs/DefTable.cs index 2d2c48e..fe83962 100644 --- a/src/Luban.Job.Cfg/Source/Defs/DefTable.cs +++ b/src/Luban.Job.Cfg/Source/Defs/DefTable.cs @@ -65,6 +65,8 @@ namespace Luban.Job.Cfg.Defs public bool IsUnionIndex { get; private set; } + public bool MultiKey { get; private set; } + public List IndexList { get; } = new(); public bool NeedExport => Assembly.NeedExport(this.Groups); @@ -141,8 +143,11 @@ namespace Luban.Job.Cfg.Defs { if (ValueTType.GetBeanAs().TryGetField(idx, out var f, out var i)) { - IndexField = f; - IndexFieldIdIndex = i; + if (IndexField == null) + { + IndexField = f; + IndexFieldIdIndex = i; + } this.IndexList.Add(new IndexInfo(f.CType, f, i)); } else @@ -152,6 +157,7 @@ namespace Luban.Job.Cfg.Defs } // 如果不是 union index, 每个key必须唯一,否则 (key1,..,key n)唯一 IsUnionIndex = IndexList.Count > 1 && !Index.Contains(','); + MultiKey = IndexList.Count > 1 && Index.Contains(','); break; } default: throw new Exception($"unknown mode:'{Mode}'"); diff --git a/src/Luban.Server/Templates/config/gdscript_json/table.tpl b/src/Luban.Server/Templates/config/gdscript_json/table.tpl index 1ac576e..3389975 100644 --- a/src/Luban.Server/Templates/config/gdscript_json/table.tpl +++ b/src/Luban.Server/Templates/config/gdscript_json/table.tpl @@ -27,6 +27,37 @@ class {{name}}: func get(key): return self._data_map.get(key) +{{~else if x.multi_key ~}} +{{~ for INDEX in x.index_list ~}} + var _data_{{INDEX.index_field.convention_name}}_map = {} +{{~ end ~}} + var _data_list = [] + + func _init(_json_) -> void: + {{~ for INDEX in x.index_list ~}} + self._data_{{INDEX.index_field.convention_name}}_map = {} + {{~ end ~}} + self._data_list = [] + + for _json2_ in _json_: + var _v + {{gdscript_deserialize_value '_v' '_json2_' value_type}} + self._data_list.append(_v) + {{~ for INDEX in x.index_list ~}} + self._data_{{INDEX.index_field.convention_name}}_map[_v.{{INDEX.index_field.convention_name}}] = _v + {{~ end ~}} + + func get_data_map() -> Dictionary: + return self._data_{{x.index_field.convention_name }}_map + func get_data_list() -> Array: + return self._data_list +{{~ for INDEX in x.index_list ~}} + func get_by_{{INDEX.index_field.convention_name}}({{INDEX.index_field.convention_name}}): + return self._data_{{INDEX.index_field.name}}_map.get({{INDEX.index_field.convention_name}}) +{{~ end ~}} + + func get(key): + return self._data_{{x.index_field.convention_name }}_map.get(key) {{~else if x.is_list_table ~}} var _data_list func _init(_json_) -> void: @@ -42,7 +73,6 @@ class {{name}}: func get(index): return self._data_list[index] - {{~else~}} var _data: Dictionary func _init(_json_) -> void: @@ -59,4 +89,4 @@ class {{name}}: func {{field.convention_name}}(): return self._data.{{field.convention_name}} {{~end~}} -{{~end~}} +{{~end~}} \ No newline at end of file