Skip to content

Releases: SanderMertens/flecs

Flecs v4.0.0

14 Jul 03:32
Compare
Choose a tag to compare

Flecs 4.0 is out! 🎉

This is a major release with many new features, improvements, bugfixes and breaking changes. Enjoy!

Release Notes

See the release announcement:
https://ajmmertens.medium.com/flecs-v4-0-is-out-58e99e331888

Upgrading to v4

To upgrade from v3 to v4, see the migration guide:
https://www.flecs.dev/flecs/md_docs_2MigrationGuide.html

Known issues

#1215
#714
#478

Flecs v3.2.12

12 Jul 05:28
3210bff
Compare
Choose a tag to compare

Highlights

  • This release marks the last commit before the v4 release, which is happening in the next few days!
  • This is by far the most stable v3 release, and recommended for anyone staying on v3
  • All of the changes below are already part of the v4 branch!

Release notes

This version includes the following bugfixes:

  • Fix issue where anonymous entity would be deserialized into named entity with same id
  • Fix query DSL issue where incorrect entity could get resolved for OneOf terms
  • Fix issue where module symbol lookup could interfere with name lookups
  • Fix typo in named query REST endpoint
  • Don't serialize entity ids as floats in JSON
  • Fix issues with assigning path names with deleted parent in deferred mode
  • Fix compiler error when application defines free macro
  • Fix integer conversion assert in JSON serializer
  • Fix issue where compiling JSON addon without REST didn't work
  • Fix issue with any pair terms in observers
  • Fix world deserialization issue with entities that have relationship cycles
  • Fix issue with sorting shared components
  • Fix potential divide by zero in JSON profiler code
  • Fix enum reflection issue on VS2019
  • Fix assert for invalid query with uninitialized dependent variable
  • Fix infinite loop in progress when using integer time type
  • Fix issues with yield_existing and observers with entity source
  • Fix offset on nullptr in JSON serializer code
  • Fix out of bounds write when bulk overriding components (thanks @Indra-db!)
  • Fix assert when moving component without ctor to existing table (thanks @Thinkofname!)
  • Remove declaration to non-existent ecs_meta_set_component (thanks @pfeodrippe!)
  • Fix potential buffer overflow with large compilers strings (thanks @apache-hb!)
  • Fix duplicate definition errors when using unity builds (thanks @apache-hb!)
  • Fix issue with sorting non-trivial components
  • Fix issue with OR/wildcard queries
  • Fix issue with overcounting nodata terms in query with OR terms

