Module:ShipData

Revision as of 14:29, 16 February 2015 by com>Ckwng (add reading)

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

local Equipment = require('Module:Equipment')
local ShipClass = require('Module:ShipClass')

local BaseData = require("Module:BaseData")
local ShipData = BaseData()

function ShipData:name()
	if self._suffix then
		return self:base_name() .. " " .. self._suffix
	else
		return self:base_name()
	end
end

function ShipData:base_name()
	return self._name
end

function ShipData:link()
	if self._suffix then
		return self:base_name(), self:name()
	else
		return self:name()
	end
end

function ShipData:japanese_name()
	return self._japanese_name
end

function ShipData:reading()
	return self._reading
end

function ShipData:id()
	return self._id
end

function ShipData:true_id()
	return self._true_id
end

function ShipData:rarity()
	return self._rarity
end

function ShipData:class()
	return self._class
end

function ShipData:type()
	return self._type
end

function ShipData:card()
	return self._card
end

function ShipData:hp()
	return self._hp
end

function ShipData:firepower()
	return self._firepower
end

function ShipData:firepower_max()
	return self._firepower_max
end

function ShipData:torpedo()
	return self._torpedo
end

function ShipData:torpedo_max()
	return self._torpedo_max
end

function ShipData:aa()
	return self._aa
end

function ShipData:aa_max()
	return self._aa_max
end

function ShipData:armor()
	return self._armor
end

function ShipData:armor_max()
	return self._armor_max
end

function ShipData:asw()
	return self._asw
end

function ShipData:asw_max()
	return self._asw_max
end

function ShipData:evasion()
	return self._evasion
end

function ShipData:evasion_max()
	return self._evasion_max
end

function ShipData:los()
	return self._los
end

function ShipData:los_max()
	return self._los_max
end

function ShipData:luck()
	return self._luck
end

function ShipData:luck_max()
	return self._luck_max
end

function ShipData:buildable()
	return self._buildable
end

function ShipData:build_time()
	return self._build_time
end

function ShipData:remodel_level()
	return self._remodel_level
end

function ShipData:remodel_cost()
	return {ammo = self._remodel_ammo, steel = self._remodel_steel}
end

function ShipData:remodel_blueprint()
	return self._remodel_blueprint
end

function ShipData:fuel()
	return self._fuel
end

function ShipData:ammo(raw)
	return self._ammo
end

function ShipData:slot(slot)
	local equipment_slot = self._equipment[slot]
	return equipment_slot.equipment, equipment_slot.size
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 = nil
			break
		elseif size == false then
		else
			total_space = total_space + size
		end
	end
	return total_space
end

function ShipData:speed()
	return self._speed
end

function ShipData:range()
	return self._range
end

function ShipData:create(ship)
	ship = ship or {}
	if ship._class then
		ship._class = ShipClass(ship._class)
	end
	if not ship._equipment then
		ship._equipment = {}
	end
	for _, slot in ipairs(ship._equipment) do
		if slot.equipment then
			slot.equipment = Equipment(slot.equipment)
		end
	end
	setmetatable(ship, ship)
	ship.__index = self
	return ship
end

ShipData.__call = ShipData.create

return ShipData