Skip to content

Commit 9726257

Browse files
committed
fix: do not display capture lock message when possilbe (avoid flickering - do strategy switch)
feat: make tab (players list) keybindign configurable and add a way to assign to a gamepad button
1 parent 5a663aa commit 9726257

File tree

6 files changed

+27
-36
lines changed

6 files changed

+27
-36
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@
140140
"browserify-zlib": "^0.2.0",
141141
"buffer": "^6.0.3",
142142
"constants-browserify": "^1.0.0",
143-
"contro-max": "^0.1.8",
143+
"contro-max": "^0.1.9",
144144
"crypto-browserify": "^3.12.0",
145145
"cypress-esbuild-preprocessor": "^1.0.2",
146146
"eslint": "^8.50.0",

pnpm-lock.yaml

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/controls.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { onCameraMove, onControInit } from './cameraRotationControls'
2727
import { createNotificationProgressReporter } from './core/progressReporter'
2828
import { appStorage } from './react/appStorageProvider'
2929
import { switchGameMode } from './packetsReplay/replayPackets'
30+
import { tabListState } from './react/PlayerListOverlayProvider'
3031

3132

3233
export const customKeymaps = proxy(appStorage.keybindings)
@@ -65,6 +66,7 @@ export const contro = new ControMax({
6566
// client side
6667
zoom: ['KeyC'],
6768
viewerConsole: ['Backquote'],
69+
playersList: ['Tab'],
6870
},
6971
ui: {
7072
toggleFullscreen: ['F11'],
@@ -405,6 +407,9 @@ const onTriggerOrReleased = (command: Command, pressed: boolean) => {
405407
case 'general.rotateCameraDown':
406408
cameraRotationControls.handleCommand(command, pressed)
407409
break
410+
case 'general.playersList':
411+
tabListState.isOpen = pressed
412+
break
408413
}
409414
}
410415
}

src/react/GlobalOverlayHints.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import PixelartIcon, { pixelartIcons } from './PixelartIcon'
66
import { useUsingTouch } from './utilsApp'
77

88
export const displayHintsState = proxy({
9-
captureMouseHint: true
9+
captureMouseHint: false
1010
})
1111

1212
export default () => {

src/react/PlayerListOverlayProvider.tsx

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useSnapshot } from 'valtio'
1+
import { proxy, useSnapshot } from 'valtio'
22
import { useState, useEffect, useMemo } from 'react'
33
import { isGameActive } from '../globalState'
44
import PlayerListOverlay from './PlayerListOverlay'
@@ -9,28 +9,18 @@ const MAX_ROWS_PER_COL = 10
99

1010
type Players = typeof bot.players
1111

12+
export const tabListState = proxy({
13+
isOpen: false,
14+
})
15+
1216
export default () => {
17+
const { isOpen } = useSnapshot(tabListState)
18+
1319
const serverIp = lastConnectOptions.value?.server
1420
const [clientId, setClientId] = useState(bot._client.uuid)
1521
const [players, setPlayers] = useState<Players>({})
16-
const [isOpen, setIsOpen] = useState(false)
1722
const [counter, setCounter] = useState(0)
1823

19-
const handleKeyDown = (e) => {
20-
if (!isGameActive(true)) return
21-
if (e.key === 'Tab') {
22-
setIsOpen(prev => true)
23-
e.preventDefault()
24-
}
25-
}
26-
27-
const handleKeyUp = (e) => {
28-
if (e.key === 'Tab') {
29-
setIsOpen(prev => false)
30-
e.preventDefault()
31-
}
32-
}
33-
3424
useEffect(() => {
3525
function requestUpdate () {
3626
setPlayers(bot?.players ?? {})
@@ -58,15 +48,10 @@ export default () => {
5848
})
5949
}
6050

61-
document.addEventListener('keydown', handleKeyDown)
62-
document.addEventListener('keyup', handleKeyUp)
63-
6451
const playerlistHeader = () => setCounter(prev => prev + 1)
6552
bot._client.on('playerlist_header', playerlistHeader)
6653

6754
return () => {
68-
document.removeEventListener('keydown', handleKeyDown)
69-
document.removeEventListener('keyup', handleKeyUp)
7055
bot?._client.removeListener('playerlist_header', playerlistHeader)
7156
}
7257
}, [serverIp])

src/utils.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ export const pointerLock = {
3939
if (options.autoFullScreen) {
4040
void goFullscreen()
4141
}
42-
const displayBrowserProblem = () => {
42+
const displayMouseCaptureFailure = () => {
4343
// if (notificationProxy.id === 'auto-login') return // prevent notification hide
4444
// showNotification('Browser Delay Limitation', navigator['keyboard'] ? 'Click on screen, enable Auto Fullscreen or F11' : 'Click on screen or use fullscreen in Chrome')
4545
// notificationProxy.id = 'pointerlockchange'
4646
displayHintsState.captureMouseHint = true
4747
}
4848
if (!(document.fullscreenElement && navigator['keyboard']) && this.justHitEscape) {
49-
displayBrowserProblem()
49+
displayMouseCaptureFailure()
5050
} else {
5151
//@ts-expect-error
5252
const promise: any = document.documentElement.requestPointerLock({
@@ -58,9 +58,10 @@ export const pointerLock = {
5858
document.documentElement.requestPointerLock()
5959
} else if (error.name === 'SecurityError') {
6060
// cause: https://discourse.threejs.org/t/how-to-avoid-pointerlockcontrols-error/33017/4
61-
displayBrowserProblem()
61+
displayMouseCaptureFailure()
6262
} else {
63-
console.error(error)
63+
displayMouseCaptureFailure()
64+
console.warn('Failed to request pointer lock:', error)
6465
}
6566
})
6667
}

0 commit comments

Comments
 (0)