Mercurial > public > lazybear
annotate LazyBear/HapticsManager.swift @ 449:4255f94d0767
Minor updates
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Wed, 23 Jun 2021 13:03:00 +0200 |
parents | 62d278295bb7 |
children | 37c13ebda381 |
rev | line source |
---|---|
319
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
1 // |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
2 // HapticsManager.swift |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
3 // LazyBear |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 27/3/21. |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
6 // |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
7 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
8 import SwiftUI |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
9 import CoreHaptics |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
10 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
11 class HapticsManager: ObservableObject { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
12 @Published var engine: CHHapticEngine? |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
13 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
14 func prepareHaptics() { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
15 guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else { return } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
16 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
17 do { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
18 self.engine = try CHHapticEngine() |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
19 try engine?.start() |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
20 } catch { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
21 print("There was an error creating the engine: \(error.localizedDescription)") |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
22 } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
23 } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
24 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
25 func simpleSuccess() { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
26 let generator = UINotificationFeedbackGenerator() |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
27 generator.notificationOccurred(.success) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
28 } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
29 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
30 func complexSuccess() { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
31 // make sure that the device supports haptics |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
32 guard CHHapticEngine.capabilitiesForHardware().supportsHaptics else { return } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
33 var events = [CHHapticEvent]() |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
34 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
35 // create one intense, sharp tap |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
36 let intensity = CHHapticEventParameter(parameterID: .hapticIntensity, value: 2) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
37 let sharpness = CHHapticEventParameter(parameterID: .hapticSharpness, value: 1) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
38 let event = CHHapticEvent(eventType: .hapticTransient, parameters: [intensity, sharpness], relativeTime: 0) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
39 events.append(event) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
40 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
41 // convert those events into a pattern and play it immediately |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
42 do { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
43 let pattern = try CHHapticPattern(events: events, parameters: []) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
44 let player = try engine?.makePlayer(with: pattern) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
45 try player?.start(atTime: 0) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
46 } catch { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
47 print("Failed to play pattern: \(error.localizedDescription).") |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
48 } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
49 } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
50 |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
51 func simpleError() { |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
52 let generator = UINotificationFeedbackGenerator() |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
53 generator.notificationOccurred(.error) |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
54 } |
62d278295bb7
Sign Up View implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
55 } |