Module:EnemyShipInfoKai

Revision as of 00:50, 7 June 2015 by com>Ckwng (Capabilities)

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

local EnemyShip = require('Module:EnemyShip')
local ShipCapabilities = require('Module:ShipCapabilities')
local ShipInfoKai = require('Module:ShipInfoKai')
local Formatting = require('Module:Formatting')

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

local EnemyShipInfoKai = ShipInfoKai{
	_template = [[{|class="${table_class}" id="${table_id}" style="border: 1px solid darkgray; width: 320px;"
|-
| colspan="6" style="position: relative; text-align: center; padding: 1px 40px; background-color: ${top_bg_color};${top_extra_style}" | <div style="position: absolute; right: 5px;">${edit_link}</div>
<p><span style="font-size:20px; text-shadow: ${text_shadow}">'''${name}'''</span>${localized_name}</p>
<div style="font-size:15px">'''No.${id} ${japanese_name}${nick}'''</div>
<p>'''${class} ${type}'''</p>
|- style="background-color: whitesmoke;"
| align=center colspan="6" | ${image}
|-
| colspan="6" style="text-align: center; background-color: LightSkyBlue;"|'''Statistics'''
|- style="background-color: whitesmoke;"
| 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}'''
|- style="background-color: whitesmoke;"
| 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}'''
|- style="background-color: whitesmoke;"
| 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}'''
|- style="background-color: whitesmoke;"
| 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}'''
|- style="background-color: whitesmoke;"
| 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}'''
|- style="background-color: whitesmoke;"
| 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="5" style="text-align: center; background-color: LightSkyBlue;"| '''Air Power'''
| style="text-align: center; background-color: LightSkyBlue; width: 50px;" | '''Slots'''
|-  style="background-color: whitesmoke;"
| colspan="5" style="text-align: center;"| ${air_power}
| align=center style="width: 50px;" | ${slots}
|-
| colspan="5" style="text-align: center; background-color: LightSkyBlue;"| '''Equipment'''
| style="text-align: center; background-color: LightSkyBlue; width: 50px;" | '''Space'''
${slot_details}|-
| colspan="6" style="text-align: center; padding: 0px;" | <div class="mw-collapsible mw-collapsed">
<div style="background-color: lightskyblue; text-align: center; margin: 0px;">'''Extra Statistics'''</div>
<div class="mw-collapsible-content">
<div style="text-align: left; display: ${opening_airstrike_display}; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; display: flex; align-items: center;">'''${icons.aircraft} Opening Airstrike'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${opening_airstrike}'''</div>
</div>
<div style="text-align: left; display: ${opening_torpedo_display}; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; display: flex; align-items: center;">'''${icons.torpedo} Opening Torpedo'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${opening_torpedo}'''</div>
</div>
<div style="text-align: left; display: flex; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; color: dodgerblue; display: flex; align-items: center;">'''${icons.firepower} Day Battle'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${day_battle}'''</div>
</div>
<div style="text-align: left; display: flex; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; color: forestgreen; display: flex; align-items: center;">'''${icons.firepower} Artillery Spotting'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${artillery_spotting}'''</div>
</div>
<div style="text-align: left; display: ${closing_torpedo_display}; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; display: flex; align-items: center;">'''${icons.torpedo} Closing Torpedo'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${closing_torpedo}'''</div>
</div>
<div style="text-align: left; display: flex; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; display: flex; align-items: center;">'''${icons.asw} ASW Attack'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${asw_attack}'''</div>
</div>
<div style="text-align: left; display: flex; margin: 2px 0px;">
<div style="margin-right: 1px; flex-shrink: 0; flex-basis: 140px; background-color: whitesmoke; color: midnightblue; display: flex; align-items: center;">'''${icons.firepower}${icons.torpedo} Night Battle'''</div>
<div style="margin-left: 1px; flex-grow: 1; background-color: whitesmoke; display: flex; align-items: center;">'''${night_battle}'''</div>
</div>
</div>
</div>
|}]],
	_abyssal_class = "Abyssal",
	_common_background_color = "darkgrey",
	_background_color = "grey",
	_rare_background_color = "#B04040",
	_rare_background_image = "background-image: linear-gradient(to bottom, #804040, #B04040 80%, #C04040);",
	_link_color = "black",
	_text_shadow_template = "0 0 ${radius} ${color}",
	_text_shadows = {
		"0.1em",
		"0.3em",
		"0.6em",
		"0.9em",
	},
	_basic_glow_colors = {
		"#a0f6d9",
		"#8becd5",
	},
	_kai_glow_colors = {
		"darkturquoise",
		"dodgerblue",
	},
	_late_model_basic_glow_colors = {
		"#e6e6e6",
		"#e6e6e6",
	},
	_late_model_glow_colors = {
		"#8becd5",
		"#e6e6e6",
		"#e6e6e6",
	},
	_boss_glow_colors = {
		"floralwhite",
		"floralwhite",
	},
	_link_color_template = [[<span style="color: ${color};">${text}</span>]],
	_cg_size = "218x300px",
	_display_flex = "flex",
	_display_none = "none",
}

