Skip to content

Releases: SanderMertens/flecs

Flecs 2.4

13 Aug 07:13
8e9997f
Compare
Choose a tag to compare

Finally! 🎉

The highlights of the release are:

  • The first feature-complete implementation of entity relationships in any ECS framework
  • Removal of dependency on STL data structures, improving compile times & reducing API footprint
  • New sokol-style creation functions in C API for entities, components, queries, systems and more
  • New fluent-style builder classes in C++ for creation of queries, systems and more
  • A new and improved query DSL (domain specific language) with full support for custom relationships
  • Improved features for responding to events with triggers & observers
  • A novel search data structure for archetypes & relations which speeds up things across the board:
    • Filters evaluate much faster, even though they can be much more complex than before
    • Improved speed of matching tables to queries
    • Operations like ecs_get, ecs_has and get_object are now constant time
    • Improved performance of scope iterators
    • Improved performance of fetching components from base entities & instantiating from base entities
    • Improved performance of ecs_lookup family of functions

Breaking changes:
This release introduces a number of minor breaking changes when compared with the last 2.3.2 release. A non-exhaustive lists of breaking changes is provided here and may be extended later:

  • The EcsName component is changed to an EcsIdentifier relation which is instantiated with EcsName and EcsSymbol tags
  • Component destructors are now called on the source component after moving between archetypes
  • The ecs_get_object function no longer accepts a component to find an object for a relation, but an index to find the nth object for a relation
  • The group_by callback signature have been modified to allow for a context
  • The system/query APIs have been updated to a fluent-style builder pattern
  • The C++ API no longer uses STL data structures, which in practice means that code that relied on functions returning an std::string may have to be updated.
  • Most legacy syntax constructs of the query DSL have been removed
  • Removal of CHILDOF and INSTANCEOF roles (use the builtin ChildOf and IsA relations instead)
  • include and exclude filter fields are no longer supported (use new filter API)
  • entity::each(Func&&) now expects a function that accepts a flecs::id instead of a flecs::entity

This was a large release! A few random facts:

I'm skipping the full list of features/improvements/bugs for now as it's a lot, may add it later.

For the next 2 - 3 months the master branch will be used to migrate to the v3 APIs. If you need API stability, stay on the last v2 release until the official v3 release. There will be intermediate releases that allow for a more gradual upgrade path to the new v3 APIs.

Flecs 2.3.2

23 Feb 12:38
Compare
Choose a tag to compare

This release introduces a breaking change to fix C++ component registration. The symbol member of the EcsName (or flecs::Name) component now requires an allocation. If you explicitly assign members to the EcsName component (using get_mut, not using set) you will have to update your code.

Another change that was introduced to fix component registration is that the symbol member of the EcsName component for a module now always contains the fully qualified path to the entity. Previously this value contained the C or C++ typename, but this caused issues with module interop between C and C++. If your code relied on looking up modules by their C typename and not the fully qualified name, code will have to be updated.

This release contains the following improvements:

  • replace iostream with initializer_list (C++ API, thanks @ikrima!)
  • ensure entity::m_id is initialized to 0 (C++ API, thanks @ikrima!)
  • use ecs_os_malloc instead of new (C++ API, thanks @ikrima!)
  • remove superfluous copies of lambda functions (C++ API, thanks @ikrima!)
  • add CHANGELOG (thanks @ikrima!)

This release contains the following bugfixes:

  • fix matching for queries with shared componnents when base entity is deleted
  • fix various issues with component registration in C++
  • fix issue with setting target FPS on Apple M1 (thanks @prime31!)
  • fix issues with CMake file (thanks @SpaceIm!)
  • fix crash when creating & deleting queries
  • guarantee that id returned by new_component_id is unused

Flecs 2.3.1

03 Feb 05:49
35971af
Compare
Choose a tag to compare

This version contains the following improvements:

  • Improved lerp example
  • Added OS API example C++ (thanks @mcmlevi!)
  • Upgraded cmake buildfiles (thanks @rawbby!)
  • Clarified text in README describing API/ABI stability

This version contains the following bugfixes:

  • Fix crash when using overlapping UnSet systems
  • Fix issue with passing incorrect row to UnSet systems
  • Added .hpp files to cmake install
  • Fixed issue with using get_mut with traits

Flecs v2.3

18 Jan 06:59
Compare
Choose a tag to compare

Highlights:

  • Big performance improvements & reduced memory usage for applications with lots of tables, such as when using hierarchies
  • Component enabling/disabling allows for quick component mutations without moving entities between archetypes
  • New statistics addon for retrieving metrics from running world (replaces stats module)

Thanks to @randy408, @sh-dave, @kevinresol, @jasonliang-dev and @Alexandre-P-J for submitting PRs! 🎉

Thanks to @ikrima and @jtferson for writing two awesome testimonials on using Flecs with Unreal Engine 4 🙏 :

Thanks to the new Flecs sponsors ❤️ :

Breaking changes:

  • calling ecs_get for a tag will no longer return NULL, but will assert
  • statistics module is removed in favor of easier to use statistics addon
  • unused table_offset member is removed from iterator

Deprecated features:

  • ecs_entity() macro is now deprecated, use ecs_typeid()

This version includes the following features:

  • Direct access addon, which provides fast access to underlying storage
  • Added singleton API to C++ world class
  • Added orphaning for subqueries, which allows an application to check if a parent query still exists
  • Added ecs_get_typeid function to get the component id for traits
  • The type used for time keeping is now customizable
  • New statistics addon for retrieving metrics from running world
  • Added get_parent function that accepts entity/tag
  • Added component enabling/disabling
  • Added support for sorting on shared components

This version includes the following improvements:

  • Improved ecs_delete performance (reduced entity index accesses from 2 to 1)
  • C & C++ code compiles warning-free with more warning flags, for more compiler versions & more platforms
  • Improved error messages when application passes invalid entity id
  • Made include paths relative so source code is easier to integrate with bazel
  • Fixed typos in documentation
  • Improve error message when trying to add 0 as base entity (using ECS_INSTANCEOF)
  • Add check for conflicting source modifier in OR expressions
  • Extended documentation, added new examples and fixed typos
  • Removed dead/redundant code
  • Improved performance of ecs_get
  • Add sanitizer & custom builds to CI, remove Travis CI builds
  • Don't add Name component when provided name for entity is NULL
  • Allow flecs::system instances to be (re)created from entity id
  • Added godbolt "try online" badge to README
  • Improve allocation strategy of vector datastructure
  • Improved performance for checking if entity id is a number
  • Added missing query functions to C++ API for sorting
  • Improved performance of table creation by two orders of magnitude
  • Reduced memory footprint of table graph by a factor 60
  • Added example to demonstrate world merging with direct access API
  • Added more inline documentation for datastructures
  • Added assert when trying to instantiate child as instance
  • Improve errors when invalid operation is invoked on iterator
  • Throw assert when invoking ecs_modified on entity that does not have the component
  • Allow for type lookups in systems, as long as the type already exists
  • Add return types to ecs_defer_begin and ecs_defer_end to obtain defer status of world
  • Remove redundant table_offset member from ecs_iter_t
  • Improved portability of POSIX OS API example

This version includes the following bugfixes:

  • Fixed issues with subqueries and query rematching
  • Corrected wrong return type of ecs_column_size (was ecs_entity_t, is now size_t)
  • Add missing \0 when appending to application buffer with strbuf datastructure
  • Fixed crash when instantiating an empty prefab
  • Fixed issue with shared tags and queries using each() in the C++ API
  • Fixed issue with instantiating empty child table
  • Fixed issue with ecs_bulk_new and traits
  • Fixed issue when using ecs_entity_str with small buffers
  • Fixed bug when adding trait to entity with switch
  • Fixed name conflicts in amalgamated source
  • Fixed path lookup in ecs_import
  • Fixed EXPORT macro's in OS API examples
  • Fixed issue with restoring worlds that have recycled ids
  • Added missing EXPORT macro's to API functions
  • Fixed assert after deleting entities from restored world
  • Removed obsolete assert from ecs_modified
  • Added missing statement to finalize system in C++
  • Fixed issues with removing case values
  • Fixed issues in C++ API with implicit component registration
  • Fixed assert when removing from switch list
  • Fixed bug where obtaining type from entity would generate a new entity id
  • Fixed incorrect description of ecs_delete in manual
  • Fixed issues with custom builds

Flecs v2.2

12 Oct 02:40
5d92275
Compare
Choose a tag to compare

Highlights:

  • Big performance improvement for operations called from systems
  • Entity liveliness tracking (entities are now annotated with a generation)
  • New APIs for deferring operations, singletons and simpler system callbacks (C++)

Deprecated features:

  • The action method in C++ should no longer be used for systems. Use iter instead.
  • EcsSingleton and flecs::Singleton are deprecated. Use new singleton API instead
  • The is_shared function in the flecs::iter class is deprecated. Use is_owned instead.

Breaking changes

  • Query columns that are not owned are now [in] by default. This may cause the API to throw an assert (in C++) or ecs_is_readonly to return a different value (in C). To fix issues caused by this change, add const to the column type, or annotate the column with [inout] or [out].
  • Doing an operation on a deleted entity id may now throw an assert.

Thanks to @ikrima, @randy408 and @nbrk for submitting PRs! 🎉

This version includes the following features:

  • Add ecs_clear API which removes all components without deleting the entity
  • Keep track of entity lifecycle with generation counting
  • New type role that enables automatic overriding of components for base/prefab entities
  • Create an alias for entity/component names to shorten string-based queries
  • New API for deferring actions
  • New staging implementation that uses deferred actions for better performance
  • Added ecs_is_alive which tests if an entity has been deleted
  • Added ecs_exists which tests if an entity id is currently in use (ignoring generation)
  • Add new singleton API
  • Add macro's for defining global component variables in C

This version includes the following improvements:

  • Recursively delete child entities when deleting a parent
  • Add function to enable tracing to C++
  • Add time_scale function to C++
  • Disallow overwriting component lifecycle actions
  • Improved checks for invoking operations on non-initialized classes
  • Improvements to C++ flecs::vector wrapper
  • Introduces iter() which is an easier to use alternative to action()
  • Added simplified FOR syntax for trait queries
  • Add is_owned to iterator class in C++
  • Treat empty structs in C++ as tags
  • Allow dereferencing shared column with [0] in C++
  • Add enabled() function to entity class
  • Queries now prefetch column types so there is no accidental table creation when iterating
  • Make [in] default for columns that are not owned
  • Add function to get column by name
  • Detect registering component with a different name in C++

This version includes the following bugfixes:

  • Fix issues when application includes stdbool
  • Don't crash if system is redefined with NULL signature
  • Fix issues with registering builtin components in C++
  • Fix issues with re-registering entities with the same name
  • Fix bug where child would sometimes be created for the wrong parent
  • Add missing ANY modifier to C examples
  • Fixed issue with registering components across translation units
  • Add assert when ecs_merge is called when world is progressing
  • Fixed issue where moving world could cause double destruction in C++
  • entity::set no longer takes const rvalue which prevented moves
  • Fixed bug where moving an entity would sometimes call destruct on the wrong component
  • Don't automatically add ctor if other lifecycle actions are NULL
  • ecs_os_api_strdup incorrectly used ecs_os_api_malloc instead of overrided malloc
  • Only resolve entity as numeric id if the entire string is a number
  • Fix including alloca header in FreeBSD
  • Fixed incorrect parsing of trait expression with SHARED modifier in signature
  • Fixed bug with obtaining shared trait columns
  • Fixed bug with querying for component trait
  • Ensure that owned component is never passed to shared column and vice versa
  • Fixed bug with rematching queries that have optional fields
  • If a prefab was an instance from a base prefab, the children of the base would not be created as prefabs
  • Deleting a table in the table graph did not update edges of connected tables
  • Queries were sometimes registered twice with the same table
  • Fixed crash when attempting to delete empty child table
  • Remove query from table administration when unmatching
  • Parent entity was not deleted from child tables administration when deleted
  • Removed assert when attempting to remove a key from an empty map
  • Fix bug where is_monitored bit would not be transferred when moving / swapping an entity
  • Fixed component names memory leak in C++ API

Flecs 2.1.2

05 Sep 20:48
Compare
Choose a tag to compare

This version includes the following features:

  • No new features

This version includes the following improvements:

  • Queries can now select for components to which a trait has been applied (TRAIT | MyTrait > *)
  • Add unsafe_column to C++ API for accessing component data of unknown type at compile time
  • Add [] operator to flecs::vector
  • Add more functions to C++ iterator to access underlying fields
  • Add fast paths to table functions (improves performance)
  • Add support for global component/tag/entity handles in C
  • Add flecs::type_id<T>() for getting the identifier of a type

This version includes the following bugfixes:

  • OnSet systems registered themselves with components in expression vs. matched components
  • Fix issues related to component lifecycle actions & traits
  • Invoke move when moving entity between tables
  • Invoke move when reallocating table columns
  • Invoke move when deleting an entity (move last entity into deleted index)
  • Component actions were not registered for implicitly registered components
  • Fix bug with redefining namespaced components in a different world

Flecs 2.1.1

01 Sep 06:30
Compare
Choose a tag to compare

This version includes the following bugfixes:

  • Fixed a bug in typename resolution for const types on MSVC

Flecs 2.1.0

31 Aug 22:24
Compare
Choose a tag to compare

Highlights:

  • Big usability improvements to the C++ API
  • Improved performance when compared to 2.0 (~18%)
  • Switchable tags which allow for easy implementation of state machines
  • Subqueries

