Line 7: |
Line 7: |
| | | |
| local EquipmentListKai = BaseTable{ | | local EquipmentListKai = BaseTable{ |
− | _table_start = [[{| class="wikitable"]], | + | _item_class = Equipment, |
− | _row_starter = "|-",
| |
| _header_template = [[! No. | | _header_template = [[! No. |
| ! Rarity | | ! Rarity |
Line 20: |
Line 19: |
| name = [[| colspan="1" rowspan="${rowspan}" style="text-align: ${text_align}; background-color: ${bg_color}; padding:5px 5px 5px 5px;" |${values.name}<br />${values.icon} ${values.japanese_name}]] | | name = [[| colspan="1" rowspan="${rowspan}" style="text-align: ${text_align}; background-color: ${bg_color}; padding:5px 5px 5px 5px;" |${values.name}<br />${values.icon} ${values.japanese_name}]] |
| }, | | }, |
− | _comparison_columns = { | + | _columns = { |
− | "id",
| |
− | "stars",
| |
− | "name",
| |
− | "equipment_type",
| |
− | "firepower",
| |
− | "torpedo",
| |
− | "bombing",
| |
− | "aa",
| |
− | "asw",
| |
− | "los",
| |
− | "luck",
| |
− | "armor",
| |
− | "shelling_accuracy",
| |
− | "evasion",
| |
− | "speed",
| |
− | "range",
| |
− | "compatibility",
| |
− | "buildable",
| |
− | "notes",
| |
− | },
| |
− | _stat_columns = {
| |
− | "firepower",
| |
− | "torpedo",
| |
− | "bombing",
| |
− | "aa",
| |
− | "asw",
| |
− | "los",
| |
− | "luck",
| |
− | "armor",
| |
− | "shelling_accuracy",
| |
− | "evasion",
| |
− | "speed",
| |
− | "range",
| |
− | },
| |
− | _list_columns = {
| |
| "id", | | "id", |
| "stars", | | "stars", |
Line 111: |
Line 75: |
| text_align = self._start_align, | | text_align = self._start_align, |
| } | | } |
− | end
| |
− |
| |
− | function EquipmentListKai:firepower(equipment)
| |
− | local firepower = equipment:firepower()
| |
− | if firepower ~= false then
| |
− | self._shown_stats.firepower = true
| |
− | else
| |
− | firepower = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(firepower)}, bg_color = self:get_bg_color(self._cell_color.firepower, firepower, self._args.firepower_operator, self._args.firepower_outstanding, self._args.firepower_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:torpedo(equipment)
| |
− | local torpedo = equipment:torpedo()
| |
− | if torpedo ~= false then
| |
− | self._shown_stats.torpedo = true
| |
− | else
| |
− | torpedo = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(torpedo)}, bg_color = self:get_bg_color(self._cell_color.torpedo, torpedo, self._args.torpedo_operator, self._args.torpedo_outstanding, self._args.torpedo_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:bombing(equipment)
| |
− | local bombing = equipment:bombing()
| |
− | if bombing ~= false then
| |
− | self._shown_stats.bombing = true
| |
− | else
| |
− | bombing = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(bombing)}, bg_color = self:get_bg_color(self._cell_color.bombing, bombing, self._args.bombing_operator, self._args.bombing_outstanding, self._args.bombing_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:aa(equipment)
| |
− | local aa = equipment:aa()
| |
− | if aa ~= false then
| |
− | self._shown_stats.aa = true
| |
− | else
| |
− | aa = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(aa)}, bg_color = self:get_bg_color(self._cell_color.aa, aa, self._args.aa_operator, self._args.aa_outstanding, self._args.aa_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:asw(equipment)
| |
− | local asw = equipment:asw()
| |
− | if asw ~= false then
| |
− | self._shown_stats.asw = true
| |
− | else
| |
− | asw = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(asw)}, bg_color = self:get_bg_color(self._cell_color.asw, asw, self._args.asw_operator, self._args.asw_outstanding, self._args.asw_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:los(equipment)
| |
− | local los = equipment:los()
| |
− | if los ~= false then
| |
− | self._shown_stats.los = true
| |
− | else
| |
− | los = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(los)}, bg_color = self:get_bg_color(self._cell_color.los, los, self._args.los_operator, self._args.los_outstanding, self._args.los_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:luck(equipment)
| |
− | local luck = equipment:luck()
| |
− | if luck ~= false then
| |
− | self._shown_stats.luck = true
| |
− | else
| |
− | luck = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(luck)}, bg_color = self:get_bg_color(self._cell_color.luck, luck, self._args.luck_operator, self._args.luck_outstanding, self._args.luck_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:armor(equipment)
| |
− | local armor = equipment:armor()
| |
− | if armor ~= false then
| |
− | self._shown_stats.armor = true
| |
− | else
| |
− | armor = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(armor)}, bg_color = self:get_bg_color(self._cell_color.armor, armor, self._args.armor_operator, self._args.armor_outstanding, self._args.armor_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:shelling_accuracy(equipment)
| |
− | local shelling_accuracy = equipment:shelling_accuracy()
| |
− | if shelling_accuracy ~= false then
| |
− | self._shown_stats.shelling_accuracy = true
| |
− | else
| |
− | shelling_accuracy = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(shelling_accuracy)}, bg_color = self:get_bg_color(self._cell_color.shelling_accuracy, shelling_accuracy, self._args.shelling_accuracy_operator, self._args.shelling_accuracy_outstanding, self._args.shelling_accuracy_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:evasion(equipment)
| |
− | local evasion = equipment:evasion()
| |
− | if evasion ~= false then
| |
− | self._shown_stats.evasion = true
| |
− | else
| |
− | evasion = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_stat(evasion)}, bg_color = self:get_bg_color(self._cell_color.evasion, evasion, self._args.evasion_operator, self._args.evasion_outstanding, self._args.evasion_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:speed(equipment)
| |
− | local speed = equipment:speed()
| |
− | if speed ~= false then
| |
− | self._shown_stats.speed = true
| |
− | else
| |
− | speed = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_speed(speed)}, bg_color = self:get_bg_color(self._cell_color.speed, speed, self._args.speed_operator, self._args.speed_outstanding, self._args.speed_good), text_align = self._center_align}
| |
− | end
| |
− |
| |
− | function EquipmentListKai:range(equipment)
| |
− | local range = equipment:range()
| |
− | if range ~= false then
| |
− | self._shown_stats.range = true
| |
− | else
| |
− | range = 0
| |
− | end
| |
− | return {values = {value = Formatting:format_range(range)}, bg_color = self:get_bg_color(self._cell_color.range, range, self._args.range_operator, self._args.range_outstanding, self._args.range_good), text_align = self._center_align}
| |
| end | | end |
| | | |
Line 244: |
Line 88: |
| local note = self._notes[equipment] | | local note = self._notes[equipment] |
| if note then | | if note then |
− | local bg_color
| + | return {values = {value = note.note or ""}, bg_color = self._transparent} |
− | if note.highlight == "outstanding" then
| |
− | bg_color = self._outstanding_stat_color
| |
− | elseif note.highlight == "good" then
| |
− | bg_color = self._good_stat_color
| |
− | else
| |
− | bg_color = self._transparent
| |
− | end
| |
− | return {values = {value = note.note or ""}, bg_color = bg_color} | |
| end | | end |
| return {values = {value = ""}, bg_color = self._transparent} | | return {values = {value = ""}, bg_color = self._transparent} |
| end | | end |
| | | |
− | function EquipmentListKai:create_table() | + | function EquipmentListKai:create_header() |
− | local equipment_list = {} | + | self._header = format{self._header_template, stat_columns = format{self._column_header_cell_template, value = self._stats_column_label}} |
− | self._notes = {}
| |
− | for index, equipment_name in ipairs(self._args) do
| |
− | if equipment_name == "-" then
| |
− | table.insert(equipment_list, "break")
| |
− | elseif equipment_name == "#" then
| |
− | table.insert(equipment_list, "header")
| |
− | else
| |
− | local equipment = Equipment(equipment_name)
| |
− | table.insert(equipment_list, equipment)
| |
− | local note = self._args[equipment_name .. self._notes_suffix]
| |
− | if note then
| |
− | note = {note = note}
| |
− | local note_highlight = self._args[equipment_name .. self._notes_suffix .. self._highlight_suffix]
| |
− | if note_highlight then
| |
− | note.highlight = note_highlight
| |
− | end
| |
− | self._notes[equipment] = note
| |
− | end
| |
− | end
| |
− | end
| |
− | | |
− | local rows = {self._table_start}
| |
− | local header
| |
− | local data_rows = {}
| |
− | | |
− | if self._args.comparison then
| |
− | self._columns = self._comparison_columns
| |
− | self._shown_stats = {}
| |
− | | |
− | for index, equipment in ipairs(equipment_list) do
| |
− | local row_values
| |
− | if type(equipment) == "string" then
| |
− | row_values = equipment
| |
− | else
| |
− | row_values = {}
| |
− | for _, column in ipairs(self._columns) do
| |
− | row_values[column] = self[column](self, equipment)
| |
− | end
| |
− | if index > 1 then
| |
− | for _, column in ipairs(self._columns) do
| |
− | for i=index-1,1,-1 do
| |
− | local previous_row = data_rows[i]
| |
− | local previous_row_type = type(previous_row) ~= "string"
| |
− | local previous_cell = previous_row_type and previous_row[column] or false
| |
− | if previous_cell then
| |
− | if self.compare_values(row_values[column].values, previous_cell.values) then
| |
− | previous_cell.rowspan = previous_cell.rowspan + 1
| |
− | row_values[column] = nil
| |
− | else
| |
− | row_values[column].rowspan = 1
| |
− | end
| |
− | break
| |
− | elseif not previous_row_type then
| |
− | row_values[column].rowspan = 1
| |
− | break
| |
− | end
| |
− | end
| |
− | end
| |
− | else
| |
− | for _, column in ipairs(self._columns) do
| |
− | row_values[column].rowspan = 1
| |
− | end
| |
− | end
| |
− | end
| |
− | table.insert(data_rows, row_values)
| |
− | end
| |
− | | |
− | local stat_columns = {}
| |
− | for _, column in ipairs(self._stat_columns) do
| |
− | if self._shown_stats[column] then
| |
− | table.insert(stat_columns, format{self._column_header_cell_template, value = Formatting:format_image{StatIcons[column], caption = Formatting:format_stat_name(column)}})
| |
− | else
| |
− | for _, row_values in ipairs(data_rows) do
| |
− | row_values[column] = nil
| |
− | end
| |
− | end
| |
− | end
| |
− | header = format{self._header_template, stat_columns = table.concat(stat_columns, "\n")}
| |
− | else
| |
− | self._columns = self._list_columns
| |
− | header = format{self._header_template, stat_columns = format{self._column_header_cell_template, value = self._stats_column_label}}
| |
− | for _, equipment in ipairs(equipment_list) do
| |
− | local row_values
| |
− | if type(equipment) == "string" then
| |
− | row_values = equipment
| |
− | else
| |
− | row_values = {}
| |
− | for _, column in ipairs(self._columns) do
| |
− | row_values[column] = self[column](self, equipment)
| |
− | row_values[column].rowspan = 1
| |
− | end
| |
− | end
| |
− | table.insert(data_rows, row_values)
| |
− | end
| |
− | end
| |
− |
| |
− | table.insert(rows, header)
| |
− | for index, row_values in ipairs(data_rows) do
| |
− | if row_values ~= "break" then
| |
− | table.insert(rows, self._row_starter)
| |
− | if row_values == "header" then
| |
− | table.insert(rows, header)
| |
− | else
| |
− | for _, column in ipairs(self._columns) do
| |
− | if row_values[column] then
| |
− | table.insert(rows, format(self._column_cell_templates[column] or self._cell, row_values[column]))
| |
− | end
| |
− | end
| |
− | end
| |
− | end
| |
− | end
| |
− | table.insert(rows, self._row_starter)
| |
− | table.insert(rows, header)
| |
− | table.insert(rows, self._table_end)
| |
− | return table.concat(rows, "\n")
| |
| end | | end |
| | | |
| return EquipmentListKai | | return EquipmentListKai |