Difference between revisions of "IsKeyPressed - Input"
Jump to navigation
Jump to search
imported>JustinOther (Examples/Notes) |
imported>JustinOther m (→Examples: Formatting) |
||
Line 36: | Line 36: | ||
EndIf | EndIf | ||
RegisterForSingleUpdate(0.25) | RegisterForSingleUpdate(0.25) | ||
EndEvent</source>*Do something exactly once each time a key is pressed. We'll take the scaffolding from above as rendered given the difference is exclusively in the OnUpdate event. Without the primary check and consecutive bool-flip, [[Trace - Debug|Trace]] would be called every iteration. | EndEvent</source> | ||
*Do something exactly once each time a key is pressed. We'll take the scaffolding from above as rendered given the difference is exclusively in the OnUpdate event. Without the primary check and consecutive bool-flip, [[Trace - Debug|Trace]] would be called every iteration. | |||
<source lang="papyrus">Event OnUpdate() | <source lang="papyrus">Event OnUpdate() | ||
If bIsHotkeyPressed != IsKeyPressed(iHotkey) | If bIsHotkeyPressed != IsKeyPressed(iHotkey) | ||
Line 46: | Line 47: | ||
RegisterForSingleUpdate(0.25) | RegisterForSingleUpdate(0.25) | ||
EndEvent</source> | EndEvent</source> | ||
== Notes == | == Notes == | ||
*To avoid multithreading mishaps, it's generally best to use [[RegisterForSingleUpdate - Form|RegisterForSingleUpdate]] rather than [[RegisterForUpdate - Form|RegisterForUpdate]]. | *To avoid multithreading mishaps, it's generally best to use [[RegisterForSingleUpdate - Form|RegisterForSingleUpdate]] rather than [[RegisterForUpdate - Form|RegisterForUpdate]]. |
Revision as of 14:59, 21 August 2012
SKSE Member of: Input Script
Checks if a given key is currently pressed. (This function requires SKSE)
Syntax
int Function IsKeyPressed(Int dxKeycode) global native
Parameters
- dxKeycode : The DXScanCode of the key to check.
Return Value
Returns 'True' if the key is pressed and 'False' if not.
Examples
- Standard use.
Bool bIsHotkeyPressed = Input.IsKeyPressed(42) ; Is L-Shift pressed?
- Do/Undo something when a key is pressed/released. States could be used in lieu of the boolean guard, but would verifiably not save any resources in this context.
Bool bIsHotkeyPressed ; = False
Int iHotkey = 184 ; R-Alt
Event OnInit()
RegisterForSingleUpdate(0.25)
EndEvent
Event OnUpdate()
If bIsHotkeyPressed != IsKeyPressed(iHotkey) ; Only run code when the status changes
bIsHotkeyPressed = !bIsHotkeyPressed ; Set bool to whatever it isn't
If bIsHotkeyPressed ; == True
Debug.Trace("Hotkey Pressed")
Else ; If bIsHotkeyPressed == False
Debug.Trace("Hotkey Released")
EndIf
EndIf
RegisterForSingleUpdate(0.25)
EndEvent
- Do something exactly once each time a key is pressed. We'll take the scaffolding from above as rendered given the difference is exclusively in the OnUpdate event. Without the primary check and consecutive bool-flip, Trace would be called every iteration.
Event OnUpdate()
If bIsHotkeyPressed != IsKeyPressed(iHotkey)
bIsHotkeyPressed = !bIsHotkeyPressed
If bIsHotkeyPressed
Debug.Trace("Do something.")
EndIf
EndIf
RegisterForSingleUpdate(0.25)
EndEvent
Notes
- To avoid multithreading mishaps, it's generally best to use RegisterForSingleUpdate rather than RegisterForUpdate.
- If updating at tight intervals, optimization is key as it will make your polling script more responsive. It shouldn't be necessary to update at intervals < 0.25 and doing so just makes a script unnecessarily 'expensive'.
- When the Input Events arrive, they'll be preferable to the above polling methods as their 'cost' will be less.
- Avoid using keys already claimed by Skyrim. Invariably, mod added hotkeys will conflict, so it's best to offer a way to rebind your hotkey(s) via GetNthKeyPressed from an Options Menu or other readily accessible means such as a scripted inventory item. This will afford your mod elasticity and allow it to work in tandem with other hotkey bearing mods.