Delete empty families & fix event delegate

This commit is contained in:
Christian Treffs 2020-04-30 19:58:09 +02:00
parent 6600cba5ae
commit a79df79bf9
No known key found for this signature in database
GPG Key ID: 49A4B4B460BE3ED4
2 changed files with 7 additions and 9 deletions

View File

@ -13,6 +13,7 @@ extension Nexus {
}
familyMembersByTraits[traits] = UnorderedSparseSet<EntityIdentifier>()
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))
}
}
}

View File

@ -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