diff options
| author | Akshay Nair <phenax5@gmail.com> | 2024-12-21 22:18:50 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2024-12-21 22:25:42 +0530 |
| commit | f51fbc728e4b731372e39ba19c38a35ef58fe71a (patch) | |
| tree | ada2dbc2a16b6df46d446cfd9fc787d4c5a18879 /src/Chelleport/KeySequence.hs | |
| parent | 1ade68e7252dda79c365cc9ec187c2bea3513cae (diff) | |
| download | chelleport-f51fbc728e4b731372e39ba19c38a35ef58fe71a.tar.gz chelleport-f51fbc728e4b731372e39ba19c38a35ef58fe71a.zip | |
Add action repetition
Diffstat (limited to 'src/Chelleport/KeySequence.hs')
| -rw-r--r-- | src/Chelleport/KeySequence.hs | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/src/Chelleport/KeySequence.hs b/src/Chelleport/KeySequence.hs index dc5f603..9f1f26a 100644 --- a/src/Chelleport/KeySequence.hs +++ b/src/Chelleport/KeySequence.hs @@ -3,8 +3,9 @@ module Chelleport.KeySequence where import Chelleport.Types (KeyGrid, KeySequence) import Chelleport.Utils (findWithIndex, uniq) import Control.Monad (guard) -import Data.List (isPrefixOf) +import Data.List (elemIndex, isPrefixOf) import qualified Data.Map as Map +import Data.Maybe (fromMaybe, isJust) import qualified SDL nextChars :: KeySequence -> KeyGrid -> Maybe [Char] @@ -23,7 +24,7 @@ findMatchPosition keySequence = findWithIndex searchRows 0 searchInRow = guard . (== keySequence) isValidKey :: SDL.Keycode -> Bool -isValidKey = (`Map.member` keycodeMapping) +isValidKey = (`Map.member` keycodeCharMapping) -- Linear Congruential Generator lcg :: Int -> Int @@ -51,10 +52,10 @@ generateGrid seed (rows, columns) hintKeys ] toKeyChar :: SDL.Keycode -> Maybe Char -toKeyChar = (`Map.lookup` keycodeMapping) +toKeyChar = (`Map.lookup` keycodeCharMapping) -keycodeMapping :: Map.Map SDL.Keycode Char -keycodeMapping = +keycodeCharMapping :: Map.Map SDL.Keycode Char +keycodeCharMapping = Map.fromList [ (SDL.KeycodeA, 'A'), (SDL.KeycodeB, 'B'), @@ -81,15 +82,25 @@ keycodeMapping = (SDL.KeycodeW, 'W'), (SDL.KeycodeX, 'X'), (SDL.KeycodeY, 'Y'), - (SDL.KeycodeZ, 'Z'), - (SDL.Keycode0, '0'), - (SDL.Keycode1, '1'), - (SDL.Keycode2, '2'), - (SDL.Keycode3, '3'), - (SDL.Keycode4, '4'), - (SDL.Keycode5, '5'), - (SDL.Keycode6, '6'), - (SDL.Keycode7, '7'), - (SDL.Keycode8, '8'), - (SDL.Keycode9, '9') + (SDL.KeycodeZ, 'Z') ] + +keycodeToInt :: SDL.Keycode -> Maybe Int +keycodeToInt = (`elemIndex` digitKeycodes) + +isKeycodeDigit :: SDL.Keycode -> Bool +isKeycodeDigit = isJust . keycodeToInt + +digitKeycodes :: [SDL.Keycode] +digitKeycodes = + [ SDL.Keycode0, + SDL.Keycode1, + SDL.Keycode2, + SDL.Keycode3, + SDL.Keycode4, + SDL.Keycode5, + SDL.Keycode6, + SDL.Keycode7, + SDL.Keycode8, + SDL.Keycode9 + ] |