Breaking changes
This release introduces a breaking change to the ecs_bulk_new* APIs which was necessary to fix a memory leak. The new API now returns a pointer to an array of entity ids, vs. the entity id of the first created entity.

This version includes the following features:

  • Implicit component registration in C++ API
  • Switchable tags (allows for building fast state machines)
  • Subqueries (queries that are matched against the tables of their parent queries)

This version includes the following improvements:

  • Add type agnostic get/get_mut/modified/has functions to C++ API
  • Add trait functions to C++ API
  • Allow for specifying the signature in the flesc::query constructor
  • Increased addressing space for type roles
  • Add convenience functions to flecs::entity class for working with roles
  • Allow querying for individual traits
  • Add has_childof and has_instanceof to C++ API
  • Moved private classes in C++ API to separate namespace
  • Removed all bake code from flecs core
  • Added OS API examples
  • Added support for triggers to C++ API
  • Moved change tracking from systems to queries
  • Add ecs_query_next_w_filter
  • Added a FAQ (https://github.com/SanderMertens/flecs/blob/master/docs/FAQ.md)
  • New sparse set implementation
  • Add fast path to table operations, improving performance
  • Fixed name clashes with other libraries in OS API struct
  • Added more sections and diagram to the manual
  • Added support for AND & OR type flags in signatures
  • Improved exporting types from a module
  • Improved C++ API where world can be used as factory

This version includes the following bugfixes:

  • Fixed issue with get_mut in C++ API
  • Fixed issue with correctly registering components when using pointer types in queries
  • Fixed issue where a cached pointer in a reference could become invalid
  • Fixed uninitialized value in query sorting function
  • Fixed issue where record_ptrs array would not be allocated with correct size in writer API
  • Fixed uninitialized value during cleanup
  • Fixed numerous memory leaks
  • Fixed duplicate entries in stage
  • Fixed issue where query would not detect a change in the data
  • Fixed issue with optional components in C++ API
  • Fixed C++ snapshot examples
  • Fix issue where system name would not be copied in C++ API
  • Fixed namespacing issue with nested modules in C++
  • Fix issue with ECS_ALIGN macro and signed integers
  • Fix issue with registering components across multiple worlds in C++
  • Fixed issue where repeated bulk operation could cause out of memory errors

Flecs 2.0

03 Aug 08:39
Compare
Choose a tag to compare

This is the first Flecs v2.0 release. This release contains many new features, performance improvements and bug fixes. For a full overview of the changes, see the migration guide:
https://github.com/SanderMertens/flecs/blob/master/docs/MigrationGuide.md

To get up to speed on the v2.0 features, see the quickstart:
https://github.com/SanderMertens/flecs/blob/master/docs/Quickstart.md

For a more in-depth description of the features, see the manual:
https://github.com/SanderMertens/flecs/blob/master/docs/Manual.md

Flecs 2.0.4 beta

25 Jun 09:40
Compare
Choose a tag to compare
Flecs 2.0.4 beta Pre-release
Pre-release

This is a pre-release of v2.0. Do not use this release for production code. Bugs are to be expected. The purpose of this release is to help existing users migrate from v1.0 to v2.0.

This is a beta release, indicating that the public API for v2.0 is stable, unless indicated otherwise. Any headers under include/flecs/private are not part of the public API, and may be changed by patch & minor releases. Behavior changes may still occur as bugs are fixed and features are completed.

This release has the following new features:

  • Add ability to iterate scope with filter
  • Add ecs_get_child_count function
  • Allow for creating filtered snapshots & blobs by providing an iterator
  • Add ecs_set_time_scale function

This release implements the following improvements:

  • Allow parsing type expressions without asserting on error
  • Rename query sorting functions to sort_by and group_by
  • Improve test coverage
  • Remove inconsistencies in signatures between os API malloc, calloc and alloca
  • Remove variable masking warnings
  • Cleanup unused system declarations
  • Reorganize headers and source files to make it clearer which parts of the code are required, optional and part of the public API
  • improve file organization
  • fix cmake build

This release addresses the following issues:

  • Fix issue that could cause crash in map implementation
  • Fix issue where OnSet system could trigger on columns that are not owned
  • Remove references to UT_ macro's from bake.util
  • Replace TRUE and FALSE with true and false
  • Fix issue where new_from_path would add CHILDOF | 0 for entity in root

For a list of changes between v1 and v2 see the migration guide

Known issues:

  • OnSet systems are not invoked for tables created while staged
  • OnSet systems are not invoked when an overridden component is removed