8000
Skip to content

simsurace/Ark.jl

 
 

Repository files navigation

Ark.jl Logo

Build Status Coverage Aqua QA JET Docs stable Docs dev GitHub MIT license Apache 2.0 license

Ark.jl is an archetype-based Entity Component System (ECS) for Julia. It is a port of the Go ECS Ark.

——

Features   •   Installation   •   Usage

Features

Installation

Run this to add Ark.jl to a Julia project:

using Pkg
Pkg.add("Ark")

Usage

Here is the classical Position/Velocity example that every ECS shows in the docs.

See the Manual, API docs and demos for more details.

using Ark

"""Position component"""
struct Position
    x::Float64
    y::Float64
end

"""Velocity component"""
struct Velocity
    dx::Float64
    dy::Float64
end

# Create a world with the required components
world = World(Position, Velocity)

for i in 1:1000
    # Create an entity with components
    entity = new_entity!(world, (Position(i, i * 2), Velocity(1, 1)))
end

# Time loop
for i in 1:10
    # Iterate a query (archetypes)
    for (entities, positions, velocities) in @Query(world, (Position, Velocity))
        # Iterate entities in the current archetype
        @inbounds for i in eachindex(entities)
            # Get components of the current entity
            pos = positions[i]
            vel = velocities[i]
            # Update an (immutable) component
            positions[i] = Position(pos.x + vel.dx, pos.y + vel.dy)
        end
    end
end

License

Ark.jl and all its sources and documentation are distributed under the MIT license and the Apache 2.0 license, as your options.

About

Ark.jl -- Archetype-based Entity Component System (ECS) for Julia.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Julia 100.0%
0