Skip to content

Releases: nilpunch/massive-ecs

v20.0.0

20 Feb 13:24

Choose a tag to compare

Stabilization of the new architecture.

Added

  • Built-in Systems with customizable method running.
  • Polyfills for NativeAOT support.
  • IAutoFree<T> component interface to automatically free allocator pointers when the component is removed from an entity.
  • Peekback(frames) method to MassiveWorld to access previous World states. Can be used to impelemnt interpolation.

Changed

  • Allocator is now unamanged and unified.

Fixed

  • Read-only operations and queries no longer cause internal component IDs to be assigned.
    Component IDs for masks are now assigned on set modification rather than when requesting a set.
  • Thread-safety of QueryCache pool.

v20.0.0-alpha.5

17 Sep 17:32

Choose a tag to compare

Improved caching and iteration, query refactoring.

v20.0.0-alpha.4

09 Sep 08:57

Choose a tag to compare

Storage breaking changes.

Changed

  • Sparse sets are replaces with hierarchical bitsets.
  • Iteration reworked to use bit scans and boolean operations on the entities in each pool of interest.
  • And much more.

v20.0.0-alpha.3

08 Aug 07:59

Choose a tag to compare

Changed

  • Renamed Entity identifier to Entifier.
  • Renamed Entities to Entifiers.
  • Renamed SetRegistry to Sets.
  • Renamed FilterRegistry to Filters.
  • Renamed AllocatorRegistry to Allocators.
  • Destroy() no longer throws when called with a dead entity.
  • Replaced MassiveAssert with individual exceptions.
  • World.Set() now throws if the component has no associated data.
  • Renamed World.Filter() to World.GetFilter().
  • Made World act as a View to reduce boilerplate.

Added

  • New rich Entity struct with a clean syntax:
    • entity.IsAlive
    • entity.Add<Enemy>()
    • entity.Destroy()
    • etc.
  • Iteration over rich entities:
    • using world.ForEach((Entity entity, ref Player player, ...) => ...) queries.
    • using foreach (var entity in world.Include<Player>().Entities()) enumerators.
  • StoreNegative attribute for storing a complementary set of entities to optimize exclusion filtering:
    world.Exclude<Dead>.ForEach(...);
  • Negation in all contexts that use component types:
    • world.Include<Not<Dead>>.ForEach(...); // Acts like Exclude<Dead>
    • entity.Add<Not<Dead>>(); // Removes Dead component

v20.0.0-alpha.2

12 May 17:07

Choose a tag to compare

Added

  • Allocator, enabling fast rollbacks and serialization for collections inside components,
    and allowing external tools to plug directly into the data pipeline of the World.

Changed

  • Renamed data sets based on their usage:
    • Renamed ResettingDataSet to UnmanagedDataSet.
    • Renamed SwappingDataSet to ManagedDataSet.
  • Renamed Assert to MassiveAssert.
  • Reworked default(Entity) behaviour:
    • Entity ID is now stored without offset.
    • Alive entities start with version 1.
    • Entities with version 0 are now considered dead.

v20.0.0-alpha.1

27 Apr 20:50

Choose a tag to compare

Fixed

  • View and FilterView sometimes choose and use not optimal minimal set.

v20.0.0-alpha

27 Apr 12:37

Choose a tag to compare

Added

  • DefaultValue attribute to customize the reset value for unmanaged components.

Changed

  • Renamed ForEachExtra to ForEach, making it just another overload.
  • Renamed MaxId to UsedIds in Entities for consistency with SparseSet.

v19.1.0

16 Apr 17:47

Choose a tag to compare

Added

  • PageSize attribute to override the default page size for a data set of the specified type.

Changed

  • Replaced the IStable marker interface with a Stable attribute.

v19.0.2

07 Apr 13:17

Choose a tag to compare

Update sample

v19.0.1

05 Apr 17:41

Choose a tag to compare

Up fix version