local lk = love.keyboard local lm = love.mouse local inputs = {} local keyEvents = {} local mouseEvents = {} ---@param triggers table pair like this {type, keycode/name} function register_input(name, triggers) inputs[name] = triggers end function input_direction(left, right, up, down) return bton(is_input_pressed(right)) - bton(is_input_pressed(left)), bton(is_input_pressed(down)) - bton(is_input_pressed(up)) end function is_input_just_pressed(name) local inp = inputs[name] local type local code for _, trig in ipairs(inp) do type = trig[1] code = trig[2] if type == "mouse" then if mouseEvents[code] == "Pressed" then return true end end if type == "key" then if keyEvents[code] == "Pressed" then return true end end end end function is_input_just_released(name) local inp = inputs[name] local type local code for _, trig in ipairs(inp) do type = trig[1] code = trig[2] if type == "mouse" then if mouseEvents[code] == "Released" then return true end end if type == "key" then if keyEvents[code] == "Released" then return true end end end end function is_input_pressed(name) local inp = inputs[name] local type local code for _, trig in ipairs(inp) do type = trig[1] code = trig[2] if type == "mouse" then if lm.isDown(code) then return true end end if type == "key" then if lk.isDown(code) then return true end end end end function love.keypressed(key) keyEvents[key] = "Pressed" end function love.keyreleased(key) keyEvents[key] = "Released" end function love.mousepressed(_, _, btn) mouseEvents[btn] = "Pressed" local sx, sy = love.mouse.getPosition() --get_mouse_pos() im.mousepressed(sx, sy, btn) end function love.mousereleased(_, _, btn) mouseEvents[btn] = "Released" local sx, sy = love.mouse.getPosition() --get_mouse_pos() im.mousereleased(sx, sy, btn) end function love.mousemoved(_, _, dx, dy) local sx, sy = love.mouse.getPosition() --get_mouse_pos() -- local scrw, scrh = love.graphics.getDimensions() -- local rdx, rdy = dx / scrw * SCR_WIDTH, dy / scrh * SCR_HEIGHT im.mousemoved(sx, sy, dx, dy) end function love.wheelmoved(...) im.wheelmoved(...) end function get_mouse_pos() local scrw, scrh = love.graphics.getDimensions() local offset_x = (scrw - SCR_WIDTH * WindowScale) / 2 local offset_y = (scrh - SCR_HEIGHT * WindowScale) / 2 return (lm.getX() - offset_x) / WindowScale, (lm.getY() - offset_y) / WindowScale end function input_step() for key in pairs(keyEvents) do keyEvents[key] = nil end for key in pairs(mouseEvents) do mouseEvents[key] = nil end end