From 33b3a93138a9eee40727e9f56373b434ceab1cef Mon Sep 17 00:00:00 2001 From: Aki Date: Thu, 6 Apr 2017 20:03:17 +0200 Subject: Controller moved to /not/ and cleaned-up a bit. --- controller.lua | 203 --------------------------------------------------------- 1 file changed, 203 deletions(-) delete mode 100644 controller.lua (limited to 'controller.lua') diff --git a/controller.lua b/controller.lua deleted file mode 100644 index f035162..0000000 --- a/controller.lua +++ /dev/null @@ -1,203 +0,0 @@ --- `Controller` --- Module to manage player input. --- It uses `love.keypressed`, `love.keyreleased`, `love.gamepadreleased`, `love.gamepadpressed`, `love.joystickadded`, so be sure not to use them by yourself. --- Rather than that use functions provided by this module: `Controller.controlpressed` and `Controller.controlreleased`. --- For information on additional functions, look below. - --- Namespace -Controller = {} -Controller.sets = {} -Controller.axes = {} -Controller.deadzone = .3 - --- Declared to avoid calling nil. Be sure to define yours after this line is performed. -function Controller.controlpressed(set, action, key) end -function Controller.controlreleased(set, action, key) end - --- Create new controls set. -function Controller.registerSet(left, right, up, down, attack, jump, joystick) - if not Controller.isJoystickUnique(joystick) then return end - local set = {} - set.left = left or "left" - set.right = right or "right" - set.up = up or "up" - set.down = down or "down" - set.attack = attack or "return" - set.jump = jump or "rshift" - set.joystick = joystick - table.insert(Controller.sets, set) - print(set, left, right, up, down, attack, jump, joystick) - return set -end - --- Reset table of controls sets. -function Controller.reset() - local t = {} - Controller.sets = t -end - --- Get table of controls sets. -function Controller.getSets() - return Controller.sets -end - --- Checks if given joystick is unique in current set of Controller sets -function Controller.isJoystickUnique(joystick) - if joystick ~= nil then - for _,set in pairs(Controller.sets) do - if set.joystick == joystick then return false end - end - end - return true -end - --- Tests all sets if they have control assigned to given key and joystick. -function Controller.testSets(key, joystick) - for i,set in pairs(Controller.sets) do - local action = Controller.testControl(set, key, joystick) - if action ~= nil then - return set, action - end - end - return nil, nil -end - --- Tests given set if it has controll assigned to given key and joystick. -function Controller.testControl(set, key, joystick) - -- First test if it is joystick and if it is correct one - if joystick == set.joystick then - if key == set.left then - return "left" - elseif key == set.right then - return "right" - elseif key == set.up then - return "up" - elseif key == set.down then - return "down" - elseif key == set.attack then - return "attack" - elseif key == set.jump then - return "jump" - end - end -end - --- Checks if given action of given set is down -function Controller.isDown(set, action) - if set ~= nil then - if set.joystick == nil then - return love.keyboard.isDown(set[action]) - else - if not Controller.isAxis(set[action]) then - return set.joystick:isGamepadDown(set[action]) - else - return Controller.getAxisState(set.joystick, set[action]) - end - end - end -end - --- Return key name from given axis and value -function Controller.createAxisName(axis, value) - local key = "axis:"..axis - if value == 0 then - key = key.."0" - elseif value > 0 then - key = key.."+" - else - key = key.."-" - end - return key -end - --- Checks if given key is an axis -function Controller.isAxis(key) - if string.find(key, "axis:") then - return true - else - return false - end -end - --- Checks state of key assigned to axis of given joystick -function Controller.getAxisState(joystick, key) - if Controller.axes[joystick] then - local state = Controller.axes[joystick][key] - if state ~= nil then - return state - else - return false - end - end -end - --- Sets state of key assigned to axis of given joystick -function Controller.setAxisState(joystick, key, state) - if Controller.axes[joystick] == nil then - Controller.axes[joystick] = {} - end - Controller.axes[joystick][key] = state -end - --- Simulate pressing key on an axis -function Controller.axisPress(joystick, axis, value) - local key = Controller.createAxisName(axis, value) - local set, action = Controller.testSets(key, joystick) - local state = Controller.getAxisState(joystick, key) - if not state then - print(joystick, set, action, key) - Controller.setAxisState(joystick, key, true) - Controller.controlpressed(set, action, key) - end -end - --- Simulate releasing key on an axis -function Controller.axisRelease(joystick, axis, value) - local key = Controller.createAxisName(axis, value) - local set, action = Controller.testSets(key, joystick) - local state = Controller.getAxisState(joystick, key) - if state then - Controller.setAxisState(joystick, key,false) - Controller.controlreleased(set, action, key) - end -end - --- Callbacks from LÖVE2D --- Load gamepad mappings from db file and init module -function Controller.load() - love.joystick.loadGamepadMappings("gamecontrollerdb.txt") -end - --- Gamepad input callbacks -function Controller.gamepadaxis(joystick, axis, value) - if value ~= 0 then - if math.abs(value) > Controller.deadzone then - Controller.axisPress(joystick, axis, value) - else - Controller.axisRelease(joystick, axis, value) - end - else - Controller.axisRelease(joystick, axis, 1) - Controller.axisRelease(joystick, axis, -1) - end -end -function Controller.gamepadpressed(joystick, key) - local set, action = Controller.testSets(key, joystick) - print(joystick, set, action, key) - Controller.controlpressed(set, action, key) -end -function Controller.gamepadreleased(joystick, key) - local set, action = Controller.testSets(key, joystick) - Controller.controlreleased(set, action, key) -end - --- Keyboard input callbacks -function Controller.keypressed(key) - local set, action = Controller.testSets(key, nil) - print(nil, set, action, key) - Controller.controlpressed(set, action, key) -end -function Controller.keyreleased(key) - local set, action = Controller.testSets(key, nil) - Controller.controlreleased(set, action, key) -end \ No newline at end of file -- cgit v1.1