diff --git a/.swiftlint.yml b/.swiftlint.yml index b7c1dca..10000ea 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -58,7 +58,7 @@ file_header: \/\/ FirebladeECS \/\/ \/\/ Created by .*? on \d{1,2}\/\d{1,2}\/\d{2}\. - \/\/ Copyright © \d{4} Realm\. All rights reserved\. + \/\/ Copyright © \d{4} Christian Treffs\. All rights reserved\. \/\/ identifier_name: excluded: diff --git a/Sources/FirebladeECS/Family.swift b/Sources/FirebladeECS/Family.swift index 4039441..e40a2e5 100644 --- a/Sources/FirebladeECS/Family.swift +++ b/Sources/FirebladeECS/Family.swift @@ -25,7 +25,7 @@ public final class Family { } var memberIds: UniformEntityIdentifiers { - return nexus!.members(of: self) + return nexus?.members(of: self) ?? UniformEntityIdentifiers() } } diff --git a/Sources/FirebladeECS/Nexus+Component.swift b/Sources/FirebladeECS/Nexus+Component.swift index 931fb68..9331aad 100644 --- a/Sources/FirebladeECS/Nexus+Component.swift +++ b/Sources/FirebladeECS/Nexus+Component.swift @@ -43,12 +43,12 @@ extension Nexus { if componentsByType[componentId] == nil { componentsByType[componentId] = UniformComponents() } - componentsByType[componentId]!.add(component, at: entityIdx) + componentsByType[componentId]?.add(component, at: entityIdx) // assigns the component id to the entity id - if componentIdsByEntity[entityIdx] != nil { - let endIndex: Int = componentIdsByEntity[entityIdx]!.count - componentIdsByEntity[entityIdx]!.append(componentId) // Amortized O(1) + if let compIds = componentIdsByEntity[entityIdx] { + let endIndex: Int = compIds.count + componentIdsByEntity[entityIdx]?.append(componentId) // Amortized O(1) componentIdsByEntityLookup[hash] = endIndex } else { componentIdsByEntity[entityIdx] = ComponentIdentifiers(arrayLiteral: componentId) diff --git a/Sources/FirebladeECS/Nexus+Family.swift b/Sources/FirebladeECS/Nexus+Family.swift index 4c84d58..146a855 100644 --- a/Sources/FirebladeECS/Nexus+Family.swift +++ b/Sources/FirebladeECS/Nexus+Family.swift @@ -131,7 +131,7 @@ private extension Nexus { if familyMembersByTraitHash[traitHash] == nil { familyMembersByTraitHash[traitHash] = UniformEntityIdentifiers() } - familyMembersByTraitHash[traitHash]!.add(entityId, at: entityIdx) + familyMembersByTraitHash[traitHash]?.add(entityId, at: entityIdx) } func remove(from traitHash: FamilyTraitSetHash, entityId: EntityIdentifier, entityIdx: EntityIndex) { diff --git a/Sources/FirebladeECS/SparseSet.swift b/Sources/FirebladeECS/SparseSet.swift index e9fc996..b7478d8 100644 --- a/Sources/FirebladeECS/SparseSet.swift +++ b/Sources/FirebladeECS/SparseSet.swift @@ -46,20 +46,27 @@ public class SparseSet: UniformStorage, Sequence { guard has(index) else { return nil } - return dense[sparse[index]!]!.value + guard let sIdx = sparse[index] else { + return nil + } + return dense[sIdx]?.value } public func remove(at index: Index) { guard has(index) else { return } - let removeIdx: DenseIndex = sparse[index]! + guard let removeIdx: DenseIndex = sparse[index] else { + return + } let lastIdx: DenseIndex = count - 1 dense.swapAt(removeIdx, lastIdx) sparse[index] = nil - let swapped: Pair = dense[removeIdx]! + guard let swapped: Pair = dense[removeIdx] else { + return + } sparse[swapped.key] = removeIdx - _ = dense.popLast()!! + dense.removeLast() size -= 1 if size == 0 { clear(keepingCapacity: false)