This commit is contained in:
Christian Treffs 2017-11-03 08:57:05 +01:00
parent a42918501d
commit 4c48aab814
8 changed files with 15 additions and 26 deletions

View File

@ -22,14 +22,14 @@ extension Component {
} }
// MARK: - entity component hashable // MARK: - entity component hashable
internal extension Component { extension Component {
/// Provides XOR hash value from component identifier (aka type) and entity index. /// Provides XOR hash value from component identifier (aka type) and entity index.
/// Is only stable for app runtime. /// Is only stable for app runtime.
/// ///
/// - Parameter entityIdx: entity index /// - Parameter entityIdx: entity index
/// - Returns: combinded entity component hash /// - Returns: combinded entity component hash
internal static func hashValue(using entityIdx: EntityIndex) -> EntityComponentHash { static func hashValue(using entityIdx: EntityIndex) -> EntityComponentHash {
return Self.identifier.hashValue(using: entityIdx) return Self.identifier.hashValue(using: entityIdx)
} }
@ -38,7 +38,7 @@ internal extension Component {
/// ///
/// - Parameter entityIdx: entity index /// - Parameter entityIdx: entity index
/// - Returns: combinded entity component hash /// - Returns: combinded entity component hash
internal func hashValue(using entityIdx: EntityIndex) -> EntityComponentHash { func hashValue(using entityIdx: EntityIndex) -> EntityComponentHash {
return Self.hashValue(using: entityIdx) return Self.hashValue(using: entityIdx)
} }
} }

View File

@ -13,18 +13,18 @@ public protocol UniqueComponentIdentifiable {
var identifier: ComponentIdentifier { get } var identifier: ComponentIdentifier { get }
} }
internal extension ComponentIdentifier { extension ComponentIdentifier {
/// Provides XOR hash value from component identifier (aka type) and entity index. /// Provides XOR hash value from component identifier (aka type) and entity index.
/// Is only stable for app runtime. /// Is only stable for app runtime.
/// ///
/// - Parameter entityIdx: entity index /// - Parameter entityIdx: entity index
/// - Returns: combinded entity component hash /// - Returns: combinded entity component hash
internal func hashValue(using entityIdx: EntityIndex) -> EntityComponentHash { func hashValue(using entityIdx: EntityIndex) -> EntityComponentHash {
return hashValue(using: entityIdx.identifier) return hashValue(using: entityIdx.identifier)
} }
internal func hashValue(using entityId: EntityIdentifier) -> EntityComponentHash { func hashValue(using entityId: EntityIdentifier) -> EntityComponentHash {
return EntityComponentHash.compose(entityId: entityId, componentTypeHash: hashValue) return EntityComponentHash.compose(entityId: entityId, componentTypeHash: hashValue)
} }
} }

View File

@ -37,7 +37,7 @@ extension Entity {
return nexus.isValid(entity: self) return nexus.isValid(entity: self)
} }
internal func invalidate() { func invalidate() {
identifier = EntityIdentifier.invalid identifier = EntityIdentifier.invalid
name = nil name = nil
} }

View File

@ -43,7 +43,7 @@ extension Family {
return nexus?.isMember(entityId, in: self) ?? false return nexus?.isMember(entityId, in: self) ?? false
} }
internal var memberIds: UniformEntityIdentifiers { var memberIds: UniformEntityIdentifiers {
return nexus!.members(of: self) return nexus!.members(of: self)
} }
} }

View File

@ -68,11 +68,11 @@ public class ManagedContiguousArray: UniformStorage {
_store.removeAll(keepingCapacity: keepingCapacity) _store.removeAll(keepingCapacity: keepingCapacity)
} }
internal func needsToGrow(_ index: Index) -> Bool { func needsToGrow(_ index: Index) -> Bool {
return index > _store.count - 1 return index > _store.count - 1
} }
internal func grow(including index: Index) { func grow(including index: Index) {
let newCapacity: Int = nearest(to: index) let newCapacity: Int = nearest(to: index)
let newCount: Int = newCapacity-_store.count let newCount: Int = newCapacity-_store.count
for _ in 0..<newCount { for _ in 0..<newCount {
@ -80,7 +80,7 @@ public class ManagedContiguousArray: UniformStorage {
} }
} }
internal func nearest(to index: Index) -> Int { func nearest(to index: Index) -> Int {
let delta = Float(index) / Float(ManagedContiguousArray.chunkSize) let delta = Float(index) / Float(ManagedContiguousArray.chunkSize)
let multiplier = Int(delta) + 1 let multiplier = Int(delta) + 1
return multiplier * ManagedContiguousArray.chunkSize return multiplier * ManagedContiguousArray.chunkSize

View File

@ -34,7 +34,6 @@ extension Nexus {
assert(false, "no component set defined for entity: \(entity)") assert(false, "no component set defined for entity: \(entity)")
return false return false
} }
// FIXME: may be a bottle neck
let componentSet: ComponentSet = ComponentSet.init(componentIds) let componentSet: ComponentSet = ComponentSet.init(componentIds)
return family.traits.isMatch(components: componentSet) return family.traits.isMatch(components: componentSet)
} }
@ -73,14 +72,14 @@ extension Nexus {
} }
/// will be called on family init defer /// will be called on family init defer
internal func onFamilyInit(family: Family) { func onFamilyInit(family: Family) {
// FIXME: this is costly for many entities // FIXME: this is costly for many entities
for entity: Entity in entityStorage { for entity: Entity in entityStorage {
update(membership: family, for: entity.identifier) update(membership: family, for: entity.identifier)
} }
} }
internal func onFamilyDeinit(traitHash: FamilyTraitSetHash) { func onFamilyDeinit(traitHash: FamilyTraitSetHash) {
for member in members(of: traitHash) { for member in members(of: traitHash) {
remove(from: traitHash, entityId: member, entityIdx: member.index) remove(from: traitHash, entityId: member, entityIdx: member.index)
} }

View File

@ -1,10 +0,0 @@
//
// Profiler.swift
// FirebladeECS
//
// Created by Christian Treffs on 28.10.17.
//
struct Profiler {
}

View File

@ -23,8 +23,8 @@ public class SparseSet<Element>: UniformStorage, Sequence {
} }
public var count: Int { return size } public var count: Int { return size }
internal var capacitySparse: Int { return sparse.capacity } var capacitySparse: Int { return sparse.capacity }
internal var capacityDense: Int { return dense.capacity } var capacityDense: Int { return dense.capacity }
public func has(_ index: Index) -> Bool { public func has(_ index: Index) -> Bool {
return sparse[index] ?? Int.max < count && return sparse[index] ?? Int.max < count &&