This commit is contained in:
Andrew Minnich
2018-03-08 23:26:21 -05:00
parent 5c321ee71f
commit 3b75d8ffcf
2 changed files with 51 additions and 7 deletions

View File

@@ -22,7 +22,7 @@ function sf.joy.button(joystick, button)
end end
end end
-- player class -- -- player class - internal functions --
local Player = {} local Player = {}
Player.__index = Player Player.__index = Player
@@ -126,13 +126,48 @@ function Player:_updateControls()
end end
end end
function Player:_updatePairs()
for _, pair in pairs(self._pairs) do
-- get raw x and y
pair.rawX = self._controls[pair.controls[2]].rawValue - self._controls[pair.controls[1]].rawValue
pair.rawY = self._controls[pair.controls[4]].rawValue - self._controls[pair.controls[3]].rawValue
-- limit to 1
local len = (pair.rawX^2 + pair.rawY^2) ^ .5
if len > 1 then
pair.rawX, pair.rawY = pair.rawX / len, pair.rawY / len
end
-- deadzone
if self.config.squareDeadzone then
pair.x = math.abs(pair.rawX) > self.config.deadzone and pair.rawX or 0
pair.y = math.abs(pair.rawY) > self.config.deadzone and pair.rawY or 0
elseif len > self.config.deadzone then
pair.x, pair.y = pair.rawX, pair.rawY
else
pair.x, pair.y = 0, 0
end
-- down/pressed/released
pair.downPrevious = pair.down
pair.down = pair.x ~= 0 or pair.y ~= 0
pair.pressed = pair.down and not pair.downPrevious
pair.released = pair.downPrevious and not pair.down
end
end
-- player class - public API --
function Player:update() function Player:update()
self:_setActiveDevice() self:_setActiveDevice()
self:_updateControls() self:_updateControls()
self:_updatePairs()
end end
function Player:getRaw(name) function Player:getRaw(name)
if self._controls[name] then if self._pairs[name] then
return self._pairs[name].rawX, self._pairs[name].rawY
elseif self._controls[name] then
return self._controls[name].rawValue return self._controls[name].rawValue
else else
error('No control with name "' .. name .. '" defined', 3) error('No control with name "' .. name .. '" defined', 3)
@@ -140,7 +175,9 @@ function Player:getRaw(name)
end end
function Player:get(name) function Player:get(name)
if self._controls[name] then if self._pairs[name] then
return self._pairs[name].x, self._pairs[name].y
elseif self._controls[name] then
return self._controls[name].value return self._controls[name].value
else else
error('No control with name "' .. name .. '" defined', 3) error('No control with name "' .. name .. '" defined', 3)
@@ -148,7 +185,9 @@ function Player:get(name)
end end
function Player:down(name) function Player:down(name)
if self._controls[name] then if self._pairs[name] then
return self._pairs[name].down
elseif self._controls[name] then
return self._controls[name].down return self._controls[name].down
else else
error('No control with name "' .. name .. '" defined', 3) error('No control with name "' .. name .. '" defined', 3)
@@ -156,7 +195,9 @@ function Player:down(name)
end end
function Player:pressed(name) function Player:pressed(name)
if self._controls[name] then if self._pairs[name] then
return self._pairs[name].pressed
elseif self._controls[name] then
return self._controls[name].pressed return self._controls[name].pressed
else else
error('No control with name "' .. name .. '" defined', 3) error('No control with name "' .. name .. '" defined', 3)
@@ -164,7 +205,9 @@ function Player:pressed(name)
end end
function Player:released(name) function Player:released(name)
if self._controls[name] then if self._pairs[name] then
return self._pairs[name].released
elseif self._controls[name] then
return self._controls[name].released return self._controls[name].released
else else
error('No control with name "' .. name .. '" defined', 3) error('No control with name "' .. name .. '" defined', 3)

View File

@@ -20,5 +20,6 @@ function love.update(dt)
end end
function love.draw() function love.draw()
love.graphics.print(tostring(input:released 'left')) local x, y = input:get 'move'
love.graphics.print(tostring(x) .. '\n' .. tostring(y))
end end