diff --git a/Sources/FirebladeECS/Family.swift b/Sources/FirebladeECS/Family.swift index 7634368..b78724b 100644 --- a/Sources/FirebladeECS/Family.swift +++ b/Sources/FirebladeECS/Family.swift @@ -90,21 +90,36 @@ extension Family { } } -// MARK: - Iterator +// MARK: - entity accessors extension Family { - - func forEach(_ body: (Entity) -> Void ) { - members.forEach(body) + public func entities(_ apply: (Entity) -> Void ) { + members.lazy.forEach(apply) } - func reduce(_ initialResult: Result, _ nextPartialResult: (Result, Entity) throws -> Result) rethrows -> Result { - return try members.reduce(initialResult, nextPartialResult) + public func reduce(_ initialResult: Result, _ nextPartialResult: (Result, Entity) throws -> Result) rethrows -> Result { + return try members.lazy.reduce(initialResult, nextPartialResult) } +} - func zip(_ componentTypes: Component.Type) { - - let a = members.map { $0.componentMap.values } - +// MARK: - component accessors +extension Family { + public func component(_ apply: (A) -> Void) { + members.lazy.forEach { $0.component(apply) } + } + public func components(_ apply: (A, B) -> Void) { + members.lazy.forEach { $0.components(apply) } + } + public func components(_ apply: (A, B, C) -> Void) { + members.lazy.forEach { $0.components(apply) } + } + public func components(_ apply: (A, B, C, D) -> Void) { + members.lazy.forEach { $0.components(apply) } + } + public func components(_ apply: (A, B, C, D, E) -> Void) { + members.lazy.forEach { $0.components(apply) } + } + public func components(_ apply: (A, B, C, D, E, F) -> Void) { + members.lazy.forEach { $0.components(apply) } } } diff --git a/Tests/FirebladeECSTests/FamilyTests.swift b/Tests/FirebladeECSTests/FamilyTests.swift index 040e5bf..ae29a86 100644 --- a/Tests/FirebladeECSTests/FamilyTests.swift +++ b/Tests/FirebladeECSTests/FamilyTests.swift @@ -36,8 +36,12 @@ class FamilyTests: XCTestCase { let e3 = entityHub.createEntity() e3 += EmptyComponent() + e3 += Name(name: "Michael") e2.remove(EmptyComponent.self) + family.components { (name: Name, empty: EmptyComponent) in + print(name, empty) + } } }