56 lines
1.8 KiB
Swift
56 lines
1.8 KiB
Swift
// ── Haptic Engine ──────────────────────────────────────────────
|
|
// Urgency-mapped haptic feedback patterns
|
|
|
|
import UIKit
|
|
|
|
enum HapticEngine {
|
|
/// Haptic for pre-warning
|
|
static func warning(urgency: UrgencyLevel) {
|
|
switch urgency {
|
|
case .critical, .important:
|
|
let generator = UINotificationFeedbackGenerator()
|
|
generator.notificationOccurred(.warning)
|
|
case .standard:
|
|
let generator = UIImpactFeedbackGenerator(style: .medium)
|
|
generator.impactOccurred()
|
|
case .gentle:
|
|
let generator = UIImpactFeedbackGenerator(style: .light)
|
|
generator.impactOccurred()
|
|
case .passive:
|
|
break // no haptic for passive
|
|
}
|
|
}
|
|
|
|
/// Haptic for timer fire
|
|
static func fire(urgency: UrgencyLevel) {
|
|
switch urgency {
|
|
case .critical:
|
|
let generator = UINotificationFeedbackGenerator()
|
|
generator.notificationOccurred(.error)
|
|
case .important:
|
|
let generator = UINotificationFeedbackGenerator()
|
|
generator.notificationOccurred(.warning)
|
|
case .standard:
|
|
let generator = UINotificationFeedbackGenerator()
|
|
generator.notificationOccurred(.success)
|
|
case .gentle:
|
|
let generator = UIImpactFeedbackGenerator(style: .light)
|
|
generator.impactOccurred()
|
|
case .passive:
|
|
break
|
|
}
|
|
}
|
|
|
|
/// Haptic for button tap
|
|
static func tap() {
|
|
let generator = UIImpactFeedbackGenerator(style: .light)
|
|
generator.impactOccurred()
|
|
}
|
|
|
|
/// Haptic for selection change
|
|
static func selection() {
|
|
let generator = UISelectionFeedbackGenerator()
|
|
generator.selectionChanged()
|
|
}
|
|
}
|