This version includes the following improvements:

  • [cpp] Don't rely on automatic registration of builtin components
  • [cpp] Improve robustness and flexibility of enum reflection (thanks @garrett-is-a-swann!)
  • [cpp] Add additional overloads that make use of enum reflection (thanks @RoyAwesome!)
  • [cpp] Add iter::field_at method, disallow usage of iter::field in each
  • [cpp] Change entity constructor to take entity_t instead of id_t
  • [cpp] Add pair overload to get_ref (thanks @TBlauwe!)
  • [cpp] Add missing get_mut singleton methods (thanks @Indra-db!)
  • [cpp] Improve performance of entity::children
  • [cpp] Remove static for improved compatibility with C++20 modules (thanks @alexv-ds!)
  • [cpp] Alow for creating owned flecs::world from custom C world
  • [cpp] Add term_index to flecs::iter (thanks @jpeletier!)
  • [cpp] Mark overridden methods with override (thanks @jpeletier!)
  • [queries] Add support for parsing special characters in entity names
  • [queries] Add support for matching empty tables for cached queries
  • [queries] Fix issue with query traversal that could cause duplicate results
  • [rules] Fix incorrectly initialized context in query engine
  • [observers] Add support for disabling observers
  • [observers] Add missing event propagation code paths
  • [pipelines] Add multi_threaded argument to readonly_begin
  • [core] Improve error messages for constraint violations
  • [core] Allow for setting component name through type_info_t::name
  • [core] Automatically add Module tag to parents of components (thanks @garrett-is-a-swann!)
  • [core] Rename of get_mut, ensure to ensure, make_alive
  • [core] Add new get_mut that doesn't add component
  • [core] Add ability to include user-defined header with compile-time settings
  • [core] Don't create intermediate tables when instantiating prefab children
  • [core] Fix uninitialized value in cleanup logic
  • [core] Add table type order check in sanitized mode
  • [core] Add ecs_get_build_info
  • [core] Implement Relationship, Target, Trait constraint traits
  • [core] Use destructive move semantics when move & move_ctor is not set (thanks @Indra-db!)
  • [core] Improve performance of ecs_children
  • [core] Add world-global parameter for specifying default query flags
  • [json] serialize prefabs when serializing world
  • [json] improve robustness when deserializing into world with missing reflection data
  • [json] Don't asert on invalid entity identifier in JSON deserializer
  • [json] Add query info JSON serializer
  • [json] Add query profiler
  • [json] Always serialize full path for parent fields
  • [rest] Add support for inspecting observers with REST API
  • [rest] Implement endpoint for capturing commands of a single frame
  • [doc] Merge COREDOC addon with doc addon
  • [monitor] Add frame_count to WorldSummary
  • [monitor] Add build info to WorldSummary
  • [doc] Fix incorrect comments in simple_module examples
  • [doc] Add code tabs and C# snippets to relationship manual (thanks @BeanCheeseBurrito!)
  • [doc] Fix inconsistent order_by docs
  • [doc] Fix headers and language example tabs in relationship manual
  • [doc] Fix issue with observer example in quickstart (thanks @lenis0012!)
  • [ci] Add deprecated CI platforms (thanks @waywardmonkeys!)
  • [ci] Fix warnings when using FLECS_USE_OS_ALLOC (thanks @waywardmonkeys!)
  • [ci] Fix issues with windows/clang64
  • [ci] Add test to make sure amalgamated files are updated
  • [ci] Fix asan issue with casting function pointers (thanks @darkuranium!)
  • [windows] Ensure windows version macro is set correctly for inet_pton (thanks @benjitrosch!)
  • [misc] Make ctx argument of world::atfini optional
  • [misc] Use fseek instead of rewind (thanks @waywardmonkeys!)
  • [misc] Add missing #ifndef which could cause macro redefinitions (thanks @Indra-db!)

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/4681e8606aa9204b97f6316d3611e9f0d2572852

Breaking changes

Known issues:
#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.2.11...v3.2.12

Flecs v4.0.0-beta

21 May 06:07
e008ac2
Compare
Choose a tag to compare
Flecs v4.0.0-beta Pre-release
Pre-release

What is this?

This is the Flecs v4 beta release! 🎉

You can use this release to familiarize and play around with the new APIs and features before v4 comes out. The biggest difference between v3 and v4 is a new query engine that unifies filters, queries and rules in a single API.

What is a beta release?

Beta means that the v4 branch now has all the features that the final release will have! The next few weeks will be spent finding bugs, updating documentation, updating the Flecs demo's and on creating a migration guide.

What's new since v4.0.2-alpha

  • A new sparse component storage
  • Union relationships have been reimplemented for the v4 code base
  • On prefab instantiation, components are now copied to the instance instead of inherited.
  • New traits have been introduced to customize instantiation behavior
  • The iter and run query iteration callbacks have been replaced with a single run callback
  • OVERRIDE is renamed to AUTO_OVERRIDE
  • Flecs script assemblies have been renamed to templates
  • The existing query manual has been updated to v4
  • A new Flecs Query Language manual has been added that describes query DSL syntax
  • A new component traits manual has been added
  • Lots of C functions have been documented with doxygen
  • Bugfixes

This version does not work with the explorer because of a breaking change in the query DSL. To use the explorer with this release, use this URL: https://www.flecs.dev/explorer/v4?remote=true.

The release should be stable enough for experimentation.

What is missing?

  • There are a handful of known bugs that still need to be fixed
  • Performance testing hasn't finished yet
  • Documentation has not been updated yet

When will v4 come out?

The updated goal is to release in June.

Where can I share feedback?

