- Welcome to the Kancolle Wiki!
- If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord
Module:ImprovementTableKai
Revision as of 02:19, 20 December 2015 by com>Ckwng
Documentation for this module may be created at Module:ImprovementTableKai/doc
local BaseTable = require('Module:BaseTable')
local Equipment = require('Module:Equipment')
local Formatting = require('Module:Formatting')
local ResourceIcons = require('Module:ResourceIcons')
local Ship = require('Module:Ship')
local format = require('Module:StringInterpolation').format
local ImprovementTableKai = BaseTable{
_item_class = Equipment,
_header_template = [[
! style="text-align: center; padding: 5px;" | Improvement Cost: ${resources}
! style="text-align: center; padding: 5px;" | ★
! style="text-align: center; padding: 5px;" | ${devmat}
! style="text-align: center; padding: 5px;" | ${screw}
! style="text-align: center; padding: 5px;" | S
! style="text-align: center; padding: 5px;" | M
! style="text-align: center; padding: 5px;" | T
! style="text-align: center; padding: 5px;" | W
! style="text-align: center; padding: 5px;" | T
! style="text-align: center; padding: 5px;" | F
! style="text-align: center; padding: 5px;" | S
! style="text-align: center; padding: 5px;" | Helper Ship]],
_column_cell_templates = {
name = [[| colspan="${colspan}" rowspan="${rowspan}" style="text-align: ${text_align}; background-color: ${bg_color}; padding:5px 5px 5px 5px;" |${values.name}<br />${values.icon} ${values.japanese_name}]]
},
_columns = {
"input_output",
"improvement_level",
"development_material",
"improvement_material",
"sunday",
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"helper_ships",
},
_improvement_brackets = {
0,
6,
10
},
_consumed_equipment_label = "<small>Consumes: ${list}</small>",
_produced_equipment_label = "<b><small>Produces: 1x ${icon}${name}</small></b>",
_equipment_item = "${count}x ${icon}${name}",
_material_cell_content = "${normal}/${slider}",
_unavailable_color = "#f99",
_available_color = "#aaebaa",
_small_icon_size = "24x24px",
}
function ImprovementTableKai:create_items_post()
self._custom_rows = {}
local result = {}
if #self._items == 1 then
self._single_item = true
end
for _, item in ipairs(self._items) do
local products = item:improvement_products()
if products then
if self._single_item then
self._title_row = format{[[|+ ${icon}${name}]], icon = Formatting:format_image{Formatting:format_equipment_icon(item:icon())}, name = Formatting:format_link(item:link())}
else
self._custom_rows[item:name()] = format{[[| colspan="12" style="text-align: center; padding:5px 5px 5px 5px;" | ${icon}${name}]], icon = Formatting:format_image{Formatting:format_equipment_icon(item:icon())}, name = Formatting:format_link(item:link())}
table.insert(result, item:name())
end
for _, product in ipairs(products) do
local ships = item:improvement_ships(product)
local availability = {}
local ship_data = {}
for _, ship in ipairs(ships) do
availability[ship] = item:improvement_availability(product, ship)
if type(ship) == "string" then
ship_data[ship] = Ship(ship)
end
end
local ships_to_skip = {[true] = true}
local indexes_to_delete = {}
for index, ship in ipairs(ships) do
if not ships_to_skip[ship] then
local remodel_from = ship_data[ship]:remodel_from()
if ship_data[remodel_from] then
local identical = true
for day, possible in pairs(availability[ship]) do
if availability[remodel_from][day] ~= possible then
identical = false
end
end
if identical then
ships_to_skip[ship] = true
table.insert(indexes_to_delete, index)
end
end
end
end
table.sort(indexes_to_delete, function(a,b) return a > b end)
for _, index in ipairs(indexes_to_delete) do
table.remove(ships, index)
end
for _, stars in ipairs(self._improvement_brackets) do
table.insert(result, {item = item, product = product, stars = stars, ships = ships, ship_data = ship_data, availability = availability, resources = item:improvement_resources(false, product, stars), resources_x = item:improvement_resources(true, product, stars)})
end
end
end
end
self._items = result
end
function ImprovementTableKai:input_output(row_data)
local value = "-"
if row_data.resources then
local result = {}
local consumed_equipment_table = row_data.resources.equipment or {}
local consumed_equipment = {}
for equip, count in pairs(consumed_equipment_table) do
local equipment = equip ~= true and Equipment(equip) or row_data.item
table.insert(consumed_equipment, format{self._equipment_item, count = count, icon = Formatting:format_image{Formatting:format_equipment_icon_simple(equipment:icon()), size = self._small_icon_size}, name = Formatting:format_link(equipment:link())})
end
if #consumed_equipment > 0 then
table.insert(result, format{self._consumed_equipment_label, list = table.concat(consumed_equipment, "<br />")})
end
if row_data.stars == self._improvement_brackets[#self._improvement_brackets] and row_data.product then
local product = Equipment(row_data.product)
table.insert(result, format{self._produced_equipment_label, icon = Formatting:format_image{Formatting:format_equipment_icon_simple(product:icon()), size = self._small_icon_size}, name = Formatting:format_link(product:link())})
end
if #result > 0 then
value = table.concat(result, "<br />")
end
end
return {values = {value = value}, bg_color = self._transparent, text_align = self._center_align}
end
function ImprovementTableKai:improvement_level(row_data)
return {values = {value = row_data.stars}, bg_color = self._transparent, text_align = self._center_align}
end
function ImprovementTableKai:development_material(row_data)
return {values = {value = format{self._material_cell_content, normal = row_data.resources.devmat, slider = row_data.resources_x.devmat}}, bg_color = self._transparent, text_align = self._center_align}
end
function ImprovementTableKai:improvement_material(row_data)
return {values = {value = format{self._material_cell_content, normal = row_data.resources.screw, slider = row_data.resources_x.screw}}, bg_color = self._transparent, text_align = self._center_align}
end
function ImprovementTableKai:sunday(row_data)
return self:availability(row_data, "Sunday")
end
function ImprovementTableKai:monday(row_data)
return self:availability(row_data, "Monday")
end
function ImprovementTableKai:tuesday(row_data)
return self:availability(row_data, "Tuesday")
end
function ImprovementTableKai:wednesday(row_data)
return self:availability(row_data, "Wednesday")
end
function ImprovementTableKai:thursday(row_data)
return self:availability(row_data, "Thursday")
end
function ImprovementTableKai:friday(row_data)
return self:availability(row_data, "Friday")
end
function ImprovementTableKai:saturday(row_data)
return self:availability(row_data, "Saturday")
end
function ImprovementTableKai:availability(row_data, day)
local availability = {}
local available = false
for index, ship in ipairs(row_data.ships) do
if row_data.availability[ship][day] then
available = true
local ship_initial
if ship ~= true then
ship_initial = mw.ustring.sub(row_data.ship_data[ship]:name(), 1, 1)
else
ship_initial = "✓"
end
table.insert(availability, ship_initial)
else
table.insert(availability, " ")
end
end
return {values = {value = available and table.concat(availability, "<br />") or "✗"}, bg_color = available and self._available_color or self._unavailable_color, text_align = self._center_align}
end
function ImprovementTableKai:helper_ships(row_data)
local ships = {}
for index, ship in ipairs(row_data.ships) do
if ship ~= true then
table.insert(ships, Formatting:format_link(row_data.ship_data[ship]:link()))
else
table.insert(ships, "Any")
end
end
return {values = {value = table.concat(ships, "<br />")}, bg_color = self._transparent, text_align = self._center_align}
end
function ImprovementTableKai:start_rows()
if self._single_item then
self._rows = {self._table_start, self._title_row, self._header}
else
self._rows = {self._table_start}
end
end
function ImprovementTableKai:create_header()
local header_icons = {
devmat = ResourceIcons.devmat,
screw = ResourceIcons.screw,
}
for key, value in pairs(header_icons) do
header_icons[key] = Formatting:format_image{value, caption = Formatting:format_stat_name(key)}
end
if self._single_item then
header_icons.resources = Formatting:format_resources(self._items[1].item:improvement_resources())
end
self._header = format(self._header_template, header_icons)
end
ImprovementTableKai.create_data_rows = ImprovementTableKai.create_data_rows_merge_vertical
return ImprovementTableKai