InputMonitor.swift (1104B)
1 import GameController 2 import Observation 3 4 @MainActor 5 @Observable 6 final class InputMonitor { 7 private(set) var isConnected: Bool 8 9 private var observers: [NSObjectProtocol] = [] 10 11 init() { 12 #if targetEnvironment(simulator) 13 self.isConnected = false 14 #else 15 self.isConnected = GCKeyboard.coalesced != nil 16 17 let center = NotificationCenter.default 18 observers.append(center.addObserver( 19 forName: .GCKeyboardDidConnect, 20 object: nil, 21 queue: .main 22 ) { [weak self] _ in 23 Task { @MainActor in 24 self?.update() 25 } 26 }) 27 observers.append(center.addObserver( 28 forName: .GCKeyboardDidDisconnect, 29 object: nil, 30 queue: .main 31 ) { [weak self] _ in 32 Task { @MainActor in 33 self?.update() 34 } 35 }) 36 #endif 37 } 38 39 func update() { 40 #if targetEnvironment(simulator) 41 isConnected = false 42 #else 43 isConnected = GCKeyboard.coalesced != nil 44 #endif 45 } 46 }