Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions Sources/GameWidget/Commons/Display.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,26 @@ public struct Display {
public init() {}

/// ``Display/Single`` の ``Display/Single/place(block:)`` により生成され, 二つの ``WidgetList`` を保持します.
public struct Link<T: WidgetList, U: WidgetList> {
public struct Link<T: WidgetListProtocol, U: WidgetListProtocol> {
let value: (T, U)
}

/// 一つの widget から ``Display/Link`` を生成するためのラッパー.
/// ``Display`` の ``Display/place(block:)`` により生成され, 一つの ``WidgetList`` を保持します.
public struct Single<T: WidgetList> {
public struct Single<T: WidgetListProtocol> {
let value: T
}

}

public extension Display {
func place<T: WidgetList>(@GroupBuilder block: () -> T) -> Display.Single<T> {
func place<T: WidgetListProtocol>(@GroupBuilder block: () -> T) -> Display.Single<T> {
.init(value: block())
}
}

extension Display.Link: Widget, WidgetList {
public func place<V: WidgetList>(@GroupBuilder block: () -> V) -> Display.Link<Self, V> {
extension Display.Link: Widget, WidgetListProtocol {
public func place<V: WidgetListProtocol>(@GroupBuilder block: () -> V) -> Display.Link<Self, V> {
.init(value: (self, block()))
}

Expand All @@ -51,8 +51,8 @@ extension Display.Link: Widget, WidgetList {
}
}

extension Display.Single: Widget, WidgetList {
public func place<U: WidgetList>(@GroupBuilder block: () -> U) -> Display.Link<Self, U> {
extension Display.Single: Widget, WidgetListProtocol {
public func place<U: WidgetListProtocol>(@GroupBuilder block: () -> U) -> Display.Link<Self, U> {
.init(value: (self, block()))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import SpriteKit

/// widget 数を増やす際に使用します. 10 個以下の widget を内包することができます.
/// - note: モディファイアはありませんが, メモリのオーバーヘッドがありません.
public struct Extension<Content: WidgetList>: WidgetListElementType {
public struct Extension<Content: WidgetListProtocol>: WidgetListElementType {

var content: Content

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import SpriteKit

/// 10 個以下の widget を一つの widget としてまとめます. 座標, スケール, 回転を内包するコンテンツと共に調整することができます.
public struct NodeWidget<Content: WidgetList>: Widget, ContextPresentPlugIn {
public struct NodeWidget<Content: WidgetListProtocol>: Widget, ContextPresentPlugIn {
public typealias Context = NodeContext
public var content: Content

Expand Down
196 changes: 196 additions & 0 deletions Sources/GameWidget/Commons/WidgetList/WidgetList.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
//
// WidgetList.swift
//
//
// Created by rrbox on 2023/04/09.
//

import SpriteKit

// 一つの widget から RecursiveGroup を生成するためのラッパー.
struct Single<T: WidgetListElementType>: WidgetListProtocol {

var widget: T

func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widget.addTo(buffer: &result, center: center)
return result
}

}

public struct WidgetList2<C0: WidgetListElementType, C1: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1)

public init(_ c0: C0, _ c1: C1) {
self.widgets = (c0, c1)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
return result
}

}

public struct WidgetList3<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2)

public init(_ c0: C0, _ c1: C1, _ c2: C2) {
self.widgets = (c0, c1, c2)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
return result
}

}

public struct WidgetList4<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3) {
self.widgets = (c0, c1, c2, c3)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
return result
}

}

public struct WidgetList5<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType, C4: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3, C4)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4) {
self.widgets = (c0, c1, c2, c3, c4)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
self.widgets.4.addTo(buffer: &result, center: center)
return result
}

}

public struct WidgetList6<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType, C4: WidgetListElementType, C5: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3, C4, C5)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5) {
self.widgets = (c0, c1, c2, c3, c4, c5)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
self.widgets.4.addTo(buffer: &result, center: center)
self.widgets.5.addTo(buffer: &result, center: center)
return result
}
}

public struct WidgetList7<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType, C4: WidgetListElementType, C5: WidgetListElementType, C6: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3, C4, C5, C6)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6) {
self.widgets = (c0, c1, c2, c3, c4, c5, c6)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
self.widgets.4.addTo(buffer: &result, center: center)
self.widgets.5.addTo(buffer: &result, center: center)
self.widgets.6.addTo(buffer: &result, center: center)
return result
}
}

public struct WidgetList8<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType, C4: WidgetListElementType, C5: WidgetListElementType, C6: WidgetListElementType, C7: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3, C4, C5, C6, C7)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7) {
self.widgets = (c0, c1, c2, c3, c4, c5, c6, c7)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
self.widgets.4.addTo(buffer: &result, center: center)
self.widgets.5.addTo(buffer: &result, center: center)
self.widgets.6.addTo(buffer: &result, center: center)
self.widgets.7.addTo(buffer: &result, center: center)
return result
}
}

public struct WidgetList9<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType, C4: WidgetListElementType, C5: WidgetListElementType, C6: WidgetListElementType, C7: WidgetListElementType, C8: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3, C4, C5, C6, C7, C8)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8) {
self.widgets = (c0, c1, c2, c3, c4, c5, c6, c7, c8)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
self.widgets.4.addTo(buffer: &result, center: center)
self.widgets.5.addTo(buffer: &result, center: center)
self.widgets.6.addTo(buffer: &result, center: center)
self.widgets.7.addTo(buffer: &result, center: center)
self.widgets.8.addTo(buffer: &result, center: center)
return result
}
}

public struct WidgetList10<C0: WidgetListElementType, C1: WidgetListElementType, C2: WidgetListElementType, C3: WidgetListElementType, C4: WidgetListElementType, C5: WidgetListElementType, C6: WidgetListElementType, C7: WidgetListElementType, C8: WidgetListElementType, C9: WidgetListElementType>: WidgetListProtocol {
let widgets: (C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)

public init(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8, _ c9: C9) {
self.widgets = (c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)
}

public func widgetNodes(center: WidgetNotificationSystem) -> [SKNode] {
var result = [SKNode]()
self.widgets.0.addTo(buffer: &result, center: center)
self.widgets.1.addTo(buffer: &result, center: center)
self.widgets.2.addTo(buffer: &result, center: center)
self.widgets.3.addTo(buffer: &result, center: center)
self.widgets.4.addTo(buffer: &result, center: center)
self.widgets.5.addTo(buffer: &result, center: center)
self.widgets.6.addTo(buffer: &result, center: center)
self.widgets.7.addTo(buffer: &result, center: center)
self.widgets.8.addTo(buffer: &result, center: center)
self.widgets.9.addTo(buffer: &result, center: center)
return result
}
}
Loading