- Adds command buffers support for deferred structural operations (#670).
- Adds the possibility to specify that a query column is read-only (#677).
- Adds
DiskVectorandDiskStructArrayto use the disk for components in very large simulations (#656). - Adds
GPUVector{:CPU}andGPUStructArray{:CPU}to use a GPU storage on devices which do not have a GPU (#701). - Adds the
boxedkeyword argument to the world constructor, which cuts the compilation cost of Ark, at the price of some slowdown in performance. - Adds
get_components,set_components!andhas_componentsfor aQuery, to access the components of a query for a single entity without iterating or closing the query.EntityHandlenow works with queries as well, i.e.query[entity][Position].
unregister!andregister!now require the world as an argument (#660).- API functions for
QueryandFilternow require the world as an argument (#662). lengthfor a filter has been renamed tocount_tables(#662).
- Structural operations are now up to 2x faster (#662, #690).
- Operations executed on the CPU with a GPU storage are almost overhead-less in respect to CPU only storage (#701).
- Compile time performance is improved through a better internal specialization mechanism (#662).
- Component registration no longer compiles one
Dictinsertion per component type during world construction. - Getting components performance improved by 10% (#664).
- Fixed some unsound usages of internals and function not respecting assumptions in generated functions (#651)
- Components are registered as relations at world construction instead of at type definition for better extensibility (#626, #627).
- The relationship API has been rewritten to be less verbose and redundant, by coupling together the components with the chosen relation in one statement (#614, #625).
observe!(world, observer; unregister=true)has been removed in favour ofregister!(observer)andunregister!(observer)(#574)EventTypeis renamed toEvent(#573)
- Adds support for sorting tables based on filters (#600, #615)
- Adds support for partitioning tables based on filters (#620)
- Adds support for adding an arbitrary number of events, before it was capped to 64 (#573)
- Inference on API has been improved substantially, fixing some issues with dynamic dispatch (#637)
- Queries with relations are now non-allocating (#641)
- Many batch operations are up to 3x faster thanks to simd (#575)
- Many single entity operations are now 10-20% faster thanks to table caching in transitions (#555)
- Inactive component columns are shared between tables to reduce memory usage in fragmented worlds (#648)
- Fixes bugs related to relationship being accepted even for stale entities with recycled ids (#605, #604)
- Fixes a bug where removing multiple relation targets of the same entity caused an error (#611, fixes #606)
- Storage modes wrap the storage types instead of using unrelated types (#437)
- Adds support for user-defined storage types (#437)
- Adds new types
GPUVectorandGPUStructArraywhich can be used to offload work to the GPU (#470, #476, #483) - Makes the locking mechanism thread-safe for parallel queries (#536, #537)
- Adds support for shuffling tables based on filters (#527)
- Adds support for UniqueVector storage (#481)
- Add an unchecked macro to trade-off safety for speed (#521, #522, #531)
- Fix copy on special mutable types (#515, fixes #514)
- Adds a demo of a nbody model to show GPU computing (#523)
- Closing an already closed query is a no-op instead of raising an error (#493)
- Fixes error on batch-remove relation targets (#506, fixes #498)
- Fixes filter matching wrong, recycled relation target (#508, fixes #497)
- Fixes skipping filters that were unregistered (#510, fixes #499)
- Fixes recycling relation tables, which caused missed entities (#484, fixes #477)
- Batch entity creation uses a callback/
do-block instead of an iterator (#400)
- Adds entity relationships (#340, #349)
- Adds events for relationship changes (#370)
- Adds re-usable filters for query construction (#375, #413)
- Adds cached/registered filters for faster query iteration with many archetypes (#378)
- Adds batch entity removal (#396, #402)
- Adds batch-setting entity relation targets (#406)
- Adds batched versions of adding, removing and exchanging components (#408)
- Makes Ark compatible with Mooncake.jl (#405)
- Uses a hash table for some component transitions, with up t0 30% speedup (#348)
- Uses
push!instead ofresize!+setindex!for moving and creating components (#439) - Caches the last component transition, with 15-35% speedup (#448)
- Adds a chapter on Ark's architecture to the user manual (#391, #394)
- Fixes missing swaps in archetypes when removing components (#432, fixes #430)
- Ark.jl moved from the personal account of its initiator to the ark-ecs organization
- Removes the macros for the convenient tuple syntax, the syntax is used in ordinary functions now (#305)
- Throws more explicit exception types instead of generic
ErrorException(#202) - Query argument
optionaladds further components instead of making existing ones optional (#253)
- Adds an event system with events for structural changes as well as custom events (#155)
- Adds storage modes Vector and StructArray, which can be selected per component type (#207, #225)
- Adds field view, so field access for query columns works equally for Vector and StructArray storages (#213)
- Adds support to manage an arbitrary number of components in the
World(#230, #327, #330) - Adds
@copy_entity!for copying an entity and optionally adding and removing components (#262, #266) - Adds keyword argument
initial_capacityto World constructor (#288) - Adds function
reset!for resetting and reusing a world to avoid reallocations (#292) - Adds function
lengthfor queries and batches (#298) - Adds function
count_entitiesfor queries and batches (#316)
- Adaptive bit-mask size, depending on the number of components in the world (#237, #250)
- Avoids unions in queries without optional components, speeding up query iteration (#246)
- Adds an animated logo demo (#268)
- Adds a basic SIR demo (#324)
- Adds a demo of an evolutionary model for grazers (#325)
- Adds a demo with travelers on a network (#334)
- Adds a boids/flocking demo (#337)
- Adds a page listing all demos with screenshots in the user manual (#339)
- Improves error messages when passing components types as
(A, B)instead of the requiredVal.((A, B))(#191) - Checks for duplicate components on query construction (#255)
- Improves string representations of all exposed types (#275)
- Fix broken archetype pre-selection in queries (#301)
Initial release of Ark.jl.