Post v4 feedback in this discussion post: #1181 or on the Flecs discord server, whichever you prefer!

⚠️ Do not use this release in an actual project! ⚠️

Flecs v4.0.2-alpha

30 Apr 08:22
cf1a8ef
Compare
Choose a tag to compare
Flecs v4.0.2-alpha Pre-release
Pre-release

What is this?

This is another early preview of the upcoming v4 release! 🎉

You can use this release to familiarize and play around with the new APIs and features before v4 comes out. The biggest difference between v3 and v4 is a new query engine that unifies filters, queries and rules in a single API.

What's new since v4.0.1-alpha

  • A new Flecs Script parser with an improved syntax, new features and a new script manual!
  • A few tweaks to the query DSL that reduce complexity and make it (slightly) less verbose
  • Query fields are now indexed from zero! (so it.field(0) instead of it.field(1))
  • Lots of improvements to API ergonomics & removal of tech debt
  • Lots of bug fixes since the last alpha release

This version does not work with the explorer because of a breaking change in the query DSL. To use the explorer with the alpha, use this URL: https://www.flecs.dev/explorer/v4?remote=true.

The release should be stable enough for experimentation.

Flecs script example

// New: a cleaner syntax allows for more natural type descriptions
struct Position {
  x = f32
  y = f32
}

assembly CheckBox {
  prop checked = bool: false

  // New: conditional logic!
  if $checked {
    Image("checked.png") // New: improved anonymous entity notation
  } else {
    Image("unchecked.png")
  }
}

// New: new syntax that improves ergonomics of working with assemblies
CheckBox my_checkbox(checked: true) {
  Position: {x: 400, y: 300} // New: a more consistent way to specify components

  // Streamlined syntax for creating child entities
  Label my_lbl("Hello world") {
    Position: {x: 100, y: 0}
  }
}

Query DSL example

// Old
Item, Player($this:self|up(ContainedBy))
// New
Item, Player($this|self|up ContainedBy)

What is missing?

  • A big usability update to prefabs is still underway
  • There are a handful of known bugs that still need to be fixed
  • Performance testing hasn't finished yet
  • Documentation has not been updated yet

When will v4 come out?

The updated goal is to release around the end of May, with a beta release coming out in around two weeks.

Where can I share feedback?

Post v4 feedback in this discussion post: #1181 or on the Flecs discord server, whichever you prefer!

⚠️ Do not use this release in an actual project! ⚠️

Flecs v4.0.1-alpha

05 Apr 04:47
bb8ffca
Compare
Choose a tag to compare
Flecs v4.0.1-alpha Pre-release
Pre-release

What is this?

This is an early preview of the upcoming v4 release! 🎉

You can use this release to familiarize and play around with the new APIs and features before v4 comes out. The biggest difference between v3 and v4 is a new query engine that unifies filters, queries and rules in a single API.

Overview

  • All tests are passing on all platforms and compilers
  • The query API is mostly stable
  • Examples have been updated to the new APIs
  • Many parts of the API have been simplified
  • The release mostly works with the explorer and query editor

Code examples

// A system with query variables
world.system<Position>("SpaceshipsDockedToPlanet")
  .with<SpaceShip>()
  .with<DockedTo>("$obj")
  .with<Planet>().src("$obj")
  .each([](flecs::entity spaceship, Position& p) {
    // ...
  });
// By default queries are uncached. This is similar to a v3 filter/rule
world.query_builder<Position>()
  .with(flecs::ChildOf, "$parent")
  .each([](Position& p) {
    // ...
  });
// Adding .cached() enables caching, which is similar to a v3 query.
// Only the terms that are cacheable will be cached. This allows 
// for queries that are partially cached, which is not possible in v3.
auto q = world.query_builder<Position>()
  .with(flecs::ChildOf, "$parent")
  .cached()
  .build();
  
q.each([](Position& p) {
  // ...
});
// Queries can be named. This associates the query with an entity
// with the same name. Queries that are associated with an entity
// are cached. This means that by default all system queries enable 
// caching, just like in v3.
auto q = world.query_builder<Position>("Children")
  .with(flecs::ChildOf, "$parent")
  .build();

