From a79df79bf9fa9b527d17bc762b9671cb6504302f Mon Sep 17 00:00:00 2001 From: Christian Treffs Date: Thu, 30 Apr 2020 19:58:09 +0200 Subject: [PATCH] Delete empty families & fix event delegate --- Sources/FirebladeECS/Nexus+FamilyUpdate.swift | 12 +++++++----- Sources/FirebladeECS/NexusEvents.swift | 4 ---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Sources/FirebladeECS/Nexus+FamilyUpdate.swift b/Sources/FirebladeECS/Nexus+FamilyUpdate.swift index cd7d78d..7424b27 100644 --- a/Sources/FirebladeECS/Nexus+FamilyUpdate.swift +++ b/Sources/FirebladeECS/Nexus+FamilyUpdate.swift @@ -13,6 +13,7 @@ extension Nexus { } familyMembersByTraits[traits] = UnorderedSparseSet() + defer { delegate?.nexusEvent(FamilyCreated(family: traits)) } update(familyMembership: traits) } @@ -50,25 +51,26 @@ extension Nexus { case (true, false): add(entityWithId: entityId, toFamilyWithTraits: traits) delegate?.nexusEvent(FamilyMemberAdded(member: entityId, toFamily: traits)) - return case (false, true): remove(entityWithId: entityId, fromFamilyWithTraits: traits) delegate?.nexusEvent(FamilyMemberRemoved(member: entityId, from: traits)) - return default: - return + break } } final func add(entityWithId entityId: EntityIdentifier, toFamilyWithTraits traits: FamilyTraitSet) { - precondition(familyMembersByTraits[traits] != nil) familyMembersByTraits[traits]!.insert(entityId, at: entityId.id) } final func remove(entityWithId entityId: EntityIdentifier, fromFamilyWithTraits traits: FamilyTraitSet) { - precondition(familyMembersByTraits[traits] != nil) familyMembersByTraits[traits]!.remove(at: entityId.id) + if familyMembersByTraits[traits]!.isEmpty { + // delete family if no more entities are present + familyMembersByTraits[traits] = nil + delegate?.nexusEvent(FamilyDestroyed(family: traits)) + } } } diff --git a/Sources/FirebladeECS/NexusEvents.swift b/Sources/FirebladeECS/NexusEvents.swift index e686e6d..d82d1e1 100644 --- a/Sources/FirebladeECS/NexusEvents.swift +++ b/Sources/FirebladeECS/NexusEvents.swift @@ -20,10 +20,6 @@ public struct ComponentAdded: NexusEvent { public let toEntity: EntityIdentifier } -public struct ComponentUpdated: NexusEvent { - public let atEnity: EntityIdentifier -} - public struct ComponentRemoved: NexusEvent { public let component: ComponentIdentifier public let from: EntityIdentifier