//===----------------------------------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// @_exported import SpriteKit import simd // SpriteKit defines SKColor using a macro. #if os(macOS) public typealias SKColor = NSColor #elseif os(iOS) || os(tvOS) || os(watchOS) public typealias SKColor = UIColor #endif // this class only exists to allow AnyObject lookup of _copyImageData // since that method only exists in a private header in SpriteKit, the lookup // mechanism by default fails to accept it as a valid AnyObject call @objc class _SpriteKitMethodProvider : NSObject { override init() { _sanityCheckFailure("don't touch me") } @objc func _copyImageData() -> NSData! { return nil } } @available(iOS, introduced: 10.0) @available(OSX, introduced: 10.12) @available(tvOS, introduced: 10.0) @available(watchOS, introduced: 3.0) extension SKWarpGeometryGrid { /// Create a grid of the specified dimensions, source and destination positions. /// /// Grid dimensions (columns and rows) refer to the number of faces in each dimension. The /// number of vertices required for a given dimension is equal to (cols + 1) * (rows + 1). /// /// SourcePositions are normalized (0.0 - 1.0) coordinates to determine the source content. /// /// DestinationPositions are normalized (0.0 - 1.0) positional coordinates with respect to /// the node's native size. Values outside the (0.0-1.0) range are perfectly valid and /// correspond to positions outside of the native undistorted bounds. /// /// Source and destination positions are provided in row-major order starting from the top-left. /// For example the indices for a 2x2 grid would be as follows: /// /// [0]---[1]---[2] /// | | | /// [3]---[4]---[5] /// | | | /// [6]---[7]---[8] /// /// - Parameter columns: the number of columns to initialize the SKWarpGeometryGrid with /// - Parameter rows: the number of rows to initialize the SKWarpGeometryGrid with /// - Parameter sourcePositions: the source positions for the SKWarpGeometryGrid to warp from /// - Parameter destinationPositions: the destination positions for SKWarpGeometryGrid to warp to public convenience init(columns: Int, rows: Int, sourcePositions: [simd.float2] = [float2](), destinationPositions: [simd.float2] = [float2]()) { let requiredElementsCount = (columns + 1) * (rows + 1) switch (destinationPositions.count, sourcePositions.count) { case (0, 0): self.init(__columns: columns, rows: rows, sourcePositions: nil, destPositions: nil) case (let dests, 0): _precondition(dests == requiredElementsCount, "Mismatch found between rows/columns and positions.") self.init(__columns: columns, rows: rows, sourcePositions: nil, destPositions: destinationPositions) case (0, let sources): _precondition(sources == requiredElementsCount, "Mismatch found between rows/columns and positions.") self.init(__columns: columns, rows: rows, sourcePositions: sourcePositions, destPositions: nil) case (let dests, let sources): _precondition(dests == requiredElementsCount && sources == requiredElementsCount, "Mismatch found between rows/columns and positions.") self.init(__columns: columns, rows: rows, sourcePositions: sourcePositions, destPositions: destinationPositions) } } public func replacingBySourcePositions(positions source: [simd.float2]) -> SKWarpGeometryGrid { return self.__replacingSourcePositions(source) } public func replacingByDestinationPositions(positions destination: [simd.float2]) -> SKWarpGeometryGrid { return self.__replacingDestPositions(destination) } }