bvg/systems/upgradeScorer.lua

43 lines
1.2 KiB
Lua

local world = require("world")
local width, height = love.graphics.getWidth(), love.graphics.getHeight()
---@class ScoringTarget
local ScoringTarget = {
slots = Arr({
upgrades = Arr(T.Entity),
}),
score = T.number,
}
local ScoringTrigger = {
mask = T.number,
target = ScoringTarget,
}
--- Probably need a way to access the total so far.
---@param w World
---@param target ScoringTarget
local function addSlotScores(w, target, slotIndex)
local upgrades = target.slots[slotIndex].upgrades
for i, upgrade in ipairs(upgrades) do
if upgrade.flatScore ~= nil then
w:addEntity({
addScore = {
addingScoreTo = target,
scoreToAdd = upgrade.flatScore,
},
})
end
end
end
world:filteredSystem("upgradeScorer", { scoringTrigger = ScoringTrigger }, function(e, _, system)
system.world:removeEntity(e)
local target, mask = e.scoringTrigger.target, e.scoringTrigger.mask
for i, slot in ipairs(target.slots) do
if bit.band(BitAt(i), mask) ~= 0 then
addSlotScores(system.world, target, i)
end
end
end)