support all keys for inputs

This commit is contained in:
Jill 2022-09-22 15:49:27 +03:00
parent 82df028da8
commit ecc7911fa0
2 changed files with 95 additions and 17 deletions

110
MANUAL.md
View File

@ -77,8 +77,14 @@ Uranium Template originally formed during the creation of a currently unreleased
- [`easable:reset(new: number): void`](#easableresetnew-number-void)
- [Operations](#operations-2)
- [`input`](#input)
- [`uranium.press(direction: string)`](#uraniumpressdirection-string)
- [`uranium.release(direction: string)`](#uraniumreleasedirection-string)
- [`input.inputType`](#inputinputtype)
- [`input.directions`](#inputdirections)
- [`input.getInputName(i: inputType): string`](#inputgetinputnamei-inputtype-string)
- [`input.keyboardEquivalent`](#inputkeyboardequivalent)
- [`input.getInput(i: string): number`](#inputgetinputi-string-number)
- [`input.isDown(i: string): number`](#inputisdowni-string-number)
- [`uranium.press(input: inputType)`](#uraniumpressinput-inputtype)
- [`uranium.release(input: inputType)`](#uraniumreleaseinput-inputtype)
- [A note about keyboard inputs](#a-note-about-keyboard-inputs)
- [`bitop`](#bitop)
- [`scheduler`](#scheduler)
@ -636,21 +642,93 @@ Every operation supported on the eased value is supported with an `easable`.
_Defines callbacks_
`input` is the library that handles everything input-related. Its main feature is providing the `press` and `release` callbacks, but you can also access the raw inputs with the `inputs` table (each value is `-1` if the key is not pressed and the time at which it was pressed, estimated with `t` if it is pressed) and the _raw_ inputs (ignoring callback returns) with `rawInputs`. Additionally, for your convinience, it provides a `directions` enum:
`input` is the library that handles everything input-related. Its main feature is providing the `press` and `release` callbacks, but you can also access the raw inputs with the `inputs` table (each value is `-1` if the key is not pressed and the time at which it was pressed, estimated with `t` if it is pressed) and the _raw_ inputs (ignoring callback returns) with `rawInputs`.
#### `input.inputType`
The `input` module can detect every input that the game can pass through the [`StepP<player><input><action>MessageCommand`](https://craftedcart.gitlab.io/notitg_docs/message_commands.html#stepp-player-input-action-messagecommand). This list is:
```
MenuLeft
MenuRight
MenuUp
MenuDown
Start
Select
Back
Coin
Operator
Left
Right
Up
Down
UpLeft
UpRight
ActionLeft
ActionRight
ActionUp
ActionDown
Action1
Action2
Action3
Action4
Action5
Action6
Action7
Action8
MenuStart
```
All of these inputs are neatly stored away in an enum called `inputType`. For instance, if you wanted to check if an input was `Start`, you would do:
```lua
directions = {
Left = {-1, 0},
Down = {0, 1},
Up = {0, -1},
Right = {1, 0}
local isStart = i == input.inputType.Start
```
#### `input.directions`
For your convinience, cardinal inputs are given a simple directions enum:
```lua
self.directions = {
[self.inputType.Left] = {-1, 0},
[self.inputType.Down] = {0, 1},
[self.inputType.Up] = {0, -1},
[self.inputType.Right] = {1, 0}
}
```
#### `uranium.press(direction: string)`
Called when the player presses on a certain key. **Currently only supports arrow keys!!** `direction` can be `Left`, `Down`, `Up` or `Right` (TODO: change this to an enum).
#### `input.getInputName(i: inputType): string`
#### `uranium.release(direction: string)`
Same as [`uranium.press`](#uraniumpressdirection-string), except for releasing a key.
Gets the name of an input. The reverse of indexing the `inputType` enum.
#### `input.keyboardEquivalent`
Mappings for the default keybinds for most keys. It's recommended to put them alongside the in-game representation in UIs to avoid confusion:
```lua
local inputName = input.getInputName(i)
local keyboardInput = input.keyboardEquivalent[i]
if keyboardInput then
inputName = inputName .. ' (defaults to ' .. keyboardInput .. ')'
end
local dialog = 'Press ' .. inputName .. ' to boop' --> 'Press Start (defaults to Enter) to boop'
```
#### `input.getInput(i: string): number`
Shorthand for accessing `input.inputs` directly.
```lua
input.inputs[input.inputType.Left] == input.getInput('Left')
```
#### `input.isDown(i: string): number`
Shorthand for `input.getInput(i) ~= -1`.
#### `uranium.press(input: inputType)`
Called when the player presses on a certain key.
#### `uranium.release(input: inputType)`
Same as [`uranium.press`](#uraniumpressinput-inputtype), except for releasing a key.
#### A note about keyboard inputs
@ -909,8 +987,8 @@ local vel = vector(0, 0)
local hasHitGround = true -- let's define this so that you can't jump mid-air
-- called whenever the player recieves an input
function uranium.press(direction)
if direction == 'Up' and hasHitGround then
function uranium.press(i)
if i == input.inputType.Up and hasHitGround then
vel.y = vel.y - JUMP_FORCE
hasHitGround = false
return true -- input eaten! further callbacks won't recieve this
@ -919,10 +997,10 @@ end
function uranium.update(dt)
-- respond to l/r inputs
if input.inputs.Left ~= -1 then
if input.isDown('Left') then
vel.x = vel.x - SPEED
end
if input.inputs.Right ~= -1 then
if input.isDown('Right') then
vel.x = vel.x + SPEED
end

@ -1 +1 @@
Subproject commit 8d35593070971ff1c36f45107a58ba4e300de2aa
Subproject commit f528fa55f6fa9bd2ba47e233a3f6814c68214c7c