Difference between revisions of "IsKeyPressed - Input"

From the CreationKit Wiki
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

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.

See Also