q.each([](Position& p) {
  // ...
});

// Queries that are associated with an entity need to be explicitly
// destructed. This is the same behavior as `flecs::entity`.
// Queries that are not associated with an entity are cleaned up
// when they go out of scope. This is the same behavior as
// `flecs::world` (RAII).
q.destruct();
flecs::world world_a;
{
  // World objects can now be copied. This just creates a handle to
  // the existing world, it doesn't create/copy a new world.
  flecs::world world_b = world_a;
}
void Move(ecs_iter_t *it) {
  Position *p = ecs_field(it, Position, 0); // Field indices now start from 0!
  Velocity *v = ecs_field(it, Velocity, 1);
  
  for (int i = 0; i < it->count; i ++) {
    p[i].x += v[i].x;
    p[i].y += v[i].y;
  }
}

The release should be stable enough for experimentation.

What is missing?

  • The APIs are not yet finalized. Big changes are still underway, especially in the C API
  • A few new features are still in development
  • There are a handful of known bugs that still need to be fixed
  • Performance testing hasn't finished yet
  • Documentation has not been updated yet

When will v4 come out?

There is still a lot that needs to happen before the release. The goal is to release around the end of April, with a higher probability of it being later than earlier.

Where can I share feedback?

Post v4 feedback in this discussion post: #1181 or on the Flecs discord server, whichever you prefer!

⚠️ Do not use this release in an actual project! ⚠️

Flecs v3.2.11

07 Feb 21:03
198607d
Compare
Choose a tag to compare

Highlights

  • Hytale is using Flecs as the backbone for their upcoming engine!
  • More than half of the contributions in this release are from the community ❤️
  • Work on Flecs 4.0 is well underway, with simpler query APIs and better performance! Follow progress here

Release notes

This version includes the following bugfixes:

  • Fix issue with parsing newlines in query strings
  • Fix issue with registration of nested types in module
  • Fix issue in rule engine with lookup variables and equality operators
  • Fix issue with rules that are partially trivial
  • Fix issue where a member with a missing MetaType wasn't correctly handled (thanks @ZeroErrors!)
  • Fix issue where query term with equality operator was incorrectly marked as trivial
  • Fix potential out of bounds read in rule engine
  • Fix JSON serialization error for labels with double quotes
  • Fix issue with evaluating R(_, _) and _(_, T) queries
  • Fix issues with not/optional operators and terms with any (_) source
  • Fix issue where rule compiler would not detect uninitialized lh of equality operator
  • Fix issue where ecs_ref_t could point to invalid component after table recycling
  • Fix issue in code that dedups events for multi-component observers
  • Fix issue where observer could access deleted id record during world cleanup

This version includes the following improvements:

  • [cpp] Add missing overloads for delete_with and remove_all (thanks @Charlie-83!)
  • [cpp] Add FLECS_CPP_NO_AUTO_REGISTRATION flag to disable automatic component registration
  • [cpp] Add flecs::string::contains
  • [cpp] Add support for associating a timer/tick source with a type (thanks @ZeroErrors!)
  • [cpp] Add missing const to entity_view methods (thanks @waywardmonkeys!)
  • [cpp] Add missing flecs::doc::get/set_color() functions (thanks @waywardmonkeys!)
  • [cpp] Mark explicit move ctors/operator= as noexcept (thanks @waywardmonkeys!)
  • [cpp] Remove redundant void arg of log function (thanks @waywardmonkeys!)
  • [query-dsl] Add support for R(A, B || C) syntax to DSL
  • [query] Fill out ecs_iter_t.system when using filters, queries and rules (thanks @BeanCheeseBurrito!)
  • [query] Improve string conversion of queries with equality operators
  • [rule] Skip empty ids for R(_, *) and *(_, T) queries
  • [json] Implement serializer for user-friendly JSON format
  • [json] Add option for serializing query field metadata
  • [rest] Fix issue where cached REST request would always return code 200
  • [rest] Add try parameter that prevents throwing HTTP error when trying out queries
  • [snapshot] Reduce copies when duplicating tables with non-POD components for snapshots (thanks @ZeroErrors!)
  • [strbuf] Simplify implementation of ecs_strbuf_t, improve performance
  • [http] Improve performance of ecs_http_server_request
  • [http] Enable caching of HTTP requests made from C API
  • [log] Don't mix writing to stderr/stdout in logging output
  • [log] Make output file used by logging functions configurable
  • [doc] Fix copy-paste issues with type names (thanks @waywardmonkeys!)
  • [doc] Fix relationship example by specifying inout (thanks @garrett-is-a-swann!)
  • [doc] Update Doxygen to v1.10.0 (thanks @ZeroErrors!)
  • [doc] Enable graphviz dot files in Doxygen (thanks @ZeroErrors!)
  • [doc] Change defgroup documents to use autobrief (thanks @ZeroErrors!)
  • [doc] Fix typos (thanks @waywardmonkeys!)
  • [doc] Fix typos and spelling errors (thanks @ZeroErrors!)
  • [doc] Fixed documentation link in quickstart addons section (thanks @DJLink!)
  • [doc] Remove spurious asterisk (thanks @waywardmonkeys!)
  • [doc] Use @code/@encode (thanks @waywardmonkeys!)
  • [doc] Fix grouping errors in C docs (thanks @waywardmonkeys!)
  • [doc] Link function names in doc comments (thanks @waywardmonkeys!)
  • [doc] Fix ecs_doc_get_name code samples (thanks @waywardmonkeys!)
  • [doc] Add tab widget for code snippets (thanks @ZeroErrors!)
  • [doc] Add Extermination Shock to readme
  • [doc] Add Hytale to readme
  • [doc] Improve doc addon docs (thanks @waywardmonkeys!)
  • [doc] Fix doxygen warnings (thanks @waywardmonkeys!)
  • [doc] Add missing doc.brief descriptions to flecs entities
  • [doc] Add C# example snippets to Quickstart, RestApi, System manuals (thanks @BeanCheeseBurrito!)
  • [ci] Update pages workflow actions (thanks @waywardmonkeys!)
  • [ci] Add macOS-14 Apple Silicon jobs (thanks @waywardmonkeys!)

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/4681e8606aa9204b97f6316d3611e9f0d2572852

Known issues:
#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.2.10...v3.2.11

Flecs v3.2.10

17 Dec 22:15
1653495
Compare
Choose a tag to compare

Highlights

  • Significant performance improvements of the rule query engine:
    • Up to 4x faster when compared with v3.2.9 for simple component queries
    • Up to 6x faster when compared with filters for simple component queries
    • Many other improvements, like automatic reordering of terms & simplified control flow
  • Rules now support up traversal!

⚠️ The next release will merge the filter, rule and query implementations into a single query API, expect breaking changes! ⚠️

Release notes

This version includes the following bugfixes:

  • Fix memory leak with batched set commands for new components
  • Fix issue in detection of whether a query has no data fields
  • Fix missing argument in error trace in meta addon
  • Fix issue that would occur when units module is not imported before monitor module
  • Fix issue with invalidating observer reachable cache
  • Fix issue where on_set hook was invoked without deferred mode & could be called twice
  • Fix issue where structural changes from on_set hook could get lost
  • Fix issue where anonymous rule variables would be stored before regular variables in variable array
  • Fix issue where content type wasn't set on reply for cached HTTP request
  • Fix segfault when enqueueing custom event
  • Fix duplicate matches in rules with or (||) expressions
  • Fix issue where ids of terms without source weren't correctly set in rule iterator
  • Fix duplicate matches in rules with Any wildcards
  • Fix issue with any terms with not (!) operators in rules
  • Fix crash in query DSL parser when using Rel(X, Y, Z) syntax
  • Fix assignment within conditional expression error
  • Fix issue where cloning an entity with a name would throw an error

This version includes the following improvements:

  • [rules] Implement up traversal for rules
  • [rules] Simplify control flow instructions of rule engine
  • [rules] Add new rule instructions for trivial queries which batches evaluation of multiple terms
  • [rules] Implement automatic filtering of prefab/disabled entities
  • [rules] Implement rule instruction reordering to limit evaluation of instructions with only unknown variables
  • [rules] Improve performance of evaluating queries with exclusive wildcard pairs
  • [rules] Improve performance of setting data fields for trivial and mixed source queries
  • [meta] Add new id primitive type for component ids/pairs
  • [meta] Use %f in log statements for doubles instead of %d
  • [json] Remove overzealous check on whether it.ptrs is NULL in iterator serializer
  • [stats] Remove redundant REST statistics
  • [stats] Remove less than useful table statistics
  • [stats] Remove less than useful id statistics
  • [rest] Reduce log spam from invalid queries from REST API in release mode
  • [meson] Make compiling hello world example optional (thanks @apache-hb!)
  • [docs] Fix broken link in REST manual
  • [docs] Fix C++ module example in manual
  • [docs] Fix typos in source & documentation (thanks @waywardmonkeys!)
  • [docs] Doc improvements and formatting (thanks @waywardmonkeys!)
  • [docs] Remove redundant comment terminators (thanks @waywardmonkeys!)
  • [ci] Update GitHub actions to actions/checkount@v4 (thanks @waywardmonkeys!)
  • [ci] Fix new gcc warnings

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/ab33138f58c7a24cf05f662ac790d7cfbcfbe8e0

Known issues:
#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.2.9...v3.2.10

Flecs v3.2.9

14 Nov 23:24
ff72706
Compare
Choose a tag to compare

Highlights

  • Query DSL extension that makes it easier to traverse multiple edges of the same relationship:
    • ChildOf($pilot, $cockpit), ChildOf($cockpit, $plane) can now be rewritten as ChildOf($pilot, $cockpit, $plane)
  • New rule feature that makes it possible to lookup entities by name relative to a query variable:
    • Example: Turret($this), Health($this.cannon)
  • A new API for emitting and observing simple events on entities (c, cpp)
    • Example: window.emit<Resized>({800, 600})
  • A new API for enqueueing events into the command queue for deferred handling (c, cpp)
    • Example: window.enqueue<Resized>({800, 600})
  • Performance improvements:
    • Faster command batching in apps with lots of entities/commands enqueued from observers (~25x faster with 50k entities)
    • Query iteration improvements due to removal of complexity in table storage (~7%-17%)
    • Hierarchy creation/destruction improvements (~4%-7%)

Release notes

This version includes the following bugfixes:

  • Fix assert when journaling remove_all/delete_with functions
  • Fix world cleanup issue when using app_run
  • Fix assert when using a rule that assigns to an entity variable
  • Fix issue where batched commands could invoke multi-component OnSet observer with uninitialized values
  • Fix issue with creating C++ systems/observers with names relative to root
  • Fix issue with instantiating a prefab hierarchy with a recycled prefab id
  • Fix issue with deserializing large int64_t values (TODO: correctly handle large uint64_t values)
  • Fix macro redefined warning when defining both FLECS_DEBUG and FLECS_SANITIZE
  • Fix issue with evaluating filters with static sources that are no longer alive
  • Fix issue in cursor API with deserializing into top-level array types
  • Add missing flecs::Override to C++ API (thanks @BeanCheeseBurrito!)
  • Fix issue with parsing comments in value scopes in flecs script
  • Fix issue with setting pair components that have a recycled relationship id

