Files
External-Item-Descriptions/features/eid_modular_data_modifiers.lua

55 lines
2.3 KiB
Lua

-- Special behavior functions that alter the data of modular descriptions
local function HealthUpCondition(_, descObj)
if not EID.Config["DynamicHealthUps"] then return descObj end
local closestPlayer = EID:ClosestPlayerTo(descObj.Entity)
local playerType = closestPlayer:GetPlayerType()
local heartType = EID.CharacterToHeartType[playerType] or "Red"
return heartType ~= "Red"
end
-- Replaces the data entry defined as the key, with the one defined as the value. If the new data entry exists already, its value gets added to the old one
local healthTypeReplacements = {
Soul = { RedHeart = "SoulHeart", FullHealth = "", HealingRed = "", EmptyHeart = "SoulHeart", RottenHeart = "" },
Black = { RedHeart = "BlackHeart", FullHealth = "", HealingRed = "", EmptyHeart = "BlackHeart", RottenHeart = "" },
-- TODO: Potato Peeler and Abaddon do remove coin hearts in rep+. Maybe hide CoinHeart data, if max is reached?
Coin = { RedHeart = "CoinHeart", HealingRed = "HealingCoin", EmptyHeart = "EmptyCoinHeart", SoulHeart = "", BlackHeart = "" },
None = {
RedHeart = "",
CoinHeart = "",
FullHealth = "",
HealingRed = "",
HealingCoin = "",
SoulHeart = "",
BlackHeart = "",
BoneHeart = "",
EternalHeart = "",
GoldenHeart = "",
RottenHeart = "",
BrokenHeart = "",
EmptyHeart = "",
EmptyCoinHeart = "",
},
}
local function HealthUpCallback(itemDataTable, descObj)
local closestPlayer = EID:ClosestPlayerTo(descObj.Entity)
local playerType = closestPlayer:GetPlayerType()
local heartType = EID.CharacterToHeartType[playerType] or "Red"
if not healthTypeReplacements[heartType] then return itemDataTable end
for oldDataName, newDataName in pairs(healthTypeReplacements[heartType]) do
local oldValue = itemDataTable[oldDataName]
itemDataTable[oldDataName] = nil -- remove old data entry
if oldValue and newDataName ~= "" then
local existingValue = type(itemDataTable[newDataName]) == "number" and tonumber(itemDataTable[newDataName]) or 0
itemDataTable[newDataName] = oldValue + existingValue
end
end
-- TODO: Highlight changes in text with player icon
return itemDataTable
end
EID:addModularDataModifier("HealthToX", HealthUpCondition, HealthUpCallback)