Module:NanaminFleetKai

local getArgs = require('Module:GetArgs')

local Ship = require('Module:Ship') local ShipCardKai = require('Module:ShipCardKai') local Equipment = require('Module:Equipment')

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

local Functions = require('Module:NanaminFunctions')

local NanaminFleetKai = { _rows = {}, _items = {}, _table_start = {|, _table_end = |}, _row_starter = "|-", _added_cell_template = ${content}, _ship_template = ${ship_card}, _equip_template = ${equip_icon}   | style="background-color: ${equip_bg_color}; width: 175px;text-align: center;" |${equip_link}, _equip_icon_bg = "#8DCDEE", _equip_bg = "#E4F3FB", _equip_locked_bg = "#CDDBE2", _extra_cells_bg = "#98D2F0", _blank = "Empty_ship_slot.png", _size = "120x165px", _elos = 0, _fighter_power = 0, _hq_lvl = 0, }

function NanaminFleetKai:process_hq_level self._hq_lvl = tonumber(self._args["hq"] or 0) --Get bracket of 5 self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5 if self._hq_lvl % 5 == 0 then self._hq_lvl = self._hq_lvl + 5 end end

function NanaminFleetKai:process_los(entry) local ship = Ship(entry[1], entry[2]) if ship:los and ship:los_max then local los = math.floor(ship:los + ((ship:los_max - ship:los))) self._elos = los * 1.69 end end

function NanaminFleetKai:process_args(args) local entry = {} for index, item in ipairs(args) do       if item == "-" and #entry > 0 then self:process_los(entry) table.insert(self._items, entry) entry = {} else local processed = Functions.split(item, '/') for _, item in ipairs(processed) do               table.insert(entry, item) end end end table.insert(self._items, entry) end

function NanaminFleetKai:process_equipment(equip, plane_count) local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 } if multiplier[equip:type] ~= nil and equip:los then self._elos = self._elos + (equip:los * multiplier[equip:type]) end local can_fight = { [6] = true, [7] = true, [8] = true, [11] = true } if can_fight[equip:type] then if plane_count and equip:aa then self._fighter_power = self._fighter_power + math.floor(math.sqrt(plane_count) * equip:aa) end end end

function NanaminFleetKai:insert_ship_row(ship) local ship_card if ship and ship:name then ship_card = ShipCardKai:card{ship = ship, size = self._size, link = ship:link, caption = ship:name} else ship_card = Formatting:format_image{self._blank, size = self._size} end table.insert(self._rows, format{self._ship_template,       ship_card = ship_card,    }) end

function NanaminFleetKai:insert_equip_row(ship, entry, slot) local slots = ship and ship:slots or 0 local equip_icon, equip_bg_color, equip_link if slot > slots then equip_icon = "" equip_bg_color = self._equip_locked_bg equip_link = "- Locked -" elseif entry[slot + 3] == nil then equip_icon = "" equip_bg_color = self._equip_locked_bg equip_link = "- Unequipped -" else local equip = Equipment(entry[slot + 3]) self:process_equipment(equip, select(2, ship:slot(slot))) equip_icon = Formatting:format_image{ Formatting:format_equipment_icon(equip:icon), size = "22x22px" } equip_bg_color = self._equip_locked_bg equip_link = Formatting:format_link(equip:link) end table.insert(self._rows, format{self._equip_template,       icon_bg_color = self._equip_icon_bg,        equip_icon = equip_icon,        equip_bg_color = equip_bg_color,        equip_link = equip_link,    }) end

function NanaminFleetKai:build_table for i = 1, #self._items, 2 do       local ship1 = Ship(self._items[i][1], self._items[i][2]) self:insert_ship_row(ship1) self:insert_equip_row(ship1, self._items[i], 1) local ship2 if self._items[i + 1] then ship2 = Ship(self._items[i + 1][1], self._items[i + 1][2]) self:insert_ship_row(ship2) self:insert_equip_row(ship2, self._items[i + 1], 1) else self:insert_ship_row(nil) self:insert_equip_row(nil, nil, 1) end for j = 2, 4 do           table.insert(self._rows, self._row_starter) self:insert_equip_row(ship1, self._items[i], j)           if self._items[i + 1] then self:insert_equip_row(ship2, self._items[i + 1], j)           else self:insert_equip_row(nil, nil, 1) end end table.insert(self._rows, self._row_starter) end end

function NanaminFleetKai:insert_extra(content) table.insert(self._rows, format{self._added_cell_template, content = content, bg_color = self._extra_cells_bg }) end

function NanaminFleetKai:add_extras local elos = string.format("%.2f", self._elos - (self._hq_lvl * 0.61)) local content = "Effective Line of Sight: " .. elos .. " // Fighter Power: " .. tostring(self._fighter_power) table.insert(self._rows, self._row_starter) self:insert_extra(content) content = "Route Taken: " .. (self._args["route"] or "") table.insert(self._rows, self._row_starter) self:insert_extra(content) end

function NanaminFleetKai:Main(args) self._args = args self:process_hq_level self:process_args(args) table.insert(self._rows, self._table_start) self:build_table self:add_extras table.insert(self._rows, self._table_end) return table.concat(self._rows, "\n") end

function NanaminFleetKai.Begin(frame) local args = getArgs{frame = frame:getParent} return NanaminFleetKai:Main(args) end

return NanaminFleetKai