schema.sbn 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. @tool
  2. class_name Schema
  3. extends RefCounted
  4. {{~for enum in __enums~}}
  5. {{~if enum.comment != '' ~}}
  6. ## {{enum.comment | html.escape}}
  7. {{~end~}}
  8. enum {{full_name enum}}
  9. {
  10. {{~ for item in enum.items ~}}
  11. {{~if item.comment_or_alias != '' ~}}
  12. ## {{item.comment_or_alias | html.escape}}
  13. {{~end~}}
  14. {{item.name}} = {{item.value}},
  15. {{~end~}}
  16. }
  17. {{~end~}}
  18. {{~for bean in __beans
  19. name = (full_name bean)
  20. ~}}
  21. {{~if bean.comment != '' ~}}
  22. ## {{bean.comment | html.escape}}
  23. {{~end~}}
  24. class {{name}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}}:
  25. {{~ for field in bean.export_fields ~}}
  26. {{~if field.comment != '' ~}}
  27. ## {{field.comment | html.escape}}
  28. {{~end~}}
  29. var {{format_field_name __code_style field.name}}: {{declaring_type_name field.ctype}}
  30. {{~end~}}
  31. {{~if bean.is_abstract_type~}}
  32. static func fromJson(_json_):
  33. var type = _json_['$type']
  34. match type:
  35. {{~ for child in bean.hierarchy_not_abstract_children~}}
  36. "{{impl_data_type child bean}}": return {{full_name child}}.new(_json_)
  37. {{~end~}}
  38. _: assert(false)
  39. {{~end~}}
  40. func _init(_json_) -> void:
  41. {{~if bean.parent_def_type~}}
  42. super(_json_)
  43. {{~end~}}
  44. {{~ for field in bean.export_fields ~}}
  45. {{deserialize_field ('self.' + (format_field_name __code_style field.name)) '_json_' field.name field.ctype}}
  46. {{~end~}}
  47. {{~if bean.export_fields.empty?~}}
  48. pass
  49. {{~end~}}
  50. {{~end~}}
  51. {{~for table in __tables
  52. value_type = table.value_ttype
  53. value_type_name = (declaring_type_name value_type)
  54. ~}}
  55. {{~if table.comment != '' ~}}
  56. ## {{table.comment | html.escape}}
  57. {{~end~}}
  58. class {{full_name table}}:
  59. {{~if table.is_map_table ~}}
  60. var _data_list: Array[{{value_type_name}}]
  61. var _data_map: Dictionary
  62. func _init(_json_) -> void:
  63. for _json2_ in _json_:
  64. var _v: {{value_type_name}}
  65. {{deserialize '_v' '_json2_' value_type}}
  66. self._data_list.append(_v)
  67. self._data_map[_v.{{format_field_name __code_style table.index_field.name}}] = _v
  68. func get_data_list() -> Array[{{value_type_name}}]:
  69. return self._data_list
  70. func get_data_map() -> Dictionary:
  71. return self._data_map
  72. func get_item(key) -> {{value_type_name}}:
  73. return self._data_map.get(key)
  74. {{~else if table.multi_key ~}}
  75. var _data_list: Array[{{value_type_name}}]
  76. {{~ for INDEX in table.index_list ~}}
  77. var _{{INDEX.index_field.name}}_data_map: Dictionary
  78. {{~ end ~}}
  79. func _init(_json_) -> void:
  80. {{~ for INDEX in table.index_list ~}}
  81. self._{{INDEX.index_field.name}}_data_map = {}
  82. {{~ end ~}}
  83. for _json2_ in _json_:
  84. var _v: {{value_type_name}}
  85. {{deserialize '_v' '_json2_' value_type}}
  86. self._data_list.append(_v)
  87. {{~ for INDEX in table.index_list ~}}
  88. self._{{INDEX.index_field.name}}_data_map[_v.{{INDEX.index_field.name}}] = _v
  89. {{~ end ~}}
  90. func get_data_list() -> Array[{{value_type_name}}]:
  91. return self._data_list
  92. {{~ for INDEX in table.index_list ~}}
  93. func get_{{INDEX.index_field.name}}_data_map() -> Dictionary:
  94. return self._{{INDEX.index_field.name}}_data_map
  95. {{~ end ~}}
  96. {{~ for INDEX in table.index_list ~}}
  97. func get_item_by_{{INDEX.index_field.name}}({{INDEX.index_field.name}}) -> {{value_type_name}}:
  98. return self._{{INDEX.index_field.name}}_data_map.get({{INDEX.index_field.name}})
  99. {{~ end ~}}
  100. {{~else if table.is_list_table ~}}
  101. var _data_list: Array[{{value_type_name}}]
  102. func _init(_json_) -> void:
  103. for _json2_ in _json_:
  104. var _v: {{value_type_name}}
  105. {{deserialize '_v' '_json2_' value_type}}
  106. self._data_list.append(_v)
  107. func get_data_list() -> Array[{{value_type_name}}]:
  108. return self._data_list
  109. func get_item(index) -> {{value_type_name}}:
  110. return self._data_list[index]
  111. {{~else~}}
  112. var _data:{{value_type_name}}
  113. func _init(_json_) -> void:
  114. assert(len(_json_) == 1, "table mode = one, but size != 1")
  115. {{deserialize 'self._data' '_json_[0]' value_type}}
  116. func get_data() -> {{value_type_name}}:
  117. return self._data
  118. {{~ for field in value_type.def_bean.hierarchy_export_fields
  119. name = format_field_name __code_style field.name
  120. ~}}
  121. {{~if field.comment != '' ~}}
  122. ## {{escape_comment field.comment}}
  123. {{~end~}}
  124. var {{name}}: {{declaring_type_name field.ctype}}:
  125. get: return self._data.{{name}}
  126. {{~end~}}
  127. {{~end~}}
  128. {{~end~}}
  129. class {{str_full_name __full_name}}:
  130. {{~for table in __tables ~}}
  131. {{~if table.comment != ''~}}
  132. ## {{table.comment | html.escape}}
  133. {{~end~}}
  134. var {{format_method_name __code_style table.name}}: {{full_name table}}
  135. {{~end~}}
  136. func _init(loader: Callable) -> void:
  137. {{~for table in __tables ~}}
  138. self.{{format_method_name __code_style table.name}} = {{full_name table}}.new(loader.call('{{table.output_data_file}}'))
  139. {{~end~}}