From a563e8944610d418fd7e359afd2d429dbd8f2fc3 Mon Sep 17 00:00:00 2001 From: Sakun Date: Sat, 2 Nov 2024 14:43:17 -0400 Subject: [PATCH] remove haptic engine from spray --- .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 20523 bytes .../xcschemes/xcschememanagement.plist | 14 ++++ Package.resolved | 23 +++++++ Sources/Pow/Effects/SprayEffect.swift | 63 +----------------- 5 files changed, 46 insertions(+), 61 deletions(-) create mode 100644 .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/sakun.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 .swiftpm/xcode/xcuserdata/sakun.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Package.resolved diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/sakun.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/sakun.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..6a8e1953dd8ab047f847777d347eb9320448dd6d GIT binary patch literal 20523 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 + + + + SchemeUserState + + Pow.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Package.resolved b/Package.resolved new file mode 100644 index 0000000..9dbbe08 --- /dev/null +++ b/Package.resolved @@ -0,0 +1,23 @@ +{ + "pins" : [ + { + "identity" : "flyingfox", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swhitty/FlyingFox.git", + "state" : { + "revision" : "ed86fc6d68ec1467aaab3e494b581e66dd7a4512", + "version" : "0.12.2" + } + }, + { + "identity" : "snapshotpreviews-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/EmergeTools/SnapshotPreviews-iOS", + "state" : { + "revision" : "d6629ac56ad8c4cd2bb2aa11b6bdcc435f92cfc9", + "version" : "0.7.6" + } + } + ], + "version" : 2 +} diff --git a/Sources/Pow/Effects/SprayEffect.swift b/Sources/Pow/Effects/SprayEffect.swift index a6e98b8..48d2bc0 100644 --- a/Sources/Pow/Effects/SprayEffect.swift +++ b/Sources/Pow/Effects/SprayEffect.swift @@ -1,10 +1,6 @@ import SwiftUI import simd -#if os(iOS) -import CoreHaptics -#endif - public extension AnyChangeEffect { /// An effect that emits multiple particles in different shades and sizes moving up from the origin point. /// @@ -22,13 +18,9 @@ public extension AnyChangeEffect { internal struct SpraySimulation: ViewModifier, Simulative { var particle: ParticleView - var impulseCount: Int = 0 - var initialVelocity: CGFloat = 0.0 - var origin: UnitPoint - private let spring = Spring(zeta: 1, stiffness: 30) private struct Ping: Identifiable { @@ -40,9 +32,7 @@ internal struct SpraySimulation: ViewModifier, Simulative { @State private var pings: [Ping] = [] - private let layer: ParticleLayer - @Environment(\.particleLayerNames) var particleLayerNames @@ -80,7 +70,6 @@ internal struct SpraySimulation: ViewModifier, Simulative { Canvas { context, size in var symbols: [GraphicsContext.ResolvedSymbol] = [] - var i = 0 var nextSymbol: GraphicsContext.ResolvedSymbol? = context.resolveSymbol(id: i) while let symbol = nextSymbol { @@ -102,7 +91,7 @@ internal struct SpraySimulation: ViewModifier, Simulative { }) let value: SIMD16 = indices / 10 - /// To simply the expression :rolleyes: + /// To simplify the expression :rolleyes: let adjustedValue: SIMD16 = (value - 0.5) // in degrees @@ -112,38 +101,27 @@ internal struct SpraySimulation: ViewModifier, Simulative { var rng = SeededRandomNumberGenerator(seed: ping.id) let symbolOffset = (0...10).randomElement(using: &rng) ?? 0 - let value2: SIMD16 = SIMD16.random(in: 0.0 ... 1.0, using: &rng) + scaleFactors - let insetAmount: Float = cos(ping.progress) * pow(ping.progress, 1) * -Float(symbolHeight) * 2.5 - let phases: SIMD16 = (ping.progress * 0.75) + value2 let sineScales: SIMD16 = simd_abs(sin(phases * SIMD16(repeating: .pi))) let scales: SIMD16 = sineScales * (1.0 - pow(ping.progress, 8.0)) * pow(ping.progress, 0.25) - let brightness: SIMD16 = .random(in: -0.1 ... 0.1, using: &rng) - let x: SIMD16 = adjustedValue * (sin(ping.progress * Float.pi) * Float(symbolWidth) * -2) let y: SIMD16 = insetAmount - (value2 * ping.progress) * Float(symbolHeight) * 2.5 for i in 0...10 { let point = CGPoint(x: x[i], y: y[i]) - let angle = Angle(degrees: angles[i]) let scale = Double(scales[i]) - let symbol = symbols[(i + symbolOffset) % symbols.count] - // If we're drawing in the particle group, fade in the - // the particles as we're no longer drawing behind the - // view. if hasParticleLayer { context.opacity = clamp(Double(ping.progress) * 4) } context.drawLayer { context in context.addFilter(.brightness(Double(brightness[i]))) - context.rotate(by: .degrees(Double(ping.progress) * -angle.degrees + -angle.degrees * 0.25)) context.translateBy(x: point.x, y: point.y) context.scaleBy(x: scale, y: scale) @@ -172,7 +150,6 @@ internal struct SpraySimulation: ViewModifier, Simulative { .particleLayerBackground(layer: layer, isEnabled: !isSimulationPaused) { overlay } - .usesCustomHaptics() .onChange(of: impulseCount) { newValue in let ping = Ping( id: UUID(), @@ -184,12 +161,6 @@ internal struct SpraySimulation: ViewModifier, Simulative { withAnimation(nil) { pings.append(ping) } - - #if os(iOS) - if let hapticPattern { - Haptics.play(hapticPattern) - } - #endif } } @@ -218,37 +189,6 @@ internal struct SpraySimulation: ViewModifier, Simulative { abs(ping.progress - ping.target) < 0.04 && ping.velocity < 0.04 } } - - #if os(iOS) - private var hapticPattern: CHHapticPattern? { - var rng = SeededRandomNumberGenerator(seed: 123) - - return try? CHHapticPattern( - events: (0 ..< 5).map { i in - let i = Float(i) - - let relativeTime: TimeInterval - - if i == 0 { - relativeTime = 0 - } else { - relativeTime = Double(i * 0.03) + .random(in: -0.005 ... 0.005, using: &rng) - } - - return CHHapticEvent( - eventType: .hapticContinuous, - parameters: [ - CHHapticEventParameter(parameterID: .hapticIntensity, value: 0.6 * (i / 5) + .random(in: -0.2 ... 0.2, using: &rng)), - CHHapticEventParameter(parameterID: .hapticSharpness, value: 0.2) - ], - relativeTime: relativeTime, - duration: 0.05 - ) - }, - parameterCurves: [] - ) - } - #endif } private struct RelativeOffsetModifier: GeometryEffect { @@ -276,6 +216,7 @@ private extension Angle { } } + #if os(iOS) && DEBUG struct SprayChangeEffect_Previews: PreviewProvider { struct Preview: View {