local world = require("world") ---@type KeyState local keyState = {} local keyInputSystem = world:filteredSystem("keyInput", { canReceiveKeys = T.marker }, function(e, _, system) e.keyState = keyState system.world:addEntity(e) end) function keyInputSystem:preProcess() if #self.entities == 0 then return end end function love.keypressed(key, _, _) keyState[key] = true end function ClearKeyState() for key in pairs(keyState) do keyState[key] = nil end end local mouse = world:filteredSystem("mouse", { mouseKeyPress = { position = T.XyPair, key = T.number } }) function MouseJustPressed(key, clear) clear = clear ~= nil and clear or true for _, event in pairs(mouse.entities) do if event.mouseKeyPress and event.mouseKeyPress.key == key then if clear then event.mouseKeyPress = nil world:removeEntity(event) end return true end end return false end local mouseX, mouseY = -9999, -9999 function love.mousemoved(x, y) mouseX, mouseY = x, y end function love.mousepressed(x, y, key) world:addEntity({ mouseKeyPress = { position = { x = x, y = y, }, key = key, }, liveForNFrames = 1, }) end