This version includes the following improvements:

  • [cpp] Default to InOutNone when using .with() in query builder API
  • [cpp] Enable optional pairs in the C++ query builder (thanks @Thinkofname!)
  • [cpp] Add array method to flecs::component for registering components as array type
  • [cpp] Add default constructor to flecs::ref
  • [cpp] Add flecs::ref::try_ref method
  • [query-dsl] Add feature that expands R(A, B, C) into R(A, B), R(B, C)
  • [queries] Add ability to use cascade in descending order
  • [rules] Add support for by name lookups relative to query variables ($var.child_name)
  • [rules] Don't throw error when comparing variable to * or _ wildcards
  • [observers] Add support for entity events
  • [observers] Add support for enqueueing custom events into command queue
  • [json] Serialize large integers as strings in JSON serializer
  • [log] Improve assert performance (thanks @jbarthelmes!)
  • [log] Enable colors for logging in emcc builds
  • [metrics] Add ability to track member metrics on pair components
  • [docs] Fix broken link to meta_c in quickstart
  • [docs] Fix typo in quickstart
  • [docs] Fix crash in C++ hooks example
  • [docs] Fix issue with instancing code example in query manual
  • [docs] Add STACK_SIZE parameter to list of emcc parameters in quickstart
  • [docs] Add game_mechanics/factory example
  • [docs] Add more content to FAQ
  • [internals] Remove record_ptrs member from table
  • [internals] Rename flecs::_::invoker* to flecs::_::delegate*
  • [internals] Rename command constants from EcsOp* to EcsCmd*
  • [internals] Reduce complexity of command batching code
  • [ci] Fix warnings when compiling with -std=gnu2x
  • [ci] Fix missing field initializer warning on g++

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/466a28be07c4ecbc94fa8cccb9dc4a5ba4dabf96

Known issues:
#844
#765
#714
#620
#478
#314

Full Changelog: v3.2.8...v3.2.9

Flecs v3.2.8

09 Oct 20:20
78305c4
Compare
Choose a tag to compare

Highlights

  • A new iterable::find method that makes it easier to find entities using filters, rules and queries:
flecs::query<Position> q = ecs.query<Position>();

flecs::entity result = q.find([](Position& p) {
    return p.x == 20;
});

Release notes

This version includes the following bugfixes:

  • Fix crash in ecs_pipeline_init when passing invalid parameter
  • Fix incorrect INVALID_PARAMETER assert in ecs_entity_init when providing empty separator
  • Fix incorrect return type of flecs::iter::id
  • Fix potential double free in C++ when using each_term
  • Fix issue with parsing bitmask expressions with spaces
  • Fix issue with deleting & recycling the same id in command buffer
  • Fix flecs script crash when trying to assign an entity that's not a component in with statement
  • Fix flecs script issue with assignment after scope statement
  • Fix custom build issue when specifying FLECS_MONITOR and FLECS_REST
  • Fix world cleanup issue where regular entities could get cleaned up after components
  • Fix issue where observers/hooks were not executed in deferred mode if deferring was suspended
  • Fix issue where event could be propagated along incorrect relationship edge
  • Fix incorrect return type of world::id (thanks @Indra-db!)
  • Fix C++ issue that prevented using a release build of flecs with debug build app & vice versa
  • Fix issue where passing nullptr as name to world::use didn't work correctly (thanks @Indra-db!)
  • Remove incorrect template parameter from world::from_json
  • Fix issue where passing NULL as doc string would not remove doc component
  • Fix crash in ecs_iter_str
  • Fix issue on VS2019 where enum constant registration did not work correctly

This version includes the following improvements:

  • [cpp] Add table::get method for enum types (thanks @Indra-db!)
  • [cpp] Add iterable::find method
  • [cpp] Add parameter to world::lookup/entity::lookup to disable/enable recursive searching
  • [cpp] Remove unnecessary return in entity::modified (thanks @Indra-db!)
  • [cpp] Remove redundant component registration from entity::ref methods (thanks @Indra-db!)
  • [cpp] Add entity_builder::set_json
  • [cpp] Add back world::delta_time method
  • [meta] Allow for creating reflection data in deferred, suspended deferred and readonly modes
  • [script] Add ability to self-reference assembly instance through $this variable
  • [metrics] Add ability to create metrics for nested members
  • [alerts] Add summary counts to AlertsActive component
  • [cmake] Add support for building & running tests with cmake (thanks @Naios!)
  • [cmake] Increase cmake version (thanks @Sororfortuna!)
  • [doc] Fix typos in examples/documentation (thanks @Rageking8!)
  • [doc] Documentation corrections (thanks @999pingGG!)
  • [doc] Improve comments of fwd_declare_component example
  • [doc] Add missing argument to pair function in relationship manual example
  • [doc] Show how to call target() in relationship basics example
  • [doc] Fix incorrect documentation comments in C++ API

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/f0c12a99219706c120fd49fe9862749f32f740b5

