Swipe is a circluar keyboard designed to mimic the one used in the popular mobile game Wordscapes
Check main.lua for a working example. Tested on mouse, technically speaking
should work for touch screens? Let me know if they don't.
(swipe.lua is pretty heavily commented, if you just wanted to skip this part!)
Put swipe.lua somewhere into your project, and import the usual way
local Swipe = require "path.to.libs.swipeThen initialise as follows
local keyboard = Swipe.new(
-- cx for the keyboard
love.graphics.getWidth() / 2,
-- cy for the keyboard
love.graphics.getHeight() / 2,
-- initialLetters to seed the keyboard
{ "a", "n", "g", "l", "u", "r", "a" },
)Optionally, you can specify options to pass to the constructor. The defaults
are shown below:
local defaultOptions = {
-- Wheel
wheelColour = { 0.890, 0.890, 0.890 }, -- colour of the wheel background
wheelRadius = 150, -- size of the wheel
drawWheel = true, -- whether or not to actually _draw_ the wheel
-- Text
textColour = { 0.133, 0.133, 0.133 }, -- colour of the text on the wheel
textFont = love.graphics.newFont(), -- the font to use to render the text
-- Selected
selectedColour = { 0.843, 0.176, 0.631 }, -- the highlight colour
selectionRadius = 30 -- the radius of the select
}Then, you'll need to attach start, moved, and stop event handlers.
- For a mouse, hook into
mousepressed,mousemovedandmousereleased - For touch devices,
touchpressed,touchmovedandtouchreleased
local currentText = nil
function love.mousepressed(x, y, button)
keyboard:start(button, x, y)
-- or keyboard:start(id, x, y) for touchpressed
currentText = keyboard:get()
end
function love.mousemoved(x, y)
keyboard:moved(x, y)
-- TAKE NOTE OF THE ID:
-- or keyboard:touchMoved(id, x, y) for touchmoved
currentText = keyboard:get()
end
function love.mousereleased(x, y, button)
currentText = keyboard:stop(button, x, y)
-- or keyboard:stop(id, x, y) for touchreleased
endMake sure to pass in the button or id to the start/stop functions to
ensure it's tracking the right pointer.
stop will return the final list of letters that were selected, otherwise you
can call get while you are currently swiping on the keyboard to retrieve the
selected letters in order. If you call get when you are not swiping, then
it'll return nil.
To update the keyboard's letters, you can call keyboard:setLetters(newLetters)
Example font is mini-wakuwaku by miniyama, gratefully retrieved from
https://www.freejapanesefont.com/mini-wakuwaku/