Line 1: |
Line 1: |
− | local EnemyShip = {} | + | local EnemyShip = Ship:extend{ |
− | local ships = {}
| + | _ships = {}, --maintain a separate cache from Ship |
| + | _data_class = false, |
| + | } |
| | | |
− | local EnemyShipData = require('Module:EnemyShipData')
| + | function EnemyShip:_prepareShipData() |
− |
| + | self._data_class = self._data_class or require('Module:EnemyShipData') |
− | function EnemyShip:get(stat, name, model) | |
− | return self:create(name, model)[stat]() | |
− | end
| |
− |
| |
− | function EnemyShip:create(name, model)
| |
− | if name == nil then
| |
− | return EnemyShipData()
| |
− | end
| |
− | if model == nil then
| |
− | model = ""
| |
− | end
| |
− | --check if we already have it
| |
− | if ships[name] and ships[name][model] then
| |
− | return ships[name][model]
| |
− | else
| |
− | --Catch a failed require
| |
− | local success, ship_table = pcall(function () return require(mw.ustring.format('Module:%s', name)) end)
| |
− | --require succeeded
| |
− | if success then
| |
− | ship_table = ship_table[model]
| |
− | if not ship_table then
| |
− | --Instantiate EnemyShipData with what we have
| |
− | ship_table = {_name = name, _suffix = model}
| |
− | end
| |
− | --require failed
| |
− | else
| |
− | --Instantiate EnemyShipData with what we have
| |
− | ship_table = {_name = name, _suffix = model}
| |
− | end
| |
− | local ship = EnemyShipData(ship_table)
| |
− | if not ships[name] then
| |
− | ships[name] = {}
| |
− | end
| |
− | ships[name][model] = ship
| |
− | return ship
| |
− | end
| |
| end | | end |
− |
| + | |
− | function EnemyShip:get_module(name)
| |
− | if name == nil then
| |
− | return nil
| |
− | end
| |
− | return mw.ustring.format('Module:%s', name)
| |
− | end
| |
− |
| |
− | EnemyShip.__call = EnemyShip.create
| |
− | setmetatable(EnemyShip, EnemyShip)
| |
− |
| |
| return EnemyShip | | return EnemyShip |