* 查找满足条件的实体 * * Find entity matching predicate. * * @param predicate 查找条件 | Find predicate * @returns 找到的实体或 undefined | Found entity or undefined
(
predicate: (entity: Entity, ...components: InstanceTypes<T>) => boolean
)
| 320 | * @returns 找到的实体或 undefined | Found entity or undefined |
| 321 | */ |
| 322 | public find( |
| 323 | predicate: (entity: Entity, ...components: InstanceTypes<T>) => boolean |
| 324 | ): Entity | undefined { |
| 325 | const entities = this.entities; |
| 326 | const componentTypes = this._componentTypes; |
| 327 | const typeCount = componentTypes.length; |
| 328 | |
| 329 | for (let i = 0, len = entities.length; i < len; i++) { |
| 330 | const entity = entities[i]!; |
| 331 | const components: Component[] = new Array(typeCount); |
| 332 | |
| 333 | for (let j = 0; j < typeCount; j++) { |
| 334 | const component = entity.getComponent(componentTypes[j]!); |
| 335 | if (!component) { |
| 336 | continue; |
| 337 | } |
| 338 | components[j] = component; |
| 339 | } |
| 340 | |
| 341 | if (predicate(entity, ...(components as InstanceTypes<T>))) { |
| 342 | return entity; |
| 343 | } |
| 344 | } |
| 345 | |
| 346 | return undefined; |
| 347 | } |
| 348 | |
| 349 | /** |
| 350 | * 检查是否有任何实体匹配 |
nothing calls this directly
no test coverage detected