Jelajahi Sumber

refactor: update tools

LanzaSchneider 1 tahun lalu
induk
melakukan
5eb06abe1a

+ 27 - 22
editor/config-importer.md

@@ -21,40 +21,45 @@
 
 * 数据类型说明
 
-	格式为 ```:数据类型```
+ 格式为 ```:数据类型```
 
-	如 :int 则为整数类型,所有类型详见下表
+ 如 :int 则为整数类型,所有类型详见下表
 
-	| 标识 | 说明 |
-	|---|---|
-	| int | 整数类型 |
-	| float | 浮点类型 |
-	| string | 字符串类型 |
-	| text | 文本类型,和字符串类型的不同在于,它是会自动处理成本地化表项的 |
-	| enum | 枚举类型,具体的枚举规则要看补充说明 |
-	| id | 数据主键类型 |
-	| id_name | 数据主键引用名类型,能够在引用时解析为 id |
-
-	如果最后追加 ```[]``` 则可以形成列表类型
+ | 标识 | 说明 |
+ |---|---|
+ | int | 整数类型 |
+ | float | 浮点类型 |
+ | string | 字符串类型 |
+ | text | 文本类型,和字符串类型的不同在于,它是会自动处理成本地化表项的 |
+ | enum | 枚举类型,具体的枚举规则要看补充说明 |
+ | id | 数据主键类型 |
+ | id_name | 数据主键引用名类型,能够在引用时解析为 id |
 
 * 数据类型补充说明
 
-	格式为 ```:数据类型,补充说明```
+ 格式为 ```,补充说明```
+
+ 某些数据类型支持进一步的补充说明,详见下表
+
+ | 补充说明 | 适用的数据类型 | 说明 |
+ |---|---|---|
+ | auto | enum | 自动枚举项,会将配置数据中所有此列出现过的值都归并为枚举值 |
 
-	某些数据类型支持进一步的补充说明,详见下表
+* 数据类型结构说明
+ 格式为 ```!结构说明```
 
-	| 补充说明 | 适用的数据类型 | 说明 |
-	|---|---|---|
-	| auto | enum | 自动枚举项,会将配置数据中所有此列出现过的值都归并为枚举值 |
+ | 结构说明 | 说明 |
+ |---|---|
+ | list | 此数据为序列 |
 
 * 引用说明
 
-	格式为 ```@表名```
+ 格式为 ```@表名```
 
-	表示这个字段是引用某个表中的主键,可以用 ```:id_name``` 配置的引用名
+ 表示这个字段是引用某个表中的主键,可以用 ```:id_name``` 配置的引用名
 
 * 默认值说明
 
-	格式为 ```=默认值```
+ 格式为 ```=默认值```
 
-	说明这个配置列的默认值,配置了默认值的表项,在没有配置该值的条目中,就会被忽略
+ 说明这个配置列的默认值,配置了默认值的表项,在没有配置该值的条目中,就会被忽略

+ 10 - 5
editor/tools/config-importer.rb

@@ -16,7 +16,7 @@ recreate_dir code_path
 require 'csv'
 
 # 各类型定义
-TypeInfo = Struct.new(:data_type, :data_type_extra, :ref_info, :default_value)
+TypeInfo = Struct.new(:data_type, :data_type_extra, :ref_info, :default_value, :struct_info)
 FieldInfo = Struct.new(:column_id, :identifier, :comment, :type_info)
 Table = Struct.new(:csv, :fields, :name2id, :id_field, :raw_name)
 Ini = Struct.new(:io, :tables)
@@ -40,12 +40,13 @@ Dir["#{config_path}/*"].each do |path|
     # 处理表头列
     identifiers.each_with_index do |identifier, index|
       next if identifier.nil? || identifier.empty?
-      type_info = TypeInfo.new(nil, nil, nil, nil)
+      type_info = TypeInfo.new(nil, nil, nil, nil, nil)
       type_infos[index].gsub(/\s+/, '').scan(/[(:|,|@|=)][a-zA-Z_]+/).each do |info|
         type_info.data_type = info[1..info.size] if info.start_with?(':')
         type_info.data_type_extra = info[1..info.size] if info.start_with?(',')
         type_info.ref_info = convert_case(info[1..info.size]) if info.start_with?('@')
         type_info.default_value = info[1..info.size] if info.start_with?('=')
+        type_info.struct_info = info[1..info.size] if info.start_with?('!')
       end
       field = FieldInfo.new(index, identifier, comments[index], type_info)
       # 处理特殊类型的字段
@@ -91,7 +92,9 @@ inis.each_pair do |ini_name, ini_data|
     # 逐行扫描
     while !table.csv.eof?
       line = table.csv.readline
-      id = line[table.id_field.column_id].upcase
+      id = line[table.id_field.column_id]
+      next if id.nil? || id.empty?
+      id = id.upcase
       buffer.puts "[#{id}]"
       table.fields.each do |field|
         value = line[field.column_id]
@@ -100,6 +103,7 @@ inis.each_pair do |ini_name, ini_data|
         if field.type_info.ref_info
           ref_table = tables[field.type_info.ref_info]
           value = value.split(',').collect do |ref_name|
+            ref_name.strip!
             ref_table.name2id[ref_name] || ref_name.upcase
           end.join(',')
         # 数据类型处理
@@ -109,9 +113,10 @@ inis.each_pair do |ini_name, ini_data|
           when 'text'
             index = 0
             value = value.split(',').collect do |text|
-              key = "C:#{table_name.upcase}:#{field.column_id}:#{count}"
+              key = "#{id}"
               key = "#{key}:#{index}" if index > 0
-              texts[key] = text
+              global_key = "C:#{table_name}:#{field.identifier}:#{key}"
+              texts[global_key] = text
               index += 1
               key
             end.join(',')

+ 8 - 0
editor/tools/script-converter.rb

@@ -0,0 +1,8 @@
+require_relative 'common'
+
+options = get_options(__FILE__)
+
+src_path = options['source_script_path']
+dst_path = options['generate_script_path']
+
+recreate_dir dst_path

+ 4 - 4
editor/tools/sprite-packer.rb

@@ -21,14 +21,14 @@ Point = Struct.new(:x, :y)
 Box = Struct.new(:top_left, :bottom_right)
 
 csv_atlas = CSV.open("#{csv_path}/atlas.csv", 'wb')
-csv_atlas << ['Id', 'Path']
+csv_atlas << ['Id', 'File']
 csv_atlas << ['', '']
 csv_atlas << [':id', ':path']
 
 csv_sprite = CSV.open("#{csv_path}/sprite.csv", 'wb')
-csv_sprite << ['Id', 'AtlasId', 'X', 'Y']
+csv_sprite << ['Id', 'AtlasId', 'X', 'Y', 'Width', 'Height']
 csv_sprite << ['', '', '', '']
-csv_sprite << [':id', '@atlas', ':int', ':int']
+csv_sprite << [':id', '@atlas', ':int', ':int', ':int', ':int']
 
 Dir["#{sprite_path}/*"].each do |path|
   atlas_name = convert_case(File::basename(path))
@@ -60,7 +60,7 @@ Dir["#{sprite_path}/*"].each do |path|
       unit, x, y = *item
       puts "#{x}, #{y}"
       atlas.compose!(unit.obj, x, y)
-      csv_sprite << [convert_case(File.basename(unit.obj.file, '.png')), atlas_name, x, y]
+      csv_sprite << [convert_case(File.basename(unit.obj.file, '.png')), atlas_name, x, y, unit.width, unit.height]
     end
     atlas_file = "#{atlas_path}/#{File::basename(path)}.png"
     atlas.save atlas_file