Known issues:
#1042
#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.2.7...v3.2.8

Flecs v3.2.7

05 Sep 02:03
ae0bed2
Compare
Choose a tag to compare

Highlights

  • A new Flecs.NET C# binding by @BeanCheeseBurrito with a similar design as the C++ API!
  • Deferred set operations are now almost twice as fast in the C++ API 💨
  • New functions in the experimental JavaScript API for client-side replication of entities:
// Connect to flecs application
flecs.connect("http://localhost:27750")

// World that stores the joined result of two queries
let w = flecs.world()
  .query("SpaceShip, (Dockedto, *)")
  .query("Planet, Habitable")
  .on_update(() => {
    // Access replicated entities
    for (let s in w.entities["fleet"]) {
      const planet = w.entities[s.pairs.DockedTo];
      
      // Is spaceship docked to a planet?
      if (planet.tags.include("Planet") {
        // Is planet habitable?
        const habitable = planet.tags.include("Habitable") ? "habitable" : "inhabitable";
        console.log("SpaceShip " + s.name +  " is docked to a " + habitable + " planet!");
      }
    }
  });
  • The explorer can now show sync point statistics and which queries/systems an entity matches with:
Screenshot 2023-09-04 at 6 46 50 PM

Release notes

This version includes the following bugfixes:

  • Fix issue where ecs_table_get_column_size was interpreting column as type index
  • Fix regression with using get with wildcard id
  • Replace invalid cast in Windows OS API with TEXT()
  • Fix crash in JSON serializer when trying to serialize variables for query iterators
  • Fix issue with JSON type serializer and nested structs
  • Fix issue where operations in yield_existing observers weren't always deferred
  • Fix issue where overriding exclusive relationships could cause an entity to have multiple instances
  • Fix module registration issue across DLLs that could cause an INVALID_COMPONENT_SIZE assert

This version includes the following improvements:

  • [c] Fix inconsistency in naming of get_ctx/set_ctx functions
  • [c] Add binding_ctx and ctx_free/binding_ctx_free to world
  • [c] Add ctx/binding_ctx to query objects
  • [c] Add Private trait to more internal components
  • [c++] Assert when attempting to create a nested pair id
  • [c++] Improve performance of deferred C++ set operations
  • [c++] Fix issue in filter builder API with pair singletons
  • [timer] Allow for timer randomization to reduce spikes in pipeline schedule
  • [queries] Add support for setting $this variable on query iterators
  • [meta] Shorten enum constant names by removing name prefix/enum type name prefix
  • [json] Add ecs_entity_to_json_desc_t::serialize_ids option
  • [json] Add ecs_iter_to_json_desc_t::serialize_term_labels option
  • [json] Add ecs_iter_to_json_desc_t::serialize_id_labels option
  • [json] Remove serialize_meta_ids option
  • [json] Add option to serializer to return all queries an entity matches with
  • [json] Support serialize_id_labels and serialize_variable_labels in combination with serialize_table
  • [json] Allow for toggling private components in combination with serialize_table
  • [stats] Add statistics for sync points
  • [doc] Fix typo in OS API header
  • [doc] Fix example in query manual (thanks @jbarthelmes!)
  • [doc] Fix outdated documentation in query manual and manual
  • [doc] Fix typo in query manual (thanks @pfeodrippe!)
  • [doc] Fix documentation for ecs_new_w_pair in manual
  • [doc] Fix links in flecs script tutorial
  • [doc] Fix & improve documentation in main header (thanks @copygirl!)
  • [doc] Add new C# binding by @BeanCheeseBurrito to README
  • [doc] Add questions to FAQ on how to debug issues with the explorer
  • [doc] Remove redundant group_by callback from group_iter example
  • [ci] Suppress new clang warning

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/563b5476cf13afdeff70fe120ad9d4308da9350b

Breaking changes

Known issues:
#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.2.6...v.3.2.7