Module:Abilities/icon

Revision as of 23:27, 23 November 2024 by Sur (talk | contribs) (now uses Module:HeroData/release)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Overview edit

Searches for an icon based on the (English) name of the ability

Usage edit

Template:AbilityIcon

Submodules edit

Abilities - Simple functions. Eg. getting ability name

Abilities/utils - Common internal functions that are shared amongst any Abilities/ modules

Abilities/card - Generates hero ability cards

Abilities/icon - Searches for an icon based on the (English) name of the ability

Abilities/details table (WIP) - Generates details table to show raw ability data


local data = mw.loadJsonData("Data:AbilityCards.json")
local hero_release_module = require('Module:HeroData/release')

local p = {}

--Write's an ability link for a given ability name in english
--Siphon Life --> Abrams#(1)_Siphon_Life
function ability_to_hyperlink(ability_name_to_search)
	if (ability_name_to_search == nil) then return "No ability name provided" end
	local hero_name
	local ability_name
	local hero_status
	
	-- Iterate heros
	for hero_key, hero_data in pairs(data) do
		-- Iterate abilities
		hero_name = hero_data["Name"]
		hero_status = hero_release_module.get_hero_release_status(hero_key)
		if hero_status ~= nil then -- not nil means its either released or in hero labs
			for ability_num, ability_data in pairs(hero_data) do
				if (ability_num ~= "Name") then
					ability_name = ability_data["Name"]
					if (ability_name == ability_name_to_search) then
						-- Ability number and hero found
						-- "Siphon Life" > "Siphon_Life"
						ability_name = ability_name:gsub(" ", "_")
						return hero_name .. "#(" .. ability_num .. ")_" .. ability_name
					end
				end
			end
		end
	end
	
	return nil
end

--Writes an ability's icon from its name
--Shoulder Charge --> [[File:Shoulder Charge.png|link=Abrams#(1)_Shoulder_Charge|size=20px]] [[Abrams...|Shoulder Charge]]
p.write_ability_icon = function(frame)
	local ability_name = frame.args[1]
	local custom_display_text = frame.args[2]
	if (custom_display_text == nil or custom_display_text == "") then custom_display_text = ability_name end
	
	local size = 20
	
	local hyperlink = ability_to_hyperlink(ability_name)
	if (hyperlink == nil) then return "Ability " .. ability_name .. " not found" end
	
	local icon = "[[File:" .. ability_name .. ".png|link=" .. hyperlink .. "|" .. size .. "px]]"
	icon = '<span style="position: relative; bottom: 2px; filter: brightness(0) saturate(100%);">' .. icon .. '</span>'
	
	local link = "[[" .. hyperlink .. "|" .. custom_display_text .. "]]"
	
	return icon .. " " .. link
end

return p