ATTENTION! The process of updating WiKi to version Eco 10.x has begun. Those wishing to participate can find out more Information on our ECO Contribution Wiki Discord.
From April 26 to May 12, errors may occur in the Wiki, as we will be carrying out a major update to the information processing modules.

Module:Infobox Animal/sandbox

From Eco - English Wiki
Revision as of 21:06, 9 April 2022 by Demian (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Infobox Animal/sandbox/doc

local p = {}
local Utils = require("Module:Utils")
local Unit = require("Module:Unit")
local AnimalUtils = require("Module:UtilsAnimalTables")

-- Build an Animal Infobox
function animalBox( args, animalData )
    -- check that all necessary arguments are passed correctly
    assert(not Utils.isEmpty(args.name), 'Member \'name\' must be specified for an animal in Module:AnimalData.')
    
    local animal = args.name
    local animalTable = animalData.animals[animal]

    --Check Passes
    assert(animalTable ~= nil, mw.ustring.format('Animal \'%s\' could not be found in Module:AnimalData.', animal))

    local animalEN = animalTable.untranslated
    local animalimagename = string.gsub(animalEN, ' ', '')
    
    local subheaderClass = '|- class=\"subheader\" \n'
    local wideColumnClass = 'class=\"value-column wide-column\"'
    
    -- string used to build the infobox
    local infobox = '{| class=\"infobox animal-infobox\"\n'
    -- name of the animal
    infobox = infobox .. '|- class=\"animal-name\"\n| colspan=\"2\" | ' .. animal .. '\n'
        
    -- Water, Flying or Land Animal
    if animalTable.isSwimming == 'Swimming' then
        infobox = infobox .. '|- class=\"animal-type swimming\"\n| colspan=\"2\" | Water Animal[[Category:Animals]]\n'
    elseif animalTable.isFlying == 'Flying' then
        infobox = infobox .. '|- class=\"animal-type flying\"\n| colspan=\"2\" | Flying Animal[[Category:Animals]]\n'
    else 
        infobox = infobox .. '|- class=\"animal-type land\"\n| colspan=\"2\" | Land Animal[[Category:Animals]]\n'     
    end    

    -- Animals Icon Image
    local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. animalimagename .. '_Animal.png|[[Category:Pages_with_missing_animal]]'
    if mw.title.makeTitle('File', animalimagename .. '_Animal.png').file.exists then
        image = animalimagename .. '_Animal.png'
    elseif mw.title.makeTitle('File', animalimagename .. '_Animal.jpg').file.exists then
        image = animalimagename .. '_Animal.jpg'
    end
    
    infobox = infobox .. '|- class=\"animal-image\"\n| colspan=\"2\" | [[File:' .. image .. '|center|frameless|250x250px]]\n'
    
    -- 'General' section header
    infobox = infobox .. subheaderClass .. '| colspan=\"2\" | General\n'

    -- Health
    if animalTable.health ~= nil then
        infobox = infobox .. '|-\n| Health:\n|' .. animalTable.health .. '\n'
    end    
    
    -- Idle Speed
    if animalTable.wanderingSpeed ~= nil then
        infobox = infobox .. '|-\n| Idle Speed:\n|' .. Unit._unit(animalTable.wanderingSpeed, 'm/s') .. '\n'
    end        

    -- Eats
    if animalTable.foodSources ~= nil then
        -- 12em seems to be enough for the other column to scale up to fill the remaining space.
        -- With this the longest line "Attack Damage:" fits on one line.
        infobox = infobox .. '|-\n| Eats:\n|' .. wideColumnClass .. '| ' .. AnimalUtils.formatFoodSources(animalTable.foodSources) .. '\n'
    end    
    
    -- Climbing
    if animalTable.climbHeight ~= nil then
        infobox = infobox .. '|-\n| Climb Height:\n|' .. Unit._unit(animalTable.climbHeight, 'm') .. '\n'
    end    
    
    -- Carbon Released
    if animalTable.carbonRelease ~= nil then
        infobox = infobox .. '|-\n| Carbon Released:\n|' .. Unit._unit(animalTable.carbonRelease, 'ppm') .. '\n'
    end    
    
    -- 'Hunting Information' section header
    infobox = infobox .. subheaderClass .. '| colspan=\"2\" | Hunting\n'    

    -- Harvest
    if animalTable.resourceItem ~= nil then
        infobox = infobox .. '|-\n| Harvest Item:\n|' .. animalTable.resourceItem .. '\n'
    end    
    
    -- Flees
    infobox = infobox .. '|-\n| Flees:\n|' .. Utils.formatNilToYesNo(animalTable.flees) .. '\n'

    -- Animals Fear
    if animalTable.fearFactor ~= nil then
        infobox = infobox .. '|-\n| [[Fear Factor]]:\n|' .. animalTable.fearFactor .. '\n'
    end
    
    -- Running Speed
    if animalTable.speed ~= nil then
        infobox = infobox .. '|-\n| Flee Speed:\n|' .. Unit._unit(animalTable.speed, 'm/s') .. '\n'
    end        

    -- Attack Chance
    if animalTable.chanceToAttack ~= nil then
        infobox = infobox .. '|-\n| Attack Chance:\n|' .. (animalTable.chanceToAttack * 100) .. ' % \n'
    end
    
    -- Attack Damage
    if animalTable.damage ~= nil then
        infobox = infobox .. '|-\n| Attack Damage:\n|' .. animalTable.damage .. '\n'
    end
    
    -- Detect Range
    if animalTable.detectRange ~= nil then
        infobox = infobox .. '|-\n| Detect Range:\n|' .. Unit._unit(animalTable.detectRange, 'm') .. '\n'
    end

    -- Attack Range
    if animalTable.attackRange ~= nil then
        infobox = infobox .. '|-\n| Attack Range:\n|' .. Unit._unit(animalTable.attackRange, 'm') .. '\n'
    end        
    
    infobox = infobox .. '|}'
    
    return infobox
end

-- Main entry point for the Module
function p.AnimalMain(frame)
    -- get args from the Template
    local args = Utils.normaliseArgs(frame)
    
    -- get animal data
    local animalData = require( 'Module:AnimalData' )
    
    return animalBox( args, animalData )
end

return p