Skip to content

Commit

Permalink
Merge pull request #113 from rrbox/develop
Browse files Browse the repository at this point in the history
v4.0.1
  • Loading branch information
rrbox committed Oct 9, 2023
2 parents 100fb92 + c38adf7 commit ac26e6f
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 93 deletions.
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version:5.5
// swift-tools-version:5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription
Expand Down
1 change: 0 additions & 1 deletion Sources/SKNodeBuilder/Foundation/Builder/Builder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import SpriteKit

/// ビルダーの起点となる構造体です.
public struct Builder<Generator: GeneratorProtocol, T: ProcessorProtocol> where Generator.Node == T.Mod.Node {

let generator: Generator
let processor: T

Expand Down
3 changes: 1 addition & 2 deletions Sources/SKNodeBuilder/Foundation/Builder/BuilderSetup.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,17 @@ public extension Builder {
self.processor = Blank<Node>(modData: .init())
self.generator = Blank<Node>(modData: .init())
}

}

public extension Builder where Generator == Blank<T.Node> {

func setGenerator<U: GeneratorProtocol>(_ generator: U) -> Builder<U, T> {
.init(generator, processor: self.processor)
}

}

public extension Builder where T == Blank<Generator.Node> {

func setProcessor<U: ProcessorProtocol>(_ processor: U) -> Builder<Generator, U> {
.init(self.generator, processor: processor)
}
Expand Down
9 changes: 1 addition & 8 deletions Sources/SKNodeBuilder/Foundation/Processor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import SpriteKit
///
/// 作成した modifier オブジェクトは, BuilderProtocol の `modifier(mod:)` にセットして使用します.
public protocol Modifier {

/// SKNode のサブクラス.
associatedtype Node: SKNode

Expand All @@ -22,18 +21,15 @@ public protocol Modifier {

/// ビルダーを定義します.
public protocol ProcessorProtocol {

associatedtype Mod: Modifier
typealias Node = Mod.Node
var modData: Mod { get set }
func mod(node: Mod.Node)

}

public extension ProcessorProtocol {

typealias Next<T: Modifier> = Link<Self, T> where T.Node == Self.Mod.Node
typealias Node = Self.Mod.Node

/// ビルダーで定義されたプロセスを任意のノードに対して実行します.
func process(node: Self.Mod.Node) {
self.mod(node: node)
Expand All @@ -47,15 +43,13 @@ public extension ProcessorProtocol {
}

extension Modifier {

static func link<T: ProcessorProtocol>(from mod: Self, previous: T) -> Link<T, Self> where T.Mod.Node == Self.Node {
.init(previous: previous, modData: mod)
}

}

public struct Link<Previous: ProcessorProtocol, Mod: Modifier>: ProcessorProtocol where Previous.Mod.Node == Mod.Node {

var previous: Previous
public var modData: Mod

Expand All @@ -72,7 +66,6 @@ public struct Empty<Node: SKNode>: Modifier {

/// モディファイアの起点となる構造体です.
public struct Processor<Node: SKNode>: ProcessorProtocol {

public typealias Mod = Empty<Node>

public func mod(node: Node) {}
Expand Down
2 changes: 0 additions & 2 deletions Sources/SKNodeBuilder/Label/LabelGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import SpriteKit

public enum LabelGenerators {

public struct FontNamed<Node: SKLabelNode>: DefaultNodeGenerator {
let fontName: String?
public func node() -> Node {
Expand All @@ -33,7 +32,6 @@ public enum LabelGenerators {
}

public extension Generators where Node: SKLabelNode {

static func make(fontNamed fontName: String?) -> LabelGenerators.FontNamed<Node> {
.init(fontName: fontName)
}
Expand Down
15 changes: 0 additions & 15 deletions Sources/SKNodeBuilder/Label/LabelProcessor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ public typealias LabelProcessor<Node: SKLabelNode> = Processor<Node>

/// Name space of SKLabelNode builder's modifiers.
public enum LabelModifiers {

public struct Text<Node: SKLabelNode>: Modifier {

var body: String?

public func mod(node: Node) {
Expand All @@ -23,7 +21,6 @@ public enum LabelModifiers {
}

public struct AttributedText<Node: SKLabelNode>: Modifier {

var body: NSAttributedString

public func mod(node: Node) {
Expand All @@ -33,7 +30,6 @@ public enum LabelModifiers {
}

public struct FontColor<Node: SKLabelNode>: Modifier {

var body: SKColor?

public func mod(node: Node) {
Expand All @@ -43,7 +39,6 @@ public enum LabelModifiers {
}

public struct FontName<Node: SKLabelNode>: Modifier {

var body: String?

public func mod(node: Node) {
Expand All @@ -53,7 +48,6 @@ public enum LabelModifiers {
}

public struct FontSize<Node: SKLabelNode>: Modifier {

var body: CGFloat

public func mod(node: Node) {
Expand All @@ -63,7 +57,6 @@ public enum LabelModifiers {
}

public struct VerticalAlignment<Node: SKLabelNode>: Modifier {

var body: SKLabelVerticalAlignmentMode

public func mod(node: Node) {
Expand All @@ -73,7 +66,6 @@ public enum LabelModifiers {
}

public struct HorizontalAlignment<Node: SKLabelNode>: Modifier {

var body: SKLabelHorizontalAlignmentMode

public func mod(node: Node) {
Expand All @@ -83,7 +75,6 @@ public enum LabelModifiers {
}

public struct PreferredMaxLayoutWidth<Node: SKLabelNode>: Modifier {

var body: CGFloat

public func mod(node: Node) {
Expand All @@ -93,7 +84,6 @@ public enum LabelModifiers {
}

public struct LineBreakMode<Node: SKLabelNode>: Modifier {

var body: NSLineBreakMode

public func mod(node: Node) {
Expand All @@ -103,7 +93,6 @@ public enum LabelModifiers {
}

public struct NumberOfLines<Node: SKLabelNode>: Modifier {

var body: Int

public func mod(node: Node) {
Expand All @@ -113,7 +102,6 @@ public enum LabelModifiers {
}

public struct Color<Node: SKLabelNode>: Modifier {

var body: SKColor

public func mod(node: Node) {
Expand All @@ -123,7 +111,6 @@ public enum LabelModifiers {
}

public struct ColorBlendFactor<Node: SKLabelNode>: Modifier {

var body: CGFloat

public func mod(node: Node) {
Expand All @@ -133,7 +120,6 @@ public enum LabelModifiers {
}

public struct BlendMode<Node: SKLabelNode>: Modifier {

var body: SKBlendMode

public func mod(node: Node) {
Expand All @@ -145,7 +131,6 @@ public enum LabelModifiers {
}

public extension ProcessorProtocol where Node: SKLabelNode {

func text(_ value: String?) -> Next<LabelModifiers.Text<Node>> {
self.modifier(mod: LabelModifiers.Text(body: value))
}
Expand Down
43 changes: 15 additions & 28 deletions Sources/SKNodeBuilder/Node/SKNodeProcessor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,87 +9,78 @@ import SpriteKit

/// Name space of all SKNode subclass builder's modifiers.
public enum StandardModifiers {

/// 座標変更のためのモディファイアです.
public struct Position<Node: SKNode>: Modifier {

public var body: CGPoint

public func mod(node: Node) {
node.position = self.body
}

}

/// x, y スケールを変更するためのモディファイアです.
public struct Scale<Node: SKNode>: Modifier {

public var body: CGFloat

public func mod(node: Node) {
node.setScale(self.body)
}

}

/// x スケールを変更するためのモディファイアです.
public struct XScale<Node: SKNode>: Modifier {

public var body: CGFloat

public func mod(node: Node) {
node.xScale = self.body
}

}

/// y スケールを変更するためのモディファイアです.
public struct YScale<Node: SKNode>: Modifier {

public var body: CGFloat

public func mod(node: Node) {
node.yScale = self.body
}

}

/// zPosition を変更するためのモディファイアです.
public struct ZPosition<Node: SKNode>: Modifier {

public var body: CGFloat

public func mod(node: Node) {
node.zPosition = self.body
}

}

/// zRotation を変更するためのモディファイアです.
public struct ZRotation<Node: SKNode>: Modifier {

public var body: CGFloat

public func mod(node: Node) {
node.zRotation = self.body
}

}

/// alpha を変更するためのモディファイアです.
public struct Alpha<Node: SKNode>: Modifier {

var body: CGFloat

public func mod(node: Node) {
node.alpha = self.body
}

}

/// name を変更するためのモディファイアです.
public struct Name<Node: SKNode>: Modifier {

var body: String?

public func mod(node: Node) {
Expand All @@ -101,25 +92,23 @@ public enum StandardModifiers {
/// ``doc:SKNodeBuilder/ProcessorProtocol/addChild(builder:)`` を行うためのモディフィアです.
/// ビルダーオブジェクトから `node()` メソッドにより生成さたノードを子ノードとして追加します.
public struct AddChildBuilder<Generator: GeneratorProtocol, T: ProcessorProtocol, Node: SKNode> where Generator.Node == T.Mod.Node {

var body: Builder<Generator, T>

// public func mod(node: Node) {
// node.addChild(self.body.node())
// }
//
// public func mod(node: Node) {
// node.addChild(self.body.node())
// }
//
}

/// ``doc:SKNodeBuilder/ProcessorProtocol/addChild(_:withNode:)``を行うためのモディフィアです.
///
/// ビルダーオブジェクトから `process(node:)` メソッドで編集されたノードを子ノードとして追加します.
public struct AddChildWithNode<T: ProcessorProtocol, Node: SKNode>: Modifier {

var body: T
unowned let childNode: T.Node

public func mod(node: Node) {
// ここで signal SIGABRT エラーが出た場合, 設定したノードのメモリが解放されている可能性があります.
// ここで signal SIGABRT エラーが出た場合, 設定したノードのメモリが解放されている可能性があります.
self.body.process(node: self.childNode)
node.addChild(self.childNode)
}
Expand All @@ -130,27 +119,25 @@ public enum StandardModifiers {
///
/// ノードをそのまま子ノードとして追加します.
public struct AddChild<T: SKNode, Node: SKNode>: Modifier {

unowned let body: T

public func mod(node: Node) {
// ここで signal SIGABRT エラーが出た場合, 設定したノードのメモリが解放されている可能性があります.
// ここで signal SIGABRT エラーが出た場合, 設定したノードのメモリが解放されている可能性があります.
node.addChild(self.body)
}

}



}

extension StandardModifiers.AddChildBuilder: Modifier where Generator: DefaultNodeGenerator {
public func mod(node: Node) {
node.addChild(self.body.node())
}

}

public extension ProcessorProtocol {

/// 座標を変更します.
func position(_ value: CGPoint) -> Next<StandardModifiers.Position<Node>> {
self.modifier(mod: StandardModifiers.Position(body: value))
Expand Down

0 comments on commit ac26e6f

Please sign in to comment.