annotate LazyBear/HapticsManager.swift @ 437:5ca468751db2

Change init to initial
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Sun, 20 Jun 2021 12:58:52 +0200
parents 62d278295bb7
children 37c13ebda381
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }