Difference between revisions of "Module:Grid"
Jump to navigation
Jump to search
m (Tank testing) |
(It worked, so I'm refining it a bit.) |
||
(11 intermediate revisions by 2 users not shown) | |||
Line 7: | Line 7: | ||
local iLink = nil | local iLink = nil | ||
local iFill = nil --[[for fluid_cell implementation]] | |||
local iNum= math.floor( string.match(item, ',%s*(%d+)' ) or 0 ) | local iNum= math.floor( string.match(item, ',%s*(%d+)' ) or 0 ) | ||
local iName = string.sub(string.match(item, '.+,') or item..' ', 1, -2) | local iName = string.sub(string.match(item, '.+,') or item..' ', 1, -2) | ||
Line 30: | Line 31: | ||
iLink = string.match(iName, '~(.+)') | iLink = string.match(iName, '~(.+)') | ||
iName = string.match(iName, '(.+)~') | iName = string.match(iName, '(.+)~') | ||
end | |||
if(iName:find("%^")) then | |||
local fhandler = mw.loadData('Module:Grid/FluidHandler') | |||
iFill = string.match(iName, '%^(.+)') | |||
iName = string.match(iName, '(.+)%^') | |||
if fhandler[iFill] then | |||
iFill = fhandler[iFill] --[[rename]] | |||
else --[[invalid fluid, so remove it]] | |||
iFill = nil | |||
end | |||
if fhandler[iName] then | |||
iName = fhandler[iName] --[[rename]] | |||
else --[[invalid container, so remove fluid]] | |||
iFill = nil | |||
end | |||
end | end | ||
Line 37: | Line 54: | ||
if(iLink ~= nil) then paras["link"]=iLink end | if(iLink ~= nil) then paras["link"]=iLink end | ||
if(iFill ~= nil) then paras["fill"]=iFill end | |||
if(iNum > 1 or hasPercentage) then paras["number"]=iNum end | if(iNum > 1 or hasPercentage) then paras["number"]=iNum end | ||
if(hasPercentage) then paras["percent"]="x" end | if(hasPercentage) then paras["percent"]="x" end | ||
Line 122: | Line 140: | ||
:css('height', tostring(height) .. 'px') | :css('height', tostring(height) .. 'px') | ||
:css('clip', 'rect(' .. tostring(up) .. 'px,' .. tostring(width) ..'px,' .. tostring(down) .. 'px,0px)') | :css('clip', 'rect(' .. tostring(up) .. 'px,' .. tostring(width) ..'px,' .. tostring(down) .. 'px,0px)') | ||
:wikitext('[[File:Tank' .. tank .. '.png|' .. tostring(width) .. 'px|link=' .. link .. '|alt=]]') | :attr('title', tank) | ||
:wikitext('[[File:Tank ' .. tank .. '.png|' .. tostring(width) .. 'px|link=' .. link .. '|alt=]]') | |||
return tostring( div ) | return tostring( div ) | ||
end | end | ||
Line 228: | Line 247: | ||
if args.Output == nil then return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} else gridArgs.Output = args.Output end | if args.Output == nil then return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} else gridArgs.Output = args.Output end | ||
local valid = {Drill='Iron', Handle='Iron', Wood='Wooden', Wooden='Wooden'} | local valid = {Drill='Iron', Handle='Iron', Axle='Iron', Wood='Wooden', Wooden='Wooden'} | ||
if valid[args.Output] == nil then | if valid[args.Output] == nil then | ||
return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} | return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} |
Latest revision as of 13:43, 13 December 2016
This module is a WIP (work in progress), but is still being called by {{Grid/Crafting Table}}
, so any changes should be tested to avoid inconvenience.
Related Links[edit]
- Module:Grid/Aliases - list of aliases to automatically fix certain grid tooltips
- Template:Grid - the wiki template that this expands into
The above documentation is transcluded from Module:Grid/doc. (edit | history)
--<syntaxhighlight lang="lua"> local p = {} -- Individual cell function p.grid(item) if (item == nil) then return { } end local iLink = nil local iFill = nil --[[for fluid_cell implementation]] local iNum= math.floor( string.match(item, ',%s*(%d+)' ) or 0 ) local iName = string.sub(string.match(item, '.+,') or item..' ', 1, -2) local tooltip = string.match(item, '%[.+%]') if tooltip ~= nil then iName = string.sub(iName, string.len(tooltip)+1) tooltip = string.sub(tooltip,2,-2) end local hasPercentage = string.match(item, "[%%]") local aliases = mw.loadData('Module:Grid/Aliases') if tooltip == nil then if aliases[iName] then tooltip = aliases[iName] end else if aliases[tooltip] then tooltip = aliases[tooltip] end end if(iName:find("~")) then iLink = string.match(iName, '~(.+)') iName = string.match(iName, '(.+)~') end if(iName:find("%^")) then local fhandler = mw.loadData('Module:Grid/FluidHandler') iFill = string.match(iName, '%^(.+)') iName = string.match(iName, '(.+)%^') if fhandler[iFill] then iFill = fhandler[iFill] --[[rename]] else --[[invalid fluid, so remove it]] iFill = nil end if fhandler[iName] then iName = fhandler[iName] --[[rename]] else --[[invalid container, so remove fluid]] iFill = nil end end paras = { } paras["name"] = iName if(iLink ~= nil) then paras["link"]=iLink end if(iFill ~= nil) then paras["fill"]=iFill end if(iNum > 1 or hasPercentage) then paras["number"]=iNum end if(hasPercentage) then paras["percent"]="x" end if(tooltip ~= nil) then paras["tooltip"]=tooltip end return paras end -- Gets a cell or animated cell function p.cell(f, item) if (item == nil) then return '' end if (item:find(';')) then local text = '<div class=\"animated-grids\">' for frame in mw.text.gsplit( item, '%s*;%s*' ) do text = text .. '<span class=\"animated-grid\">' if frame == 'Blank' or frame == 'blank' then text = text .. '' else text = text .. f:expandTemplate{ title='Grid', args = p.grid(frame) } end text = text .. '</span>' end text = text .. '</div>' return text end return f:expandTemplate{ title='Grid', args = p.grid(item) } end --[[ function p.liquid(f, item) if (item == nil) then return '' end local text = '' for i=1,3,1 do text = text .. f:expandTemplate{ title='Grid', args = p.grid(item) } end return text end --]] function p.tank(f) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local link = args.link or '' local tank = args.tank or '' local left = args.left or '' local width = args.width or '24' local top = tonumber(args.top) or 92 local height = tonumber(args.height) or 94 local max = tonumber(args.max) or 10000 local fill = tonumber(args.fill) or 0 if fill > max then top = top - height up = height down = height * 2 else top = top - ((height/max)*fill) up = (height/max)*fill down = height + ((height/max)*fill) end local div = mw.html.create('div') div :addClass('tooltip') :css('left', left .. 'px') :css('top', tostring(top) .. 'px') :css('position', 'absolute') :css('width', width .. 'px') :css('height', tostring(height) .. 'px') :css('clip', 'rect(' .. tostring(up) .. 'px,' .. tostring(width) ..'px,' .. tostring(down) .. 'px,0px)') :attr('title', tank) :wikitext('[[File:Tank ' .. tank .. '.png|' .. tostring(width) .. 'px|link=' .. link .. '|alt=]]') return tostring( div ) end function p.gc ( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end return p.cell(f, (args[1] or args.name)) end function p.craftingTable( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local gridArgs = { A1=p.cell(f, args.A1), A2=p.cell(f, args.A2), A3=p.cell(f, args.A3), B1=p.cell(f, args.B1), B2=p.cell(f, args.B2), B3=p.cell(f, args.B3), C1=p.cell(f, args.C1), C2=p.cell(f, args.C2), C3=p.cell(f, args.C3), Output=p.cell(f, args.Output), Break=args.Break } return f:expandTemplate{ title='Crafting', args= gridArgs} end function p.furnace( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local gridArgs = { Input=p.cell(f, (args.Input or args.Top)), Fuel=p.cell(f, (args.Fuel or args.Bottom)), Output=p.cell(f, args.Output), Break=args.Break } return f:expandTemplate{ title='Crafting/Furnace', args= gridArgs} end function p.turningNumber(number) if number == '1' then return 22 elseif number == '2' then return 44 elseif number == '3' then return 66 elseif number == '4' then return 88 else return 110 end end function p.turningBarrel(number,t) if t == nil then if number == '1' then return 38 elseif number == '2' then return 46 elseif number == '3' then return 52 elseif number == '4' then return 58 else return 64 end else if number == '1' then return 26 elseif number == '2' then return 20 elseif number == '3' then return 14 elseif number == '4' then return 6 else return 0 end end end function p.turning(f) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local gridArgs = {Output=p.cell(f, args.Output)} if args.float or args.Float then gridArgs.float = args.float or args.Float end if args.nobreak then gridArgs.nobreak = args.nobreak end if args.Output == nil then return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} else gridArgs.Output = args.Output end local valid = {Drill='Iron', Handle='Iron', Axle='Iron', Wood='Wooden', Wooden='Wooden'} if valid[args.Output] == nil then return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} else gridArgs.Type = valid[args.Output] end if gridArgs.Type == 'Wooden' then bounce = 3 else bounce = 5 end gridArgs.top = 70 if args.Layout ~= nil and args.Layout:find(',') then local layout = mw.text.split(args.Layout,"%g*,%g*") for i = 1, #layout do if tonumber(layout[i]) > bounce then layout[i] = tostring(bounce) elseif tonumber(layout[i]) < 1 then layout[i] = "1" end if tonumber(layout[i]) == 5 then gridArgs.top = 71 end end gridArgs.n1 = p.turningNumber(layout[1]) gridArgs.b1 = p.turningBarrel(layout[1]) gridArgs.b1t = p.turningBarrel(layout[1],1) gridArgs.n2 = p.turningNumber(layout[2]) gridArgs.b2 = p.turningBarrel(layout[2]) gridArgs.b2t = p.turningBarrel(layout[2],1) gridArgs.n3 = p.turningNumber(layout[3] or bounce) gridArgs.b3 = p.turningBarrel(layout[3] or bounce) gridArgs.b3t = p.turningBarrel((layout[3] or bounce),1) gridArgs.n4 = p.turningNumber(layout[4] or bounce) gridArgs.b4 = p.turningBarrel(layout[4] or bounce) gridArgs.b4t = p.turningBarrel((layout[4] or bounce),1) gridArgs.n5 = p.turningNumber(layout[5] or bounce) gridArgs.b5 = p.turningBarrel(layout[5] or bounce) gridArgs.b5t = p.turningBarrel((layout[5] or bounce),1) else barrelbounce = p.turningBarrel(bounce) barreltbounce = p.turningBarrel(bounce,1) bounce = p.turningNumber(bounce) gridArgs.n1 = bounce gridArgs.b1 = barrelbounce gridArgs.b1t = barreltbounce gridArgs.n2 = bounce gridArgs.b2 = barrelbounce gridArgs.b2t = barreltbounce gridArgs.n3 = bounce gridArgs.b3 = barrelbounce gridArgs.b3t = barreltbounce gridArgs.n4 = bounce gridArgs.b4 = barrelbounce gridArgs.b4t = barreltbounce gridArgs.n5 = bounce gridArgs.b5 = barrelbounce gridArgs.b5t = barreltbounce end return f:expandTemplate{title='Grid/Turning Table/Return', args=gridArgs} end return p --</syntaxhighlight>