Advertisement
HugoBDesigner

Keyboard example (LÖVE 11.X)

May 24th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.78 KB | None | 0 0
  1. function love.load()
  2.     local prelayout = {"abcdefg", "hijklmn", "opqrstu", "vwxyz"}
  3.    
  4.     layout = {}
  5.     for y = 1, #prelayout do
  6.         layout[y] = {}
  7.         for x = 1, string.len(prelayout[y]) do
  8.             layout[y][x] = {key = string.sub(prelayout[y], x, x), pressed = false}
  9.         end
  10.     end
  11.    
  12.     startX, startY = 10, 10
  13.     keySize = 20
  14.     spacing = 5
  15.    
  16.     windowW = #layout[1]*(keySize + spacing) - spacing + 2*startX
  17.     windowH = #layout*(keySize + spacing) - spacing + 2*startY
  18.    
  19.     love.graphics.setBackgroundColor(1, 1, 1)
  20.     font = love.graphics.newFont(12)
  21.     love.graphics.setFont(font)
  22.    
  23.     love.window.setMode(windowW, windowH)
  24. end
  25.  
  26. function love.draw()
  27.     for y = 1, #layout do
  28.         for x = 1, #layout[y] do
  29.             local px, py = startX + (x-1)*(keySize + spacing), startY + (y-1)*(keySize + spacing)
  30.             local v = layout[y][x].key
  31.             love.graphics.setColor(39/255, 151/255, 229/255, 155/255)
  32.             if layout[y][x].pressed then
  33.                 love.graphics.setColor(229/255, 218/255, 39/255, 155/255)
  34.             end
  35.             love.graphics.rectangle("fill", px, py, keySize, keySize)
  36.             love.graphics.setColor(0, 0, 0, 1)
  37.             love.graphics.rectangle("line", px, py, keySize, keySize)
  38.             love.graphics.print(v, px + keySize/2 - font:getWidth(v)/2, py + keySize/2 - font:getHeight()/2)
  39.         end
  40.     end
  41. end
  42.  
  43. function love.mousepressed(x, y, button)
  44.     local px, py = x - startX, y - startY
  45.     --Clicked inside keyboard
  46.     if px >= 0 and py >= 0 and px <= (keySize+spacing)*#layout[1] and py <= (keySize+spacing)*#layout then
  47.         local tx, ty = math.floor(px/(keySize+spacing)) + 1, math.floor(py/(keySize+spacing)) + 1
  48.         px = px - (tx-1)*(keySize+spacing)
  49.         py = py - (ty-1)*(keySize+spacing)
  50.        
  51.         --If in-between keys, ignore
  52.         if px <= keySize and py <= keySize then
  53.             print("KEY: " .. layout[ty][tx].key)
  54.             layout[ty][tx].pressed = not layout[ty][tx].pressed
  55.             return
  56.         end
  57.     end
  58.     print("Outside keyboard")
  59. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement