Library / Custom Core Haptics patterns
Game explosion / heavy collision
A game impact: sharp initial crack, then a rumble that decays over half a second.
import CoreHaptics
func playExplosion(engine: CHHapticEngine,
magnitude: Float = 1.0) throws { // scale 0–1 by event size
// 1) The crack
let crack = CHHapticEvent(eventType: .hapticTransient, parameters: [
CHHapticEventParameter(parameterID: .hapticIntensity, value: magnitude),
CHHapticEventParameter(parameterID: .hapticSharpness, value: 1.0),
], relativeTime: 0)
// 2) The rumble
let rumble = CHHapticEvent(eventType: .hapticContinuous, parameters: [
CHHapticEventParameter(parameterID: .hapticIntensity, value: 0.8 * magnitude),
CHHapticEventParameter(parameterID: .hapticSharpness, value: 0.1),
], relativeTime: 0.02, duration: 0.5)
// 3) Decay curve: rumble fades to zero
let decay = CHHapticParameterCurve(
parameterID: .hapticIntensityControl,
controlPoints: [
.init(relativeTime: 0.02, value: 1.0),
.init(relativeTime: 0.52, value: 0.0),
],
relativeTime: 0)
let pattern = try CHHapticPattern(events: [crack, rumble],
parameterCurves: [decay])
let player = try engine.makePlayer(with: pattern)
try engine.start()
try player.start(atTime: CHHapticTimeImmediate)
}