From 4812e57d2a01b566c4dbe16105fcd070b505eb89 Mon Sep 17 00:00:00 2001 From: Jonathan Olson Date: Thu, 28 Mar 2024 15:21:22 -0600 Subject: [PATCH] Adding demo for two-press delayed (multi-hot-key) behavior, and added modifierKeys docs, see https://github.com/phetsims/scenery/issues/1621 --- js/wilder/view/WilderScreenView.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/js/wilder/view/WilderScreenView.ts b/js/wilder/view/WilderScreenView.ts index 1ce0fb5..db210f4 100644 --- a/js/wilder/view/WilderScreenView.ts +++ b/js/wilder/view/WilderScreenView.ts @@ -15,6 +15,9 @@ import { globalHotkeyRegistry, Hotkey, Text } from '../../../../scenery/js/impor import BooleanProperty from '../../../../axon/js/BooleanProperty.js'; import ABSwitch from '../../../../sun/js/ABSwitch.js'; import PhetFont from '../../../../scenery-phet/js/PhetFont.js'; +import NumberProperty from '../../../../axon/js/NumberProperty.js'; +import stepTimer from '../../../../axon/js/stepTimer.js'; +import DerivedProperty from '../../../../axon/js/DerivedProperty.js'; type WilderScreenViewOptions = PickRequired; @@ -90,6 +93,32 @@ class WilderScreenView extends ScreenView { enabledProperty: extraEnabledProperty } ) ); + // Demo for delayed "combo" hotkeys. Press 'o' and then 'p' within 500ms to trigger the 'p' hotkey. + const lastOPressTimeProperty = new NumberProperty( 0 ); + const currentTimeProperty = new NumberProperty( Date.now() ); + stepTimer.addListener( dt => { + currentTimeProperty.value = Date.now(); + } ); + globalHotkeyRegistry.add( new Hotkey( { + key: 'o', + fire: () => { + console.log( 'fire: o (first key)' ); + lastOPressTimeProperty.value = Date.now(); + } + } ) ); + globalHotkeyRegistry.add( new Hotkey( { + key: 'p', + fire: () => { + console.log( 'fire: p' ); + }, + enabledProperty: new DerivedProperty( [ + lastOPressTimeProperty, + currentTimeProperty + ], ( lastOPressTime, currentTime ) => { + return lastOPressTime + 500 > currentTime; + } ) + } ) ); + resetAllButton.addInputListener( { hotkeys: [ new Hotkey( {