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)