summaryrefslogtreecommitdiff
path: root/composeApp/src/commonMain/kotlin/coffee/liz/ecs/World.kt
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)