// // Copyright 2022-2024 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. // import SceneKit import SwiftUI class EffectsScene: SCNScene { // MARK: - Constants private enum Constants { static let confettiSceneName = "ConfettiScene.scn" static let particlesNodeName = "particles" } // MARK: - Public static func confetti(with theme: ThemeSwiftUI) -> EffectsScene? { guard let scene = EffectsScene(named: Constants.confettiSceneName) else { return nil } let colors: [[Float]] = theme.colors.namesAndAvatars.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..