Releases: SanderMertens/flecs
Flecs 2.4.1
This version includes the following bugfixes:
- Fixed issue with resolving shared component entity when entity has more than one base
- Fixed issue with getting switch case when in staged mode
Flecs 2.4
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
andget_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 anEcsIdentifier
relation which is instantiated withEcsName
andEcsSymbol
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
andIsA
relations instead) include
andexclude
filter fields are no longer supported (use new filter API)entity::each(Func&&)
now expects a function that accepts aflecs::id
instead of aflecs::entity
This was a large release! A few random facts:
- Flecs met its first sponsorship goal! ❤️
- 380 commits since the last release
- Over 2200 commits since the beginning of the project
- The Discord server grew to almost 600 users 🎉
- Close to 400 new stars were added to the project ⭐
- A little more than a year has passed since the first v2.0 release
- Almost a 100 closed PRs and issues in this release alone:
- PRs contributed by @randy408, @aganm, @mason-bially, @ikrima, @SpaceIm, @Hexlord, @shanehyde, @Zalron, @nasso and @Wesxdz
- Issues opened by @SpaceIm, @JonSnowbd, @randy408, @artgreen, @mjjq, @Hexlord, @codylico, @BHolman-LBI, @jtferson, @shanehyde, @cshenton, @Josid88, @jon-turney, @Jarodwr, @HenryFalconerIO, @tedajax, @Zalron, @domdom, @KenthJohan and @zaklaus
- Thanks everyone! 🙏
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
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
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
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 returnNULL
, 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, useecs_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 (usingECS_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 isNULL
- 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
andecs_defer_end
to obtain defer status of world - Remove redundant
table_offset
member fromecs_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 nowsize_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
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. Useiter
instead. EcsSingleton
andflecs::Singleton
are deprecated. Use new singleton API instead- The
is_shared
function in theflecs::iter
class is deprecated. Useis_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++) orecs_is_readonly
to return a different value (in C). To fix issues caused by this change, addconst
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 toaction()
- 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 areNULL
ecs_os_api_strdup
incorrectly usedecs_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
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
This version includes the following bugfixes:
- Fixed a bug in typename resolution for const types on MSVC
Flecs 2.1.0
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
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