blob: fd3b6dfdaae21c2c8c76b8d802d345e3ad3e2569 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package coffee.liz.ecs
import kotlin.jvm.JvmName
import kotlin.reflect.KClass
/**
* The World manages entities and systems.
*/
interface World {
/**
* Create a new entity with a unique ID.
*/
fun createEntity(): Entity
/**
* Destroy an entity and remove it from all caches.
*/
fun destroyEntity(entity: Entity)
/**
* Get all entities that have all the specified component types.
*/
fun query(vararg componentTypes: KClass<out Component>): Set<Entity>
/**
* Update all systems in dependency order.
* @param deltaTime Time elapsed since last update in seconds
*/
fun update(deltaTime: Float)
}
// Convenience extension for queries
@JvmName("query1")
inline fun <reified T : Component> World.query(): Set<Entity> = query(T::class)
@JvmName("query2")
inline fun <reified T1 : Component, reified T2 : Component> World.query(): Set<Entity> =
query(T1::class, T2::class)
@JvmName("query3")
inline fun <reified T1 : Component, reified T2 : Component, reified T3 : Component> World.query(): Set<Entity> =
query(T1::class, T2::class, T3::class)
|