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): Set /** * 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 World.query(): Set = query(T::class) @JvmName("query2") inline fun World.query(): Set = query(T1::class, T2::class) @JvmName("query3") inline fun World.query(): Set = query(T1::class, T2::class, T3::class)