function EnemyShipInfoKai:bg_color()
	local rarity = self._ship:rarity()
	local bg_color
	local extra_style = ""
	if rarity then
		if rarity >= 4 and rarity <= 7 then
			bg_color = self._background_color
		elseif rarity < 4 then
			bg_color = self._common_background_color
		else
			bg_color = self._rare_background_color
			extra_style = self._rare_background_image
		end
	else
		bg_color = self._common_background_color
	end
	local back = self._ship:back()
	local back_color = Formatting:format_ship_back(back)
	local glow_colors = {}
	if back then
		if back == -1 then
			glow_colors = self._basic_glow_colors
		elseif back > -7 and back < -3 then
			glow_colors = self._kai_glow_colors
		elseif back > -10 and back < -6 then
			glow_colors = (back == -7) and self._late_model_basic_glow_colors or self._late_model_glow_colors
		elseif back < -9 then
			glow_colors = self._boss_glow_colors
		end
	end
	local text_shadows = {}
	for index, radius in ipairs(self._text_shadows) do
		local color = back_color
		if index <= #glow_colors then
				color = glow_colors[index]
		end
		table.insert(text_shadows, format{self._text_shadow_template, radius = radius, color = color})
	end
	self._vars.top_bg_color, self._vars.text_shadow, self._vars.top_extra_style = bg_color, table.concat(text_shadows, ", "), extra_style
end

function EnemyShipInfoKai:name()
	local link, text, section = self._ship:link()
	text = format{self._link_color_template, color = self._link_color, text = text or link}
	self._vars.name = Formatting:format_link(link, text, section)
end

function EnemyShipInfoKai:id()
	self._vars.id = Formatting:format_stat(self._ship:id())
end

function EnemyShipInfoKai:class()
	self._vars.class = self._abyssal_class
end

function EnemyShipInfoKai:type()
	local ship_type = Formatting:format_ship_type(self._ship:type())
	if self._ship:is_installation() then
		ship_type = ship_type .. " (Installation)"
	end
	self._vars.type = ship_type
end

function EnemyShipInfoKai:image()
	self._vars.image = Formatting:format_image{self._ship:cg(), size = self._cg_size}
end

function EnemyShipInfoKai:firepower()
	self._vars.firepower = Formatting:format_stat(self._ship:firepower())
end

function EnemyShipInfoKai:armor()
	self._vars.armor = Formatting:format_stat(self._ship:armor())
end

function EnemyShipInfoKai:torpedo()
	self._vars.torpedo = Formatting:format_stat(self._ship:torpedo())
end

function EnemyShipInfoKai:evasion()
	local evasion
	local override = self._args.evasion
	local overridden = false
	if override and override ~= "auto" then
		evasion = override
		overridden = true
	else
		evasion = self._ship:evasion()
	end
	local result = Formatting:format_stat(evasion)
	if overridden then
		result = result .. self._overridden_category_template
	end
	self._vars.evasion = result
end

function EnemyShipInfoKai:aa()
	self._vars.aa = Formatting:format_stat(self._ship:aa(), self._ship:aa_max())
end

function EnemyShipInfoKai:asw()
	local asw
	local overridden = false
	local override = self._args.asw
	if override and override ~= "auto" then
		asw = override
		overridden = true
	else
		asw = self._ship:asw()
	end
	local result = Formatting:format_stat(asw)
	if overridden then
		result = result .. self._overridden_category_template
	end
	self._vars.asw = result
end

function EnemyShipInfoKai:los()
	local los
	local override = self._args.los
	local overridden = false
	if override and override ~= "auto" then
		los = override
		overridden = true
	else
		los = self._ship:los()
	end
	local result = Formatting:format_stat(los)
	if overridden then
		result = result .. self._overridden_category_template
	end
	self._vars.los = result
end

function EnemyShipInfoKai:luck()
	self._vars.luck = Formatting:format_stat(self._ship:luck())
end

function EnemyShipInfoKai:air_power()
	self._vars.air_power = Formatting:format_stat(self._ship:air_power())
end

function EnemyShipInfoKai:capabilities()
	local capabilities = ShipCapabilities{ship = self._ship}
	local opening_airstrike = capabilities:opening_airstrike()
	local opening_torpedo = capabilities:opening_torpedo()
	local day_battle = capabilities:day_battle()
	local artillery_spotting = capabilities:artillery_spotting()
	local closing_torpedo = capabilities:closing_torpedo()
	local asw_attack = capabilities:asw_attack()
	local night_battle = capabilities:night_battle()
	self._vars.opening_airstrike_display, self._vars.opening_airstrike = opening_airstrike and self._display_flex or self._display_none, capabilities:format_opening_airstrike(opening_airstrike)
	self._vars.opening_torpedo_display, self._vars.opening_torpedo = opening_torpedo and self._display_flex or self._display_none, capabilities:format_opening_torpedo(opening_torpedo)
	self._vars.day_battle = capabilities:format_day_battle(day_battle)
	self._vars.artillery_spotting = capabilities:format_artillery_spotting(artillery_spotting)
	self._vars.closing_torpedo_display, self._vars.closing_torpedo = closing_torpedo and self._display_flex or self._display_none, capabilities:format_closing_torpedo(closing_torpedo)
	self._vars.asw_attack = capabilities:format_asw_attack(asw_attack)
	self._vars.night_battle = capabilities:format_night_battle(night_battle)
end

function EnemyShipInfoKai:create_item()
	self._ship = EnemyShip(self._args.name, self._args.model)
end

function EnemyShipInfoKai:add_fields()
	table.insert(self._fields, "air_power")
	table.insert(self._fields, "capabilities")
end

return EnemyShipInfoKai