Skip to content

Releases: mlange-42/arche

Arche v0.6.2

07 Apr 22:36
Compare
Choose a tag to compare

Performance

  • Speed up generating world stats by factor 10, by re-using WorldStats object (#210)

Arche v0.6.1

04 Apr 22:51
1edddc7
Compare
Choose a tag to compare

Documentation

Arche v0.6.0

31 Mar 10:42
edbd96a
Compare
Choose a tag to compare

🚀 Arche v0.6.0 features fast batch entity creation and deletion, cached filters, and many internal optimizations. 🚀

Highlights

  • Batch creation and deletion of entities, with up to 4x and 10x speedup, respectively. Even more when combined with World.Reset().
  • Cached filters for handling many archetypes and complex queries without slowdown.
  • A lot of internal performance optimizations.

Breaking changes

  • Generic mappers do no longer return all components when creating entities or components (#145)
  • Resources API moved out of the world, to a helper to get by World.Resources() (#150)
  • World.Reset() does no longer remove the component change listener (#157)
  • Removes methods filter.ALL.Not() and filter.ANY.Not(), use NoneOf() and AnyNot() instead (#160)
  • World listener function takes a pointer to the EntityEvent instead of a copy as argument (#162)

Features

  • Adds method World.Reset(), to allow for more efficient systematic simulations (#138)
  • Adds World.Batch() helper for performing optimized batch-creation and batch-removal of entities (#149)
  • Adds method Mask.Exclusive() to create a filter matching an exact component composition (#149, #188)
  • Generic mappers (Map1, ...) have methods NewEntities, NewEntitiesWith and RemoveEntities for batch operations (#151)
  • Batch-creation methods (ID-based and generic) have variants like NewEntitiesQuery that return a query over the created entities (#152)
  • Notification during batch-creation is delayed until the resp. query is closed (#157)
  • Batch-remove methods (RemoveEntities()) return the number of removed entities (#173)
  • Filters can be cached and tracked by the World to speed up queries when there are many archetypes (#178)
  • Function AddResource[T](*World) returns the ID of the resource (#183)

Performance

  • Speedup of archetype mask checks by 10% by checking mask before empty archetype (#139)
  • Speedup of generic queries and mappers to come closer to ID-based access (#144)
  • Speedup of archetype mask checks by casting filter interface to concrete type when possible (#148)
  • Optimized batch creation of entities (#159)
  • More efficiently clear the memory of removed components, with 2-3x speedup (#165)
  • Do not clear memory when adding entities to archetypes, not required anymore as of #147 (#165)
  • Speed up copying entity to archetype by getting entity pointer without reflection (#166)
  • Avoid slice allocations in generic mapper methods (#170)
  • Avoid type checks in query when iterating archetypes (#179)
  • Speed up counting entities in queries with a cached filter (#182)
  • Implements a fast and memory-efficient lookup data structure for components ID keys, to reduce the memory footprint of archetypes and the archetype graph (#192)
  • Speedup of archetype creation by 40% by using a const for archetype storage page sizes (#197)

Bugfixes

  • Archetype storage buffers are "zeroed" when removing entities, to allow GC on pointers and slices in components (#147)
  • Use slices instead of arrays inside paged archetype list to ensure pointer persistence (#184)

Documentation

  • Adds an example for batch-creation and batch-removal of entities (#173)
  • Adds code examples to most public types, methods and functions (#183, #189)

Other

  • Restructure and extend benchmarks (#146, #153, #155, #156)
  • Add an ECS competition benchmark for adding and removing components (#170)
  • Add benchmarks for different ways to implement parent-child relations between entities (#194, #195)

Arche v0.5.1

22 Mar 10:17
7bbc16b
Compare
Choose a tag to compare

Performance

  • Speedup of archetype access by 5-10% by merging storages into archetypes (#137)

Documentation

  • Document all private functions, types and methods (#136)
  • Adds a section and plot on benchmarks against other Go ECS implementations to the README (#138)

Other

  • Internal code refactoring (#136)
    • Move method nextArchetype from World to Query.
    • Remove internal type queryIter.
    • Move repetitive pointer copying code in storage into a private method.
    • Move repetitive entity creation code in World into a private method.

Arche v0.5.0

20 Mar 18:27
e269b6b
Compare
Choose a tag to compare

Feature release. Does not break v0.4.x projects.

Features

  • The World handles ECS resources, i.e. component-like global data (#132)
  • Generic access to world resources (#132)

Other

  • Adds an example for the use of resources (#132)

Arche v0.4.6

19 Mar 23:27
7b1961c
Compare
Choose a tag to compare

Optimization release 🚀

Other

  • Speedup archetype access by 10%, by elimination of bounds checks (#126)
  • Minor optimizations of component storage (#128)
  • Adds an example to demonstrate how to implement classical ECS systems (#129)
  • Speedup entity access from queries by 50% by using a component storage for them (#131)

Arche v0.4.5

17 Mar 13:45
a827861
Compare
Choose a tag to compare

Features

  • Adds memory per entity to archetype stats (!124)

Other

  • Adds benchmarks of Arche vs. Array of Structs (AoS) and Array of Pointers (AoP), for different memory per entity and number of entities (!123)

Arche v0.4.4

05 Mar 14:05
6ad7d90
Compare
Choose a tag to compare

Features

  • Query has methods Count() and Step(int), primarily for effective random sampling (#119)

Bugfixes

  • Query.Next, Query.Get, etc. now always panic when called on a closed query (#117)

Other

  • Update to go-gameengine-ecs v0.9.0 in benchmarks (#116)
  • Adds example random_sampling to demonstrate usage of Query.Count() and Query.Step(int) (#119)
  • Remove internal wrapper structs in generic queries and maps (#120)

Arche v0.4.3

23 Feb 10:53
4d5c088
Compare
Choose a tag to compare

Bugfixes

  • EntityEvent has more consistent values when an entity is removed (#115)
    • EntityEvent.NewMask is zero
    • EntityEvent.Removed is contains all former components
    • EntityEvent.Current is nil

Arche v0.4.2

22 Feb 13:09
b88ce1d
Compare
Choose a tag to compare

Minor memory optimizations

Other

  • Avoid creation of unused archetypes by splitting the archetype graph out of the actual archetypes (#113)
  • Use slice instead of fixed-size array for type lookup in component registry (#113)
  • Avoid copying entityIndex structs by using pointers (#114)