Tokamak/Sources/TokamakCore/App/Scenes/SceneBuilder.swift

295 lines
6.3 KiB
Swift

// Copyright 2020 Tokamak contributors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Created by Carson Katri on 7/16/20.
//
@resultBuilder
public enum SceneBuilder {
public static func buildBlock<Content: Scene>(_ content: Content) -> some Scene {
content
}
}
// swiftlint:disable large_tuple
// swiftlint:disable function_parameter_count
public extension SceneBuilder {
static func buildBlock<C0, C1>(_ c0: C0, _ c1: C1) -> some Scene where C0: Scene,
C1: Scene
{
_TupleScene(
(c0, c1),
children: [_AnyScene(c0), _AnyScene(c1)],
visit: {
$0.visit(c0)
$0.visit(c1)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2>(_ c0: C0, _ c1: C1, _ c2: C2) -> some Scene
where C0: Scene, C1: Scene, C2: Scene
{
_TupleScene(
(c0, c1, c2),
children: [_AnyScene(c0), _AnyScene(c1), _AnyScene(c2)],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene {
_TupleScene(
(c0, c1, c2, c3),
children: [_AnyScene(c0), _AnyScene(c1), _AnyScene(c2), _AnyScene(c3)],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3, C4>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3,
_ c4: C4
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene, C4: Scene {
_TupleScene(
(c0, c1, c2, c3, c4),
children: [_AnyScene(c0), _AnyScene(c1), _AnyScene(c2), _AnyScene(c3), _AnyScene(c4)],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
$0.visit(c4)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3, C4, C5>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3,
_ c4: C4,
_ c5: C5
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene, C4: Scene,
C5: Scene
{
_TupleScene(
(c0, c1, c2, c3, c4, c5),
children: [
_AnyScene(c0),
_AnyScene(c1),
_AnyScene(c2),
_AnyScene(c3),
_AnyScene(c4),
_AnyScene(c5),
],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
$0.visit(c4)
$0.visit(c5)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3, C4, C5, C6>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3,
_ c4: C4,
_ c5: C5,
_ c6: C6
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene,
C4: Scene, C5: Scene, C6: Scene
{
_TupleScene(
(c0, c1, c2, c3, c4, c5, c6),
children: [
_AnyScene(c0),
_AnyScene(c1),
_AnyScene(c2),
_AnyScene(c3),
_AnyScene(c4),
_AnyScene(c5),
_AnyScene(c6),
],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
$0.visit(c4)
$0.visit(c5)
$0.visit(c6)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3,
_ c4: C4,
_ c5: C5,
_ c6: C6,
_ c7: C7
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene, C4: Scene, C5: Scene, C6: Scene,
C7: Scene
{
_TupleScene(
(c0, c1, c2, c3, c4, c5, c6, c7),
children: [
_AnyScene(c0),
_AnyScene(c1),
_AnyScene(c2),
_AnyScene(c3),
_AnyScene(c4),
_AnyScene(c5),
_AnyScene(c6),
_AnyScene(c7),
],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
$0.visit(c4)
$0.visit(c5)
$0.visit(c6)
$0.visit(c7)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3,
_ c4: C4,
_ c5: C5,
_ c6: C6,
_ c7: C7,
_ c8: C8
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene, C4: Scene, C5: Scene, C6: Scene,
C7: Scene, C8: Scene
{
_TupleScene(
(c0, c1, c2, c3, c4, c5, c6, c7, c8),
children: [
_AnyScene(c0),
_AnyScene(c1),
_AnyScene(c2),
_AnyScene(c3),
_AnyScene(c4),
_AnyScene(c5),
_AnyScene(c6),
_AnyScene(c7),
_AnyScene(c8),
],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
$0.visit(c4)
$0.visit(c5)
$0.visit(c6)
$0.visit(c7)
$0.visit(c8)
}
)
}
}
public extension SceneBuilder {
static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9>(
_ c0: C0,
_ c1: C1,
_ c2: C2,
_ c3: C3,
_ c4: C4,
_ c5: C5,
_ c6: C6,
_ c7: C7,
_ c8: C8,
_ c9: C9
) -> some Scene where C0: Scene, C1: Scene, C2: Scene, C3: Scene, C4: Scene, C5: Scene, C6: Scene,
C7: Scene, C8: Scene, C9: Scene
{
_TupleScene(
(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9),
children: [
_AnyScene(c0),
_AnyScene(c1),
_AnyScene(c2),
_AnyScene(c3),
_AnyScene(c4),
_AnyScene(c5),
_AnyScene(c6),
_AnyScene(c7),
_AnyScene(c8),
_AnyScene(c9),
],
visit: {
$0.visit(c0)
$0.visit(c1)
$0.visit(c2)
$0.visit(c3)
$0.visit(c4)
$0.visit(c5)
$0.visit(c6)
$0.visit(c7)
$0.visit(c8)
$0.visit(c9)
}
)
}
}