Module:Recipe

--	This module standardizes the display of crafting recipes	and makes it easy to display a specified item's recipe	or all recipes that use a specified ingredient.	Thanks to User:BryghtShadow for helping out with the loops! --

-- local p = {} local dataSN = mw.loadData('Module:Recipe/SN') local dataBZ = mw.loadData('Module:Recipe/BZ') local getArgs = require('Dev:Arguments').getArgs local width = 50 local widthBig = 75

function p.getItemID(id, data) -- removing disambiguations from pagenames id = string.gsub(id, " %(Subnautica%)", "") id = string.gsub(id, " %(Below Zero%)", "") -- if item ID is provided directly... if data[id] then return id	end -- ...otherwise try to find by item name for k, v in pairs(data) do		if v.name == id then -- item found return k		end end return nil -- Could not find item end

function p.createIcon(item, quantity, data, mid) local iconOut = "" local iconWidth = width if not mid then iconWidth = widthBig end local iconHeight = iconWidth local iconOffset = 0 local name = data[item].name local image = data[item].image local iconBG if not image then image = name .. " Icon.png" if data[item].icon then local iconBGSize = data[item].icon.size or "1x1" local iconBGType = data[item].icon.bg or "default" iconBG = iconBGSize .. " " .. iconBGType if iconBGSize == "1x2" then iconHeight = iconWidth * 2 elseif iconBGSize == "3x2" then iconHeight = (iconWidth / 3) * 2 elseif iconBGSize == "2x3" then iconHeight = (iconWidth / 2) * 3 end iconOffset = math.max(0, ((iconHeight - iconWidth) / 2)) else iconBG = "1x1 default" end end iconOut = "" if iconBG then iconOut = iconOut .. " " end iconOut = iconOut .. "  ×0 " if quantity > 1 then iconOut = iconOut .. "×" .. quantity .. " "	end return iconOut .. " " end

function p.createRecipe(frame, data) local args = getArgs(frame) local output = " " local arrow = "  ×0 " -- First, get the ID of the product item provided by template; pagename used by default local id = args[1] or mw.title.getCurrentTitle.text local itemID = p.getItemID(id, data) if not itemID then error("Could not find recipe for item '" .. id .. "'") end -- Item is found, start processing it	if data[itemID].original then -- If the item is made as part of a different item's recipe error ("No standalone recipe for item '" .. itemID .. "' (use '" .. data[itemID].original .. "' instead)") else if data[itemID].recipe and data[itemID].machine then -- Recipe is found, start creating the output output = output .. "" local machineID = data[itemID].machine if not data[machineID] then error ("Invalid machine listed in recipe for item '" .. itemID .. "'") end local iconMachine = p.createIcon(machineID, 0, data, false) output = output .. iconMachine .. " "			output = output .. arrow .. "" for i,v in ipairs(data[itemID].recipe) do				local icon = p.createIcon(v[1], v[2], data, true) output = output .. icon end output = output .. " "			output = output .. arrow .. "" local outNum = data[itemID].quantity or 1 local iconProduct = p.createIcon(itemID, outNum, data, false) output = output .. iconProduct if data[itemID].additional then local addOut = data[itemID].additional local addIcon for i,v in ipairs(addOut) do				   addIcon = p.createIcon(v[1], v[2], data, false) output = output .. addIcon end end output = output .. " "			return output .. " "		else -- If there is no recipe for the item error ("Cannot craft item '" .. itemID .. "' (use Template:Uses instead)") end end end

function p.SN(frame) return p.createRecipe(frame, dataSN) end

function p.BZ(frame) return p.createRecipe(frame, dataBZ) end

return p --