harmboschloo / elm-ecs / Ecs.EntityComponents

Process or fold entities with a specific subset of component types. The subset is defined by the provided the component specs.

Note: For best performance use the spec with the least amount of components as the first argument, and after that use the spec that results in the least amount of intersections of component types.

Process

Process every entity with a specific subset of component types. The provided callback receives the entity id, the requested components and the world. In the callback the entity will be active in the world, so you can directly query or modify it.

Ecs.EntityComponents.processFromLeft2
    specs.velocity
    specs.position
    (\entityId velocity position currentWorld ->
        Ecs.insertComponent specs.position
            { x = position.x + velocity.x * deltaSeconds
            , y = position.y + velocity.y * deltaSeconds
            }
            currentWorld
    )
    world

processFromLeft : Ecs.Internal.ComponentSpec comparable a components -> (comparable -> a -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the specified component type. Entities are provided from lowest entity id to highest entity id.

processFromRight : Ecs.Internal.ComponentSpec comparable a components -> (comparable -> a -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the specified component type. Entities are provided from highest entity id to lowest entity id.

processFromLeft2 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> (comparable -> a1 -> a2 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 2 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight2 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> (comparable -> a1 -> a2 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 2 specified component types. Entities are provided from highest entity id to lowest entity id.

processFromLeft3 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> (comparable -> a1 -> a2 -> a3 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 3 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight3 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> (comparable -> a1 -> a2 -> a3 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 3 specified component types. Entities are provided from highest entity id to lowest entity id.

processFromLeft4 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 4 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight4 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 4 specified component types. Entities are provided from highest entity id to lowest entity id.

processFromLeft5 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 5 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight5 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 5 specified component types. Entities are provided from highest entity id to lowest entity id.

processFromLeft6 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 6 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight6 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 6 specified component types. Entities are provided from highest entity id to lowest entity id.

processFromLeft7 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 7 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight7 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 7 specified component types. Entities are provided from highest entity id to lowest entity id.

processFromLeft8 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> Ecs.Internal.ComponentSpec comparable a8 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 8 specified component types. Entities are provided from lowest entity id to highest entity id.

processFromRight8 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> Ecs.Internal.ComponentSpec comparable a8 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons) -> Ecs.Internal.World comparable components singletons -> Ecs.Internal.World comparable components singletons

Process entities that contain at least the 8 specified component types. Entities are provided from highest entity id to lowest entity id.

Fold

Fold every entity with a specific subset of component types. The provided callback receives the entity id, the requested components and the provided accumulator. If you want to query or modify the entity in the callback then you have to use Ecs.onEntity first to make it active.

Ecs.EntityComponents.foldFromRight2
    specs.shape
    specs.position
    (\entityId shape position list ->
        ( entityId, shape, position ) :: list
    )
    []
    world

foldFromLeft : Ecs.Internal.ComponentSpec comparable a components -> (comparable -> a -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the specified component type. Entities are provided from lowest entity id to highest entity id.

foldFromRight : Ecs.Internal.ComponentSpec comparable a components -> (comparable -> a -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the specified component type. Entities are provided from highest entity id to lowest entity id.

foldFromLeft2 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> (comparable -> a1 -> a2 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 2 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight2 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> (comparable -> a1 -> a2 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 2 specified component types. Entities are provided from highest entity id to lowest entity id.

foldFromLeft3 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> (comparable -> a1 -> a2 -> a3 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 3 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight3 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> (comparable -> a1 -> a2 -> a3 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 3 specified component types. Entities are provided from highest entity id to lowest entity id.

foldFromLeft4 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 4 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight4 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 4 specified component types. Entities are provided from highest entity id to lowest entity id.

foldFromLeft5 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 5 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight5 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 5 specified component types. Entities are provided from highest entity id to lowest entity id.

foldFromLeft6 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 6 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight6 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 6 specified component types. Entities are provided from highest entity id to lowest entity id.

foldFromLeft7 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 7 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight7 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 7 specified component types. Entities are provided from highest entity id to lowest entity id.

foldFromLeft8 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> Ecs.Internal.ComponentSpec comparable a8 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 8 specified component types. Entities are provided from lowest entity id to highest entity id.

foldFromRight8 : Ecs.Internal.ComponentSpec comparable a1 components -> Ecs.Internal.ComponentSpec comparable a2 components -> Ecs.Internal.ComponentSpec comparable a3 components -> Ecs.Internal.ComponentSpec comparable a4 components -> Ecs.Internal.ComponentSpec comparable a5 components -> Ecs.Internal.ComponentSpec comparable a6 components -> Ecs.Internal.ComponentSpec comparable a7 components -> Ecs.Internal.ComponentSpec comparable a8 components -> (comparable -> a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> acc -> acc) -> acc -> Ecs.Internal.World comparable components singletons -> acc

Fold entities that contain at least the 8 specified component types. Entities are provided from highest entity id to lowest entity id.