Module:ShipData
Revision as of 09:55, 28 December 2014 by com>Ckwng
Documentation for this module may be created at Module:ShipData/doc
local format = require("Module:StringInterpolation").format
local ResourceIcons = require("Module:ResourceIcons")
local BaseData = require("Module:BaseData")
local ShipData = BaseData()
function ShipData:name(raw)
if self._suffix and not raw then
return self:base_name() .. " " .. self._suffix
else
return self:base_name(raw)
end
end
function ShipData:base_name(raw)
return self:format_stat(self._name, raw)
end
function ShipData:link(raw)
if self._suffix then
return mw.ustring.format(self._aliased_link, self:base_name(), self:name())
else
return mw.ustring.format(self._simple_link, self:name())
end
end
function ShipData:japanese_name(raw)
return self:format_stat(self._japanese_name, raw)
end
function ShipData:id(raw)
return self:format_stat(self._id, raw)
end
function ShipData:true_id(raw)
return self:format_stat(self._true_id, raw)
end
function ShipData:has_true_id()
return self._true_id ~= false
end
function ShipData:rarity(raw)
return self:format_rarity(self._rarity, raw)
end
function ShipData:class(raw)
return self:format_stat(self._class, raw)
end
function ShipData:type(raw)
return self:format_type(self._type, raw)
end
function ShipData:card(raw)
return self:format_image(self._card, nil, raw)
end
function ShipData:hp(raw)
return self:format_stat(self._hp, raw)
end
function ShipData:firepower(raw)
return self:format_stat(self._firepower, raw)
end
function ShipData:firepower_max(raw)
return self:format_stat(self._firepower_max, raw)
end
function ShipData:has_firepower_max()
return self._firepower_max ~= false
end
function ShipData:torpedo(raw)
return self:format_stat(self._torpedo, raw)
end
function ShipData:torpedo_max(raw)
return self:format_stat(self._torpedo_max, raw)
end
function ShipData:has_torpedo_max()
return self._torpedo_max ~= false
end
function ShipData:aa(raw)
return self:format_stat(self._aa, raw)
end
function ShipData:aa_max(raw)
return self:format_stat(self._aa_max, raw)
end
function ShipData:has_aa_max()
return self._aa_max ~= false
end
function ShipData:armor(raw)
return self:format_stat(self._armor, raw)
end
function ShipData:armor_max(raw)
return self:format_stat(self._armor_max, raw)
end
function ShipData:has_armor_max()
return self._armor_max ~= false
end
function ShipData:asw(raw)
return self:format_stat(self._asw, raw)
end
function ShipData:asw_max(raw)
return self:format_stat(self._asw_max, raw)
end
function ShipData:has_asw_max()
return self._asw_max ~= false
end
function ShipData:evasion(raw)
return self:format_stat(self._evasion, raw)
end
function ShipData:evasion_max(raw)
return self:format_stat(self._evasion_max, raw)
end
function ShipData:has_evasion_max()
return self._evasion_max ~= false
end
function ShipData:los(raw)
return self:format_stat(self._los, raw)
end
function ShipData:los_max(raw)
return self:format_stat(self._los_max, raw)
end
function ShipData:has_los_max()
return self._los_max ~= false
end
function ShipData:luck(raw)
return self:format_stat(self._luck, raw)
end
function ShipData:luck_max(raw)
return self:format_stat(self._luck_max, raw)
end
function ShipData:has_luck_max()
return self._luck_max ~= false
end
function ShipData:buildable()
return self._buildable
end
function ShipData:build_time(raw)
if raw then
return self._build_time
elseif self._build_time then
return format("${hours:2}:${minutes:2}:${seconds:2}", self:format_time(self._build_time * 60))
else
return "??"
end
end
function ShipData:remodeled()
return not not self._remodel_level
end
function ShipData:remodel_level(raw)
return self:format_level(self._remodel_level, raw)
end
function ShipData:remodel_cost(raw)
if raw then
return {
ammo = self._remodel_ammo,
steel = self._remodel_steel,
}
else
return mw.ustring.format("%s %d %s %d", self:format_image(ResourceIcons.ammo), self:format_stat(self._remodel_ammo), self:format_image(ResourceIcons.steel), self:format_stat(self._remodel_steel))
end
end
function ShipData:remodel_blueprint(raw)
if raw then
return self._remodel_blueprint
else
return mw.ustring.format("%s %s", self:format_image(ResourceIcons.blueprint, "36px"), self._remodel_blueprint and "✓" or "✗")
end
end
function ShipData:equipment(slot, raw)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return not raw and "- Locked -" or nil
end
local equipment = equipment_slot["equipment"]
if raw then
return equipment
elseif equipment == nil then
return "??"
elseif equipment == false then
return "- Unequipped -"
else
return equipment:link()
end
end
function ShipData:equipment_icon(slot, raw)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return not raw and "" or nil
end
local equipment = equipment_slot["equipment"]
if raw then
return equipment:icon(raw)
elseif equipment == nil then
return "??"
elseif equipment == false then
return self:format_image("Xx_c.png")
else
return equipment:icon()
end
end
function ShipData:equipment_rarity(slot, raw)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return not raw and "" or nil
end
local equipment = equipment_slot["equipment"]
if raw then
return equipment:rarity(raw)
elseif equipment == nil then
return "??"
elseif equipment == false then
return "Unequipped"
else
return equipment:rarity()
end
end
function ShipData:equipment_back(slot)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return 0
end
local equipment = equipment_slot["equipment"]
if not equipment then
return 0
else
return equipment:back()
end
end
function ShipData:slot_size(slot, raw)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return not raw and "" or nil
end
local slot_size = equipment_slot["size"]
if slot_size == nil then
return "??"
elseif slot_size == false then
return "-"
else
return slot_size
end
end
function ShipData:slots()
return #self._equipment
end
function ShipData:total_space()
local total_space = 0
local size
for _, v in ipairs(self._equipment) do
size = v["size"]
if size == nil then
total_space = "??"
break
elseif size == false then
else
total_space = total_space + size
end
end
return total_space
end
function ShipData:speed()
return self:format_speed(self._speed)
end
function ShipData:range()
return self:format_range(self._range)
end
function ShipData:format_level(stat, raw)
return not raw and mw.ustring.format("Level %s", stat) or stat
end
ShipData.format_rarity = ShipData:create_formatter({
[0] = "??",
[1] = "Very Common",
[2] = "Common",
[3] = "Uncommon",
[4] = "Rare",
[5] = "Very Rare",
[6] = "Holo",
[7] = "S Holo",
[8] = "SS Holo",
[-1] = "Abyssal",
[-2] = "Elite",
[-3] = "Flagship",
[-4] = "Kai",
[-5] = "Kai Elite",
[-6] = "Kai Flagship",
[-7] = "Late Model",
float = "Floating Fortress",
demon = "Demon",
princess = "Princess",
war_demon = "War Demon",
war_princess = "War Princess",
})
ShipData.format_type = ShipData:create_formatter({
[0] = "??",
[1] = "Coastal Defence Ship",
[2] = "Destroyer",
[3] = "Light Cruiser",
[4] = "Torpedo Cruiser",
[5] = "Heavy Cruiser",
[6] = "Aviation Cruiser",
[7] = "Light Carrier",
[8] = "Battleship",
[9] = "Battleship",
[10] = "Aviation Battleship",
[11] = "Standard Carrier",
[12] = "Super Dreadnought",
[13] = "Submarine",
[14] = "Aircraft Carrying Submarine",
[15] = "Replenishment Oiler",
[16] = "Seaplane Tender",
[17] = "Amphibious Assault Ship",
[18] = "Armored Carrier",
[19] = "Repair Ship",
[20] = "Submarine Tender",
})
function ShipData:format_time(seconds)
return {
hours = math.floor(seconds / 3600),
minutes = math.floor(seconds / 60) % 60,
seconds = seconds % 60,
}
end
function ShipData:create(ship)
ship = ship or {}
setmetatable(ship, ship)
ship.__index = self
return ship
end
ShipData.__call = ShipData.create
return ShipData