Flecs Versions Save

A fast entity component system (ECS) for C & C++

v4.0.1-alpha

4 weeks ago

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: https://github.com/SanderMertens/flecs/discussions/1181 or on the Flecs discord server, whichever you prefer!

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

v3.2.11

2 months ago

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: https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.10...v3.2.11

v3.2.10

4 months ago

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: https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.9...v3.2.10

v3.2.9

5 months ago

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: https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.8...v3.2.9

v3.2.8

6 months ago

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: https://github.com/SanderMertens/flecs/issues/1042 https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.7...v3.2.8

v3.2.7

8 months ago

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: https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.6...v.3.2.7

v3.2.6

8 months ago

Highlights

  • Realtime strategy game Tempest Rising uses Flecs!
  • 20% performance increase for add/remove operations when entity already has the component
  • Experimental new web tool and JavaScript API for working with the Flecs REST API
  • Improved support and CI testing for MinGW targets

Release notes

This version includes the following bugfixes:

  • Fix issue with queries and recycled component ids
  • Fix JSON serializer issue where serialize_alerts is enabled but module is not imported
  • Fix meta bug where member count was ignored if explicit offset was provided (thanks @ZeroErrors!)
  • Fix C++ compiler errors when using ecs_map_t macro API
  • Fix assert when serializing entity alerts for alert without message template
  • Fix recursive cleanup issue for entities with multiple relationships to parent entity
  • Fix C++ component hook registration issue when child type was registered before parent

This version includes the following improvements:

  • [c] Fix inconsistencies between column index and type index in table API
  • [c] Fix naming inconsistencies in table API
  • [cpp] Fix inconsistencies between column index and type index in flecs::table API
  • [cpp] Fix naming inconsistencies in flecs::table API
  • [cpp] Add component::member overload that takes pointer to member (thanks @ZeroErrors!)
  • [cpp] Add const to flecs::string::size and flecs::string::length (thanks @yuyoyuppe!)
  • [cpp] Add world::scope(const char*) method (thanks @sasichkamega!)
  • [meta] Add support for packed structs (thanks @ZeroErrors!)
  • [meta] Remove unused size/alignment from EcsMetaType (thanks @ZeroErrors!)
  • [rest] Reduce amount of default enabled parameters for REST query endpoint
  • [internals] Simplify table data structures
  • [internals] Improve organization and naming of source files
  • [doc] Add note to FAQ about why (recycled) entity ids can be large
  • [doc] Add Tempest Rising to README
  • [doc] Add note on empty entities to cleanup order
  • [ci] Add msys/mingw builds to CI
  • [ci] Fix orphaned tests

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

Breaking changes

Known issues: https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.5...v3.2.6

v3.2.5

9 months ago

Highlights

  • Manually ran pipelines can now run multithreaded systems!
  • Lots of bugfixes and small improvements :)
  • The entity inspector in the explorer can now show incoming relationship edges: Screenshot 2023-08-02 at 9 00 24 PM

Release notes

This version includes the following bugfixes:

  • Fix leaking field in AlertInstance component
  • Fix leak in query cache with entity filter (union relationships/bitset components/flattened trees)
  • Fix issue where ecs_count didn't include prefabs and disabled entities
  • Fix issue with using OVERRIDE flag in plecs scripts
  • Fix issue with reporting alert severity in JSON serializer
  • Fix issue with importing flecs.monitor without flecs.meta
  • Fix compilation issues in FreeBSD (thanks @SirLynix!)
  • Fix issue where removed argument was not correctly passed by ecs_commit
  • Fix issue where ecs_commit wouldn't enter deferred mode while executing the operation
  • Fix issue where ecs_iter_t::other_table would get reset for observers after event propagation
  • Fix issue with calling .get() on flecs::table/flecs::range from stage
  • Fix issue where REST API would return malformed JSON on seralization error (thanks @ZeroErrors!)
  • Fix issue where C++ component with the same name as a core entity would be incorrectly registered
  • Fix incorrect ifdef that checked for MSVC instead of POSIX (thanks @MilanDierick!)
  • Fix issue with change detection for queries with static sources
  • Fix issue with change detection and writing to shared terms
  • Fix issue in rule engine where variable writes in OR chains weren't treated as conditional
  • Fix issue where getting the target of a union relationship could return not alive entity handle
  • Fix issue with systems that configure both interval and rate
  • Fix memory corruption issues when using nested iterators (thanks @johnse-hypixel!)
  • Fix incorrect assert when computed alignment mismatched actual alignment
  • Fix issue where world passed to C++ rule iterator wasn't used

This version includes the following improvements:

  • [core] Remove ability to get entity id array as field with index 0 (thanks @ZeroErrors!)
  • [c] Add ecs_singleton_set_ptr (thanks @darkuranium!)
  • [cpp] Add entity_builder::scope method that returns world object scoped to entity
  • [cpp] Add flecs::iter::entities method (thanks @ZeroErrors!)
  • [cpp] Add world::run_pipeline<T> overload (thanks @ZeroErrors!)
  • [cpp] Add world::target method (thanks @ZeroErrors!)
  • [cpp] Add world::get_info, remove redundant functions (thanks @ZeroErrors!)
  • [pipeline] Add support for multithreading to ecs_run_pipeline (thanks @ZeroErrors!)
  • [meta] Add support for member value ranges
  • [json] Serialize alerts from children in entity serializer
  • [json] Add option to serialize incoming relationship edges for entity
  • [alerts] Add retain_period to alert configuration
  • [alerts] Make it possible for alerts to change severity based on a condition
  • [alerts] Add ability to generate alerts for member values that are out of range
  • [alerts] Reduce alert detection interval to 0.5 seconds
  • [monitor] Add WorldSummary component
  • [expr] Implement parent(), name() and doc_name() functions in expression parser
  • [http] Fix unused parameter warning (thanks @MilanDierick!)
  • [doc] Fix quickstart example
  • [doc] Fix filenames in documentation comments (thanks @ZeroErrors!)
  • [doc] Reduce usage of auto in C++ examples
  • [doc] Remove redundant functions from C++ examples
  • [doc] Update C++ examples that used older/more verbose API methods
  • [ci] Use stricter warning settings to compile code warning free
  • [ci] Switch asan build to run on Linux, which includes leakage reporting
  • [ci] Build code on additional compiler versions
  • [cmake] Add FLECS_STRICT flag that enables Werror and stricter warning settings

Benchmark results https://github.com/SanderMertens/ecs_benchmark/tree/8539a8634bc6cc99a61efd5919ffe8f02c6b3478

Breaking changes

Known issues: https://github.com/SanderMertens/flecs/issues/965 https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.4...v3.2.5

v3.2.4

10 months ago

Highlights

  • Performance improvements!
    • 25%-80% performance improvement when creating/deleting entity hierarchies
    • 70%-90% performance improvement when reparenting/changing entity names
    • 40% performance improvement for event forwarding
    • 5%-20% performance improvement when iterating cached queries
  • A new query feature that allows for nesting terms
  • A new alerting addon that monitors graph queries for invalid patterns, with explorer UI: Screenshot 2023-06-11 at 6 32 38 PM

Release notes

This version includes the following bugfixes:

  • Fix issue with calling children() on builtin Wildcard/This entities
  • Fix issue in rule engine with anonymous source variables and component terms

This version includes the following improvements:

  • [alerts] Implement alert addon
  • [cpp] Add world::children method for iterating root entities
  • [expr] Add ecs_interpolate_string function
  • [expr] Add support for evaluation of dotexpressions on variables (e.g. $foo.x)
  • [rules] Add support for nested query terms
  • [queries] Reduce overhead of query cache entry by not inlining infrequently used fields
  • [queries] Reduce complexity and indirection of query cache data structures
  • [systems] Allow rate/interval to be modified with ecs_system_init
  • [pipelines] Add support for integration with external tasks systems (thanks @gsnook!)
  • [docs] Correct parameter naming of flecs_hashmap_init (thanks @kagetu!)
  • [docs] Add section on task systems to system manual
  • [core] Allow Exclusive property to be removed from (unused) ids
  • [ux] Improve error messages in flecs_bulk_new, ecs_rule_iter
  • [internals] Improve naming of functions, constants and add more comments
  • [internals] Don't emit unnecessary TableFill/TableEmpty events
  • [internals] Don't emit unnecessary TableCreate/TableDelete events
  • [internals] Revalidate observer cache in more scenarios (reduces cache invalidation events)
  • [internals] Remove redundant calls to defer_begin/defer_end in bootstrap
  • [internals] Improve performance of id record creation for pairs
  • [internals] Don't inline infrequently used fields in ecs_table_t
  • [internals] Remove dead sorting code (thanks @jbarthelmes!)

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

Known issues: https://github.com/SanderMertens/flecs/issues/969 https://github.com/SanderMertens/flecs/issues/965 https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

New Contributors

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.3...v3.2.4

v3.2.3

11 months ago

Release notes

This version includes the following bugfixes:

  • Fix crash when using change detection with queries that don't have $this terms
  • Fix issue with serializing large floating point values
  • Fix issue with creating user space observer for table events
  • Fix error message when using ECS_PRIVATE in ECS_STRUCT
  • Add missing emscripten include to app addon source

This version includes the following improvements:

  • [c] Change ecs_owns_id from macro to function
  • [queries] Reset query match counters after iteration has finished (improves change detection usability in systems)
  • [metrics] Add support for metrics that count the number of entities with an id
  • [http] Enable blocking for HTTP send call to improve stability of sending large replies
  • [docs] Fix broken links in documentation (thanks @MewSoul!)
  • [meson] Link with ws2_32 for Windows builds (thanks @randy408!)

Known issues: https://github.com/SanderMertens/flecs/issues/969 https://github.com/SanderMertens/flecs/issues/965 https://github.com/SanderMertens/flecs/issues/844 https://github.com/SanderMertens/flecs/issues/765 https://github.com/SanderMertens/flecs/issues/714 https://github.com/SanderMertens/flecs/issues/620 https://github.com/SanderMertens/flecs/issues/478 https://github.com/SanderMertens/flecs/issues/314

Full Changelog: https://github.com/SanderMertens/flecs/compare/v3.2.2...v3.2.3