fireblade-ecs/Sources/FirebladeECS/Nexus+Family.swift

37 lines
1.2 KiB
Swift

//
// Nexus+Family.swift
// FirebladeECS
//
// Created by Christian Treffs on 13.10.17.
//
extension Nexus {
public final var numFamilies: Int {
familyMembersByTraits.keys.count
}
public func canBecomeMember(_ entity: Entity, in traits: FamilyTraitSet) -> Bool {
guard let componentIds = componentIdsByEntity[entity.identifier] else {
assertionFailure("no component set defined for entity: \(entity)")
return false
}
return traits.isMatch(components: componentIds)
}
public func members(withFamilyTraits traits: FamilyTraitSet) -> UnorderedSparseSet<EntityIdentifier, EntityIdentifier.Idx> {
familyMembersByTraits[traits] ?? UnorderedSparseSet<EntityIdentifier, EntityIdentifier.Idx>()
}
public func isMember(_ entity: Entity, in family: FamilyTraitSet) -> Bool {
isMember(entity.identifier, in: family)
}
public func isMember(_ entityId: EntityIdentifier, in family: FamilyTraitSet) -> Bool {
isMember(entity: entityId, inFamilyWithTraits: family)
}
public func isMember(entity entityId: EntityIdentifier, inFamilyWithTraits traits: FamilyTraitSet) -> Bool {
members(withFamilyTraits: traits).contains(entityId.id)
}
}