Skip to content

Releases: mlange-42/arche

Arche v0.13.3

27 Nov 00:10
b709940
Compare
Choose a tag to compare

Arche v0.13.3

Arche is an archetype-based Entity Component System for Go.

Arche's Features

Changelog

Performance

  • Simplifies the archetype graph to use only a single list of neighbors per node, saving a bit of memory (#433)

Documentation

  • Adds an example for World.Mask, showing how to check whether a filter "contains" an entity (#428)
  • Adds the beecs implementation of BEEHAVE to the showcase (#429)

Arche v0.13.2

04 Sep 14:02
ae21e73
Compare
Choose a tag to compare

Arche v0.13.2

Arche is an archetype-based Entity Component System for Go.

Arche's Features

Changelog

Bugfixes

  • Ensures Assign() copies components before notifying listeners (#426, g-getsov)

Arche v0.13.1

29 Aug 10:12
e31be0a
Compare
Choose a tag to compare

Arche v0.13.1

Arche is an archetype-based Entity Component System for Go.

Arche's Features

Changelog

Bugfixes

  • Fixes dispatch listener bug that did not clear component restriction (#424, g-getsov)

Arche v0.13.0

21 May 17:06
d66c1be
Compare
Choose a tag to compare

Arche v0.13.0

Arche is an archetype-based Entity Component System for Go.

Arche's Features

Changelog

Features

  • Adds function ResourceTypeID to register/get a resource ID from a reflect.Type (#420)

Other

  • Fix component type in examples/base (#419)

Arche v0.12.0

29 Apr 19:24
ef139e3
Compare
Choose a tag to compare

Arche v0.12.0

Arche is an archetype-based Entity Component System for Go.

Arche's Features

Changelog

Features

Documentation

  • Adds a showcase chapter "Made with Arche" to the documentation page (#411)

Performance

  • Re-arrange struct fields to save memory in a few places (#413)

Bugfixes

  • Fix crash caused by extending layouts of an inactive archetype (#416, reported in #415)

First-time contributors

Arche v0.11.0

19 Feb 10:24
795294e
Compare
Choose a tag to compare

Arche v0.11.0

Arche is an archetype-based Entity Component System for Go.

Arche's Features

  • Simple core API. See the API docs.
  • Optional logic filter and type-safe generic API.
  • Entity relations as first-class feature. See the User Guide.
  • World serialization and deserialization with arche-serde.
  • No systems. Just queries. Use your own structure (or the Tools).
  • No dependencies. Except for unit tests (100% coverage).
  • Probably the fastest Go ECS out there. See the Benchmarks.

Changelog

Release Highlights

Arche now has a dedicated documentation site with a structured user guide and background information. We hope that this will lower the barrier to entrance significantly.

Further, Arche got a few new features:

  • Query.EntityAt was added for random access to query entities.
  • Generic filters now support Exclusive, like ID-based filters.
  • Build tag debug improves error messages in a few places where we rely on standard library panics for performance.

Breaking changes

  • Renames types in ecs.stats to follow Go standards.
    stats.WorldStats -> stats.World, stats.NodeStats -> stats.Node, ... (#388)

Features

  • Adds method Query.EntityAt(), useful for things like random sampling of entities (#358)
  • Adds build tag debug to improve error messages in a few places where we rely on standard library panics for performance (#377)
  • Adds method FilterX.Exclusive() to all generic filters (#381)

Documentation

  • Adds a dedicated Arche User Guide web site (#380, #382, #383, #384, #385)
  • Adds BENCHMARKS.md benchmarks for a tabular overview of the runtime cost of typical Arche ECS operations (#367, #372)
  • Link benchmarking code in README.md and benchmarking tables (#375)
  • Documents build tags tiny and debug in package docs of ecs (#377)
  • Adds examples to demonstrate the use of non-ECS data structures together with ECS (#379)

Bugfixes

  • Prevents using the same component multiple times in any operations, through panic (#357)

Performance

  • Generic filters use Mask instead of slower MaskFilter if no components are excluded (#381)

Other

  • Improves error messages for running out of world locks, components or resources, and on unbalanced unlock (#363)
  • Adds benchmarks for query creation (#366)
  • Upgrade to Go 1.22 in CI (#376)
  • Renames directory examples to _examples to accommodate changed test coverage behaviour of Go 1.22 (#376)
  • In unit tests, error messages of all panics are asserted (#377)

Arche v0.10.1

01 Feb 11:37
fa87f7f
Compare
Choose a tag to compare

Arche v0.10.1

Arche is an archetype-based Entity Component System for Go.

Arche's Features

  • Simple core API. See the API docs.
  • Optional logic filter and type-safe generic API.
  • Entity relations as first-class feature. See Architecture.
  • World serialization and deserialization with arche-serde.
  • No systems. Just queries. Use your own structure (or the Tools).
  • No dependencies. Except for unit tests (100% coverage).
  • Probably the fastest Go ECS out there. See the Benchmarks.

For more information, see the GitHub repository and API docs.

Changelog

Bugfixes

  • Fix IsRelation check to allow for non-struct components, like type aliases (#354)

Arche v0.10.0

21 Jan 20:08
784cff9
Compare
Choose a tag to compare

Arche v0.10.0

Arche is an archetype-based Entity Component System for Go.

Arche's Features

  • Simple core API. See the API docs.
  • Optional logic filter and type-safe generic API.
  • Entity relations as first-class feature. See Architecture.
  • World serialization and deserialization with arche-serde.
  • No systems. Just queries. Use your own structure (or the Tools).
  • No dependencies. Except for unit tests (100% coverage).
  • Probably the fastest Go ECS out there. See the Benchmarks.

For more information, see the GitHub repository and API docs.

Changelog

Release highlights

  • Arche supports full world serialization and deserialization, in conjunction with arche-serde (#319)
  • Supports 256 instead of 128 component types as well as resource types and engine locks (#313)
  • Generic API supports up to 12 instead of 8 component types (#324)
  • Reworked event system with granular subscription to different event types and components (#333, #334, #335, #337, #340)

Breaking changes

  • MaskTotalBits changed from 128 to 256 (#313)
  • Removes Mask.Lo and Mask.Hi, internal mask representation is now private (#313)
  • Filter.Matches(Mask) became Filter.Matches(*Mask); same for all Filter implementations (#313)
    This change was necessary to get the same performance as before, despite the more heavyweight implementation of the now 256 bits Mask.
  • Component and resource IDs are now opaque types instead of type aliases for uint8 (#330)
  • Restructures EntityEvent to remove redundant information and better handle relation changes (#333)
  • World event listener changed from a simple function to a Listener interface (#334)
  • Removes World.ComponentType(ID), use function ComponentInfo(ID) instead (#341)

Features

  • Adds functions ComponentInfo(*World, ID) and ResourceType(*World, ResID) (#315, #318)
  • Adds methods World.Ids(Entity) and Query.Ids() to get component IDs for an entity (#315, #325)
  • Entities support JSON marshalling and unmarshalling (#319)
  • The world's entity state can be extracted and re-established via World.DumpEntities() and World.LoadEntities() (#319, #326)
  • Adds functions ComponentIDs(*World) and ResourceIDs(*World) to get all registered IDs (#330)
  • Adds methods Mask.And, Mask.Or and Mask.Xor (#335)
  • Adds build tag tiny to restrict to 64 components for an extra bit of performance (#338)
  • Adds methods Relations.Exchange(), Relations.ExchangeBatch(), Relations.ExchangeBatchQ() for exchange with relation target (#342)
  • Generic API adds Exchange.WithRelation() and optional target argument for operations with relation target (#342)
  • Generic API adds MapX.AddBatch(), MapX.AddBatchQ(), MapX.RemoveBatch()and MapX.RemoveBatchQ() (#342)
  • Generic API adds optional relation target argument to most MapX methods (#342)
  • Generic API adds FilterX.Filter() to get an ecs.Filter from a generic one (#342)
  • Generic API adds Map.SetRelationBatch() and Map.SetRelationBatchQ() (#344)
  • All batch operations (except entity creation) return the number of affected entities (#348)

Performance

  • Reduces archetype memory footprint by using a dynamically sized slice for storage lookup (#327)
  • Reduces event listener overhead through granular subscriptions and elimination of a heap allocation (#333, #334, #335, #337, #340)

Documentation

  • Adds an overview to packages ecs and generic on how to achieve ECS manipulation operations (#345)

Other

  • Entity generation data type changed from uint16 to uint32 (#317)
  • Adds unitoftime/ecs to competition benchmarks (#311)
  • Adds competition benchmarks for accessing 10 components (#328)

Arche v0.9.0

07 Nov 10:43
c2f9129
Compare
Choose a tag to compare

Infrastructure

  • Upgraded to Go 1.21 toolchain (#308)

Arche v0.8.1

30 Oct 23:07
ce720fa
Compare
Choose a tag to compare

Documentation

  • Emphasize in Entity and World docs that entities are intended to be stored and passed by copy, not by pointer (#306)