// // Copyright 2022-2024 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only // Please see LICENSE in the repository root for full details. // import SceneKit import SwiftUI class EffectsScene: SCNScene { static let colors: [Color] = [ .blue, .red, .yellow, .green ] private enum Constants { static let confettiSceneName = "ConfettiScene.scn" static let particlesNodeName = "particles" } static func confetti() -> EffectsScene? { guard let scene = EffectsScene(named: Constants.confettiSceneName) else { return nil } let colors: [[Float]] = colors.compactMap(\.floatComponents) if let particles = scene.rootNode.childNode(withName: Constants.particlesNodeName, recursively: false)?.particleSystems?.first { // The particles need a non-zero color variation for the handler to affect the color particles.particleColorVariation = SCNVector4(x: 0, y: 0, z: 0, w: 0.1) // Add a handler to customize the color of the particles. particles.handle(.birth, forProperties: [.color]) { data, dataStride, _, count in for index in 0..