Module:ShipInfoKai

local Ship = require('Module:Ship') local ResourceIcons = require('Module:ResourceIcons') local StatIcons = require('Module:StatIcons') local Formatting = require('Module:Formatting') local format = require('Module:StringInterpolation').format

local ShipInfoKai = { _catbomb = "Catbomb.png|300px", _unbuildable = "Unbuildable", _remodel_level = "Remodel Level", _build_time = "Build Time", _default_slot_num = 4, _id_1 = "%s", _id_2 = "%s (%s)", _stat_1 = "%d", _stat_2 = "%d (%d)", _normal_construction = "Normal", _large_ship_construction = "LSC", _ship_data_documentation = "Template:ShipDataDocumentation/EditIntro", _edit_link_text = "Edit", _kekkon_max_template = "Maximum after marriage: ${value}", _slot_template = |- align=center style="background-color: whitesmoke; line-height: 1.1;" , _image_template = "", _template = [[{|class="${table_class}" id="${table_id}" style="border: 1px solid darkgray; width: 320px;" ${name} No.${id} ${japanese_name} ${class} ${type} ${slot_details} }
 * style="width: 36px; height: 36px; background-color: ${color};${extra_style}" | ${icon}
 * colspan="4" style="width: 190px;" | ${equipment}
 * style="width: 50px;" | ${slot_size}
 * colspan="6" style="position: relative; text-align: center; background-color: ${top_bg_color};${top_extra_style}" title="${rarity}"| ${edit_link}
 * colspan="6" style="position: relative; text-align: center; background-color: ${top_bg_color};${top_extra_style}" title="${rarity}"| ${edit_link}
 * align=center colspan="6" | ${image}
 * colspan="6" style="text-align: center; background-color: LightSkyBlue;"|Statistics
 * colspan="2" style="width: 88px;" | ${icons.hp} ${labels.hp}
 * style="width: 66px;" | ${hp}
 * style="width: 88px;" | ${icons.firepower} ${labels.firepower}
 * colspan="2" style="width: 60px;" | ${firepower}
 * colspan="2" style="width: 88px;" | ${icons.armor} ${labels.armor}
 * style="width: 66px;" | ${armor}
 * style="width: 88px;" | ${icons.torpedo} ${labels.torpedo}
 * colspan="2" style="width: 66px;" | ${torpedo}
 * colspan="2" style="width: 88px;" | ${icons.evasion} ${labels.evasion}
 * style="width: 66px;" | ${evasion}
 * style="width: 88px;" | ${icons.aa} ${labels.aa}
 * colspan="2" style="width: 66px;" | ${aa}
 * colspan="2" style="width: 88px;" | ${icons.aircraft} ${labels.aircraft}
 * style="width: 66px;" | ${aircraft}
 * style="width: 88px;" | ${icons.asw} ${labels.asw}
 * colspan="2" style="width: 66px;" | ${asw}
 * colspan="2" style="width: 88px;" | ${icons.speed} ${labels.speed}
 * style="width: 66px;" | ${speed}
 * style="width: 88px;" | ${icons.los} ${labels.los}
 * colspan="2" style="width: 66px;" | ${los}
 * colspan="2" style="width: 88px;" | ${icons.range} ${labels.range}
 * style="width: 66px;" | ${range}
 * style="width: 88px;" | ${icons.luck} ${labels.luck}
 * colspan="2" style="width: 66px;" | ${luck}
 * colspan="6" style="text-align: center; background-color: LightSkyBlue;"|Resource Consumption
 * colspan="2" style="width: 88px;" | ${icons.fuel} Fuel
 * style="width: 66px;" | ${fuel}
 * style="width: 88px;" | ${icons.ammo} Ammo
 * colspan="2" style="width: 66px;" | ${ammo}
 * colspan="6" style="text-align: center; background-color: LightSkyBlue;"|Modernization Bonus
 * colspan="6" style="text-align: center;"| ${modernization}
 * colspan="6" style="text-align: center; background-color: LightSkyBlue;"|Scrap Value
 * colspan="6" style="text-align: center;"| ${scrap}
 * colspan="5" style="text-align: center; background-color: LightSkyBlue;"|${build_remodel_header}
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Slots
 * colspan="5" style="text-align: center;"|${build_remodel_info}
 * align=center style="width: 50px;" |${slots}
 * colspan="5" style="text-align: center; background-color: LightSkyBlue;"|Stock Equipment
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Space
 * colspan="6" style="text-align: center; background-color: LightSkyBlue;"|Modernization Bonus
 * colspan="6" style="text-align: center;"| ${modernization}
 * colspan="6" style="text-align: center; background-color: LightSkyBlue;"|Scrap Value
 * colspan="6" style="text-align: center;"| ${scrap}
 * colspan="5" style="text-align: center; background-color: LightSkyBlue;"|${build_remodel_header}
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Slots
 * colspan="5" style="text-align: center;"|${build_remodel_info}
 * align=center style="width: 50px;" |${slots}
 * colspan="5" style="text-align: center; background-color: LightSkyBlue;"|Stock Equipment
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Space
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Slots
 * colspan="5" style="text-align: center;"|${build_remodel_info}
 * align=center style="width: 50px;" |${slots}
 * colspan="5" style="text-align: center; background-color: LightSkyBlue;"|Stock Equipment
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Space
 * colspan="5" style="text-align: center; background-color: LightSkyBlue;"|Stock Equipment
 * style="text-align: center; background-color: LightSkyBlue; width: 50px;" | Space
 * }]],

function ShipInfoKai:edit_link(ship_data_module) return Formatting:format_edit_link(ship_data_module, self._edit_link_text, self._ship_data_documentation) end

function ShipInfoKai:bg_color(ship) local back = ship:back return Formatting:format_ship_back(back), Formatting:extra_style_background_image(back and back > 7, back and back > 6) or "" end

function ShipInfoKai:rarity(ship) return Formatting:format_ship_rarity(ship:rarity) end

function ShipInfoKai:name(ship) return Formatting:format_link(ship:link) end

function ShipInfoKai:japanese_name(ship) return Formatting:tooltip(Formatting:format_stat(ship:japanese_name), Formatting:format_stat(ship:reading)) end

function ShipInfoKai:id(ship) return Formatting:format_stat_with_max(ship:id, ship:true_id) end

function ShipInfoKai:class(ship) local class = ship:class return Formatting:format_stat(class and class:name) end

function ShipInfoKai:type(ship) return Formatting:format_ship_type(ship:type) end

function ShipInfoKai:image(ship) return Formatting:format_image{ship:card} end

function ShipInfoKai:hp(ship) local hp = Formatting:format_stat(ship:hp) local hp_max = ship:hp_max if hp_max then return Formatting:tooltip(hp, format{self._kekkon_max_template, value = Formatting:format_stat(hp_max)}) end return hp end

function ShipInfoKai:firepower(ship) return Formatting:format_stat_with_max(ship:firepower, ship:firepower_max) end

function ShipInfoKai:armor(ship) return Formatting:format_stat_with_max(ship:armor, ship:armor_max) end

function ShipInfoKai:torpedo(ship) return Formatting:format_stat_with_max(ship:torpedo, ship:torpedo_max) end

function ShipInfoKai:evasion(ship) return Formatting:format_stat_with_max(ship:evasion, ship:evasion_max) end

function ShipInfoKai:aa(ship) return Formatting:format_stat_with_max(ship:aa, ship:aa_max) end

function ShipInfoKai:aircraft(ship) return Formatting:format_stat(ship:total_space) end

function ShipInfoKai:asw(ship) return Formatting:format_stat_with_max(ship:asw, ship:asw_max) end

function ShipInfoKai:speed(ship) return Formatting:format_speed(ship:speed) end

function ShipInfoKai:los(ship) return Formatting:format_stat_with_max(ship:los, ship:los_max) end

function ShipInfoKai:range(ship) return Formatting:format_range(ship:range) end

function ShipInfoKai:luck(ship) return Formatting:format_stat_with_max(ship:luck, ship:luck_max) end

function ShipInfoKai:build_remodel_header(ship) return ship:remodel_level and self._remodel_level or self._build_time end

function ShipInfoKai:build_remodel_info(ship) local remodel_level = ship:remodel_level if remodel_level then return Formatting:format_remodel_level_and_cost(remodel_level, ship:remodel_cost, ship:remodel_blueprint) else local buildable = ship:buildable local buildable_lsc = ship:buildable_lsc if buildable or buildable_lsc then local buildable_methods = {} if buildable then table.insert(buildable_methods, self._normal_construction) end if buildable_lsc then table.insert(buildable_methods, self._large_ship_construction) end return Formatting:format_stat_with_max(Formatting:seconds_to_hms(ship:build_time * 60), table.concat(buildable_methods, ", ")) else return self._unbuildable end end end

function ShipInfoKai:slots(ship) return Formatting:format_stat(ship:slots) end

function ShipInfoKai:slot_details(ship) local slots = {} local num_of_slots = ship:slots local slots_to_show if num_of_slots then slots_to_show = math.max(self._default_slot_num, num_of_slots) else slots_to_show = self._default_slot_num end for i = 1, slots_to_show do		local equipment, size, icon, color, equipment_type if num_of_slots and i > num_of_slots then equipment, size, icon, color, equipment_type = "- Locked -", "-", "", 0, false else equipment, size = ship:slot(i) if equipment then icon = equipment:icon color = equipment:back equipment_type = equipment:type equipment = Formatting:format_link(equipment:link) else icon = false color = 0 equipment = equipment == false and "- Unequipped -" or Formatting:format_stat(equipment) equipment_type = false end icon = Formatting:format_image{Formatting:format_equipment_icon(icon), caption = Formatting:format_equipment_type(equipment_type)} end table.insert(slots, format{self._slot_template, icon = icon, equipment = equipment, slot_size = Formatting:format_stat(size), color = Formatting:format_equipment_back(color), extra_style = Formatting:extra_style_background_image(false, color >= 4)}) end return table.concat(slots) end

function ShipInfoKai:consumption(ship) return Formatting:format_stat(ship:fuel), Formatting:format_stat(ship:ammo) end

function ShipInfoKai:modernization(ship) return Formatting:format_modernization_bonuses(ship:modernization) end

function ShipInfoKai:scrap(ship) return Formatting:format_resources(ship:scrap) end

function ShipInfoKai:Infobox(args) local ship = Ship(args.name, args.model) local ship_data_module = Ship:get_module(args.name) local collapsible = args.collapsible local vars = {} local icons = { hp = StatIcons.hp, firepower = StatIcons.firepower, armor = StatIcons.armor, torpedo = StatIcons.torpedo, evasion = StatIcons.evasion, aa = StatIcons.aa, aircraft = StatIcons.aircraft, asw = StatIcons.asw, speed = StatIcons.speed, los = StatIcons.los, range = StatIcons.range, luck = StatIcons.luck, fuel = ResourceIcons.fuel, ammo = ResourceIcons.ammo, }	local labels = {} for k,v in pairs(icons) do		icons[k] = Formatting:format_image{v} labels[k] = Formatting:format_stat_name(k) end vars.table_class = collapsible and "mw-collapsible mw-collapsed" or "" vars.table_id = collapsible and collapsible ~= "true" and ("mw-customcollapsible-" .. collapsible) or "" vars.edit_link = self:edit_link(ship_data_module) vars.rarity = self:rarity(ship) vars.icons = icons vars.labels = labels vars.top_bg_color, vars.top_extra_style = self:bg_color(ship) vars.name = self:name(ship) vars.id = self:id(ship) vars.japanese_name = self:japanese_name(ship) vars.class = self:class(ship) vars.type = self:type(ship) vars.image = self:image(ship) vars.hp = self:hp(ship) vars.firepower = self:firepower(ship) vars.armor = self:armor(ship) vars.torpedo = self:torpedo(ship) vars.evasion = self:evasion(ship) vars.aa = self:aa(ship) vars.aircraft = self:aircraft(ship) vars.asw = self:asw(ship) vars.speed = self:speed(ship) vars.los = self:los(ship) vars.range = self:range(ship) vars.luck = self:luck(ship) vars.fuel, vars.ammo = self:consumption(ship) vars.modernization = self:modernization(ship) vars.scrap = self:scrap(ship) vars.build_remodel_header = self:build_remodel_header(ship) vars.build_remodel_info = self:build_remodel_info(ship) vars.slots = self:slots(ship) vars.slot_details = self:slot_details(ship) return format(self._template, vars) end

return ShipInfoKai