generated from sage/tiny-ecs-love-template
43 lines
1.2 KiB
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)
|