55 lines
2.3 KiB
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)
|