• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Difference between revisions of "Module:EnemyShipListKai"

From Kancolle Wiki
Jump to navigation Jump to search
com>Ckwng
com>Ckwng
Line 99: Line 99:
 
function EnemyShipListKai:equipment(ship)
 
function EnemyShipListKai:equipment(ship)
 
local icons, roles = {}, {}
 
local icons, roles = {}, {}
local sonar
+
local sonar, dc = false, false
local dc
 
  
 
for i = 1, ship:slots_length() do
 
for i = 1, ship:slots_length() do
Line 107: Line 106:
 
icon = equipment:icon()
 
icon = equipment:icon()
 
equipment_type = equipment:type()
 
equipment_type = equipment:type()
 +
if ShipCapabilities:_is_sonar(equipment) then
 +
sonar = true
 +
elseif ShipCapabilities:_is_depth_charge(equipment) then
 +
dc = true
 +
end
 
equipment_link, equipment = Formatting:format_link(equipment:link())
 
equipment_link, equipment = Formatting:format_link(equipment:link())
 
equipment = equipment or equipment_link
 
equipment = equipment or equipment_link
Line 122: Line 126:
 
if ShipCapabilities:_is_submarine(ship) then
 
if ShipCapabilities:_is_submarine(ship) then
 
if ship:opening_torpedo() then
 
if ship:opening_torpedo() then
table.insert(value, self._opening_torpedo_label)
+
table.insert(roles, self._opening_torpedo_label)
 
end
 
end
 
else
 
else
 
if midget_submarine then
 
if midget_submarine then
table.insert(value, self._opening_torpedo_label)
+
table.insert(roles, self._opening_torpedo_label)
 
end
 
end
 
end
 
end
 
if sonar or dc then
 
if sonar or dc then
 
if sonar and dc then
 
if sonar and dc then
table.insert(value, self._high_asw_label)
+
table.insert(roles, self._high_asw_label)
 
else
 
else
table.insert(value, self._asw_label)
+
table.insert(roles, self._asw_label)
 
end
 
end
 
end
 
end
  
return {value = table.concat(values) .. '<br/>' .. table.concat(roles, ", "), bg_color = self._transparent, text_align = self._start_align}
+
return {value = table.concat(icons) .. '<br/>' .. table.concat(roles, ", "), bg_color = self._transparent, text_align = self._start_align}
 
end
 
end
  

Revision as of 09:30, 10 February 2016

Documentation for this module may be created at Module:EnemyShipListKai/doc

local BaseTable = require('Module:BaseTable')
local EnemyShip = require('Module:EnemyShip')
local Formatting = require('Module:Formatting')
local ShipBattleCardKai = require('Module:ShipBattleCardKai')
local ShipCapabilities = require('Module:ShipCapabilities')
local StatIcons = require('Module:StatIcons')

local format = require('Module:StringInterpolation').format

local EnemyShipListKai = BaseTable{
	_header_template = [[! style="min-width: 180px;" | Card
! style="min-width: 75px;" | Name
! Type
! style="width: 30px; text-align: center; vertical-align: middle; background-color: pink;" | ${hp}
! style="width: 30px; text-align: center; vertical-align: middle; background-color: lightcoral;" | ${firepower}
! style="width: 30px; text-align: center; vertical-align: middle; background-color: lightskyblue;" | ${torpedo}
! style="width: 30px; text-align: center; vertical-align: middle; background-color: sandybrown;" | ${aa}
! style="width: 30px; text-align: center; vertical-align: middle; background-color: #9C8FEE;" | ${asw}
! style="width: 30px; text-align: center; vertical-align: middle; background-color: #F2E279;" | ${armor}
! style="width: 30px; text-align: center; vertical-align: middle; background-color: violet;" | ${evasion}
! style="text-align: center; vertical-align: middle;" | Equipment
! style="text-align:left;" | Notes]],
	_columns = {
		"card",
		"name",
		"type",
		"hp",
		"firepower",
		"torpedo",
		"aa",
		"asw",
		"armor",
		"evasion",
		"equipment",
		"notes",
	},
	_cell = [[| style="text-align: ${text_align}; padding:5px 5px 5px 5px; background-color: ${bg_color};" |${value}]],
	_item_class = function(item_key) return EnemyShip(item_key) end,
	_fragment_prefix = "enemyshiplistkai",
	_icon_caption_template = "${equipment} | ${equipment_type}",
	_installation_label = "Installation",
	_asw_label = "ASW",
	_high_asw_label = "High ASW",
}

function EnemyShipListKai:name(ship)
	local name = ship:name()
	local value = {name}
	local japanese_name = ship:japanese_name()
	if japanese_name and name ~= japanese_name then
		table.insert(value, Formatting:format_stat(japanese_name))
	end
	return {value = Formatting:id_span(tostring(ship:api_id() or mw.ustring.lower(mw.ustring.gsub(ship:name(), "%s+"))), self._fragment_prefix, table.concat(value, "<br />")), bg_color = self._transparent, text_align = self._start_align}
end

function EnemyShipListKai:card(ship)
	local value
	local bg_color = Formatting:format_ship_back(ship:back())
	if ship == false then
		value = Formatting:format_image{self._blank, size = self._size}
	else
		value = ShipBattleCardKai:get{ship = ship, size = self._size, link = ship:link(), caption = ship:name()}
	end
	return {value = value, bg_color = bg_color, text_align = self._center_align}
end

function EnemyShipListKai:type(ship)
	return {value = Formatting:format_ship_code(ship:type()), bg_color = self._transparent, text_align = self._start_align}
end

function EnemyShipListKai:firepower(ship)
	return {value = Formatting:format_stat(ship:firepower()), bg_color = "#e6cfcf", text_align = self._center_align}
end

function EnemyShipListKai:torpedo(ship)
	return {value = Formatting:format_stat(ship:torpedo()), bg_color = "#cfdde6", text_align = self._center_align}
end

function EnemyShipListKai:aa(ship)
	return {value = Formatting:format_stat(ship:aa()), bg_color = "#e6d9cf", text_align = self._center_align}
end

function EnemyShipListKai:asw(ship)
	return {value = Formatting:format_stat(ship:asw()), bg_color = "#d2cee6", text_align = self._center_align}
end

function EnemyShipListKai:hp(ship)
	return {value = Formatting:format_stat(ship:hp()), bg_color = "#e6cfd3", text_align = self._center_align}
end

function EnemyShipListKai:armor(ship)
	return {value = Formatting:format_stat(ship:armor()), bg_color = "#e6e3cf", text_align = self._center_align}
end

function EnemyShipListKai:evasion(ship)
	return {value = Formatting:format_stat(ship:evasion()), bg_color = "#e6cee6", text_align = self._center_align}
end

function EnemyShipListKai:equipment(ship)
	local icons, roles = {}, {}
	local sonar, dc = false, false

	for i = 1, ship:slots_length() do
		local equipment, size, estimation, icon, equipment_type, equipment_link = ship:slot(i)
		if equipment then
			icon = equipment:icon()
			equipment_type = equipment:type()
			if ShipCapabilities:_is_sonar(equipment) then
				sonar = true
			elseif ShipCapabilities:_is_depth_charge(equipment) then
				dc = true
			end
			equipment_link, equipment = Formatting:format_link(equipment:link())
			equipment = equipment or equipment_link
		else
			icon = disabled and "" or false
			equipment = equipment == false and (disabled and "- Locked -" or "- Unequipped -") or Formatting:format_stat(equipment)
			equipment_link = false
			equipment_type = false
		end
		if icon ~= "" then
			icon = Formatting:format_image{Formatting:format_equipment_icon(icon), link = equipment_link, caption = format{self._icon_caption_template, equipment_type = Formatting:format_equipment_type(equipment_type), equipment = equipment}}
		end
		table.insert(icons, icon)
	end
	if ShipCapabilities:_is_submarine(ship) then
		if ship:opening_torpedo() then
			table.insert(roles, self._opening_torpedo_label)
		end
	else
		if midget_submarine then
			table.insert(roles, self._opening_torpedo_label)
		end
	end
	if sonar or dc then
		if sonar and dc then
			table.insert(roles, self._high_asw_label)
		else
			table.insert(roles, self._asw_label)
		end
	end

	return {value = table.concat(icons) .. '<br/>' .. table.concat(roles, ", "), bg_color = self._transparent, text_align = self._start_align}
end

function EnemyShipListKai:notes(ship)
	local note = self._notes[ship]
	local back = ship:back()
	local value = {}
	if back < -1 then
		table.insert(value, tostring(mw.html.create('span'):css({color = Formatting:format_ship_back(back)}):tag('b'):wikitext(Formatting:format_ship_rarity(back)):allDone()))
	end
	if ship:is_installation() then
		table.insert(value, tostring(mw.html.create('b'):wikitext(self._installation_label)))
	end
	if note then
		table.insert(value, note.note or "")
	end
	return {value = table.concat(value, "<br/>"), bg_color = self._transparent, text_align = self._start_align}
end

EnemyShipListKai.process_item_key = EnemyShip.process_item_key

EnemyShipListKai.build_rows = EnemyShipListKai.build_rows_breaks_as_empty_rows

function EnemyShipListKai:create_header()
	local header_icons = {
		firepower = StatIcons.firepower, 
		torpedo = StatIcons.torpedo, 
		aa = StatIcons.aa, 
		asw = StatIcons.asw,  
		hp = StatIcons.hp, 
		armor = StatIcons.armor,
		evasion = StatIcons.evasion,
	}
	for key, value in pairs(header_icons) do
		header_icons[key] = Formatting:format_image{value, caption = Formatting:format_stat_name(key)}
	end
	self._header = format(self._header_template, header_icons)
end

function EnemyShipListKai.Invoke(frame)
	local args = require('Module:GetArgs'){frame = frame:getParent()}
	return EnemyShipListKai:Table(args)
end

return EnemyShipListKai