101 lines
2.9 KiB
Lua
101 lines
2.9 KiB
Lua
|
local baton = require 'baton'
|
||
|
|
||
|
local player = baton.new {
|
||
|
controls = {
|
||
|
left = {'key:left', 'axis:leftx-', 'button:dpleft'},
|
||
|
right = {'key:right', 'axis:leftx+', 'button:dpright'},
|
||
|
up = {'key:up', 'axis:lefty-', 'button:dpup'},
|
||
|
down = {'key:down', 'axis:lefty+', 'button:dpdown'},
|
||
|
action = {'key:x', 'button:a', 'mouse:1'},
|
||
|
},
|
||
|
pairs = {
|
||
|
move = {'left', 'right', 'up', 'down'}
|
||
|
},
|
||
|
joystick = love.joystick.getJoysticks()[1],
|
||
|
deadzone = .33,
|
||
|
}
|
||
|
|
||
|
local pairDisplayAlpha = 0
|
||
|
local pairDisplayTargetAlpha = 0
|
||
|
local buttonDisplayAlpha = 0
|
||
|
local buttonDisplayTargetAlpha = 0
|
||
|
|
||
|
local updates = 0
|
||
|
local updateTime = 0
|
||
|
|
||
|
function love.update(dt)
|
||
|
local time = love.timer.getTime()
|
||
|
|
||
|
player:update()
|
||
|
|
||
|
pairDisplayTargetAlpha = player:pressed 'move' and 1
|
||
|
or player:released 'move' and 1
|
||
|
or player:down 'move' and .5
|
||
|
or 0
|
||
|
if pairDisplayAlpha > pairDisplayTargetAlpha then
|
||
|
pairDisplayAlpha = pairDisplayAlpha - 4 * dt
|
||
|
end
|
||
|
if pairDisplayAlpha < pairDisplayTargetAlpha then
|
||
|
pairDisplayAlpha = pairDisplayTargetAlpha
|
||
|
end
|
||
|
|
||
|
buttonDisplayTargetAlpha = player:pressed 'action' and 1
|
||
|
or player:released 'action' and 1
|
||
|
or player:down 'action' and .5
|
||
|
or 0
|
||
|
if buttonDisplayAlpha > buttonDisplayTargetAlpha then
|
||
|
buttonDisplayAlpha = buttonDisplayAlpha - 4 * dt
|
||
|
end
|
||
|
if buttonDisplayAlpha < buttonDisplayTargetAlpha then
|
||
|
buttonDisplayAlpha = buttonDisplayTargetAlpha
|
||
|
end
|
||
|
|
||
|
updateTime = updateTime + (love.timer.getTime() - time)
|
||
|
updates = updates + 1
|
||
|
end
|
||
|
|
||
|
function love.keypressed(key)
|
||
|
if key == 'escape' then
|
||
|
love.event.quit()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local pairDisplayRadius = 128
|
||
|
|
||
|
function love.draw()
|
||
|
love.graphics.setColor(1, 1, 1)
|
||
|
love.graphics.print('Current active device: ' .. tostring(player:getActiveDevice()))
|
||
|
love.graphics.print('Average update time (us): ' .. math.floor(updateTime/updates*1000000), 0, 16)
|
||
|
love.graphics.print('Memory usage (kb): ' .. math.floor(collectgarbage 'count'), 0, 32)
|
||
|
|
||
|
love.graphics.push()
|
||
|
love.graphics.translate(400, 300)
|
||
|
|
||
|
love.graphics.setColor(.25, .25, .25, pairDisplayAlpha)
|
||
|
love.graphics.circle('fill', 0, 0, pairDisplayRadius)
|
||
|
|
||
|
love.graphics.setColor(1, 1, 1)
|
||
|
love.graphics.circle('line', 0, 0, pairDisplayRadius)
|
||
|
|
||
|
local r = pairDisplayRadius * player.config.deadzone
|
||
|
if player.config.squareDeadzone then
|
||
|
love.graphics.rectangle('line', -r, -r, r*2, r*2)
|
||
|
else
|
||
|
love.graphics.circle('line', 0, 0, r)
|
||
|
end
|
||
|
|
||
|
love.graphics.setColor(.5, .5, .5)
|
||
|
local x, y = player:getRaw 'move'
|
||
|
love.graphics.circle('fill', x*pairDisplayRadius, y*pairDisplayRadius, 4)
|
||
|
love.graphics.setColor(1, 1, 1)
|
||
|
x, y = player:get 'move'
|
||
|
love.graphics.circle('fill', x*pairDisplayRadius, y*pairDisplayRadius, 4)
|
||
|
|
||
|
love.graphics.setColor(1, 1, 1)
|
||
|
love.graphics.rectangle('line', -50, 150, 100, 100)
|
||
|
love.graphics.setColor(1, 1, 1, buttonDisplayAlpha)
|
||
|
love.graphics.rectangle('fill', -50, 150, 100, 100)
|
||
|
|
||
|
love.graphics.pop()
|
||
|
end
|