From 0d8bf7522860f095e4c2055078b73ba4488c1807 Mon Sep 17 00:00:00 2001 From: MMaker Date: Sat, 23 Aug 2025 23:17:44 -0400 Subject: [PATCH] Implement joystick, recognize background inputs --- button.lua | 13 +++++++-- main.lua | 81 +++++++++++++++++++++++++++++------------------------- 2 files changed, 54 insertions(+), 40 deletions(-) diff --git a/button.lua b/button.lua index ed22ed3..347a737 100644 --- a/button.lua +++ b/button.lua @@ -10,10 +10,19 @@ function Button:new(x, y, r, b) end function Button:update(dt) - if love.keyboard.isDown(self.b) then + if self.b == "triggerleft" or self.b == "triggerright" then + local axis = joystick:getGamepadAxis(self.b) + if axis > 0.5 then self.press = true - else + else self.press = false + end + else + if joystick:isGamepadDown(self.b) then + self.press = true + else + self.press = false + end end end diff --git a/main.lua b/main.lua index 3643250..d0d202f 100644 --- a/main.lua +++ b/main.lua @@ -1,41 +1,52 @@ function love.load() + -- Recognize background input + local ffi = require("ffi") + ffi.cdef[[ + typedef enum + { + SDL_FALSE = 0, + SDL_TRUE = 1 + } SDL_bool; + + SDL_bool SDL_SetHint(const char *name, const char *value); + ]] + local sdl = ffi.os == "Windows" and ffi.load("SDL2") or ffi.C + sdl.SDL_SetHint("SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS", "1") + local Button = require "button" + + local joysticks = love.joystick.getJoysticks() + joystick = joysticks[1] --movement keys - movement = {} - mL = Button(8, 27, 24, "a") - mD = Button(62, 27, 24, "s") - mR = Button(109, 53, 24, "d") - mU = Button(127, 144, 30, "space") + mL = Button(8, 27, 24, "dpleft") + mD = Button(62, 27, 24, "dpdown") + mR = Button(109, 53, 24, "dpright") + mU = Button(127, 144, 30, "dpup") + movement = {mL, mD, mR, mU} --attack keys - attack = {} - bA = Button(159, 29, 24, "u") - bB = Button(208, 8, 24, "i") - bC = Button(262, 9, 24, "o") - bD = Button(317, 16, 24, "p") - bE = Button(155, 85, 24, "j") - bF = Button(206, 64, 24, "k") - bG = Button(262, 64, 24, "l") - bH = Button(315,72, 24, ";") + bA = Button(159, 29, 24, "x") + bB = Button(208, 8, 24, "y") + bC = Button(262, 9, 24, "rightshoulder") + bD = Button(317, 16, 24, "leftshoulder") + bE = Button(155, 85, 24, "a") + bF = Button(206, 64, 24, "b") + bG = Button(262, 64, 24, "triggerright") + bH = Button(315,72, 24, "triggerleft") + attack = {bA, bB, bC, bD, bE, bF, bG, bH} end function love.update(dt) --movement keys - mL:update(dt) - mD:update(dt) - mR:update(dt) - mU:update(dt) + for _, button in ipairs(movement) do + button:update(dt) + end --attack keys - bA:update(dt) - bB:update(dt) - bC:update(dt) - bD:update(dt) - bE:update(dt) - bF:update(dt) - bG:update(dt) - bH:update(dt) + for _, button in ipairs(attack) do + button:update(dt) + end end function love.draw() @@ -43,18 +54,12 @@ function love.draw() love.graphics.setBackgroundColor(1, 179/255, 102/255) --movement keys - mL:draw() - mD:draw() - mR:draw() - mU:draw() + for _, button in ipairs(movement) do + button:draw() + end --attack keys - bA:draw() - bB:draw() - bC:draw() - bD:draw() - bE:draw() - bF:draw() - bG:draw() - bH:draw() + for _, button in ipairs(attack) do + button:draw() + end end \ No newline at end of file