Skip to content

Releases: SanderMertens/flecs

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

Flecs v3.2.6

20 Aug 19:46
c32c426
Compare
Choose a tag to compare

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:
#844
#765
#714
#620
#478
#314

New Contributors

  • @yuyoyuppe made their first contribution in #1019
  • @sasichkamega made their first contribution in #1027

Full Changelog: v3.2.5...v3.2.6

Flecs v3.2.5

04 Aug 02:24
74a7f74
Compare
Choose a tag to compare

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

  • Passing 0 to ecs_field no longer returns the entity id array (#466 (comment))
  • The ecs_lookup_symbol function has an additional recursive argument (#466 (comment))
  • The C API convention for naming component id variables has changed (#466 (comment))
  • Redundant methods for obtaining world information have been removed (#466 (comment))

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

New Contributors

Full Changelog: v3.2.4...v3.2.5

Flecs v3.2.4

12 Jun 03:47
32e812c
Compare
Choose a tag to compare

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:
#969
#965
#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.2.3...v3.2.4

Flecs v3.2.3

18 May 22:19
2bcb38a
Compare
Choose a tag to compare

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:
#969
#965
#844
#765
#714
#620
#478
#314

Full Changelog: v3.2.2...v3.2.3

Flecs v3.2.2

12 May 20:39
3ca10b6
Compare
Choose a tag to compare

Highlights

  • New entity index data structure which improves performance of create/delete/add/remove by 10-20%
  • Replaced hash implementation with wyhash, improving table creation performance by 15-30%
  • Graph visualization of queries in the explorer!
Screenshot 2023-05-12 at 1 35 13 PM

Release notes

This version includes the following bugfixes:

  • Fix issue where assert would trigger during (component) id deletion
  • Fix issue with detecting redeclared variables in flecs script
  • Fix incorrect value of EcsTypeKindLast
  • Fix issue with creating query on entity that already has an existing query
  • Fix potential crash in ecs_iter_fini when using chained iterators
  • Fix issue where observer could cause emplace to return invalid pointer
  • Fix issue where With pair would assume type of pair target
  • Fix inconsistencies in enum constant registration between C and C++ APIs
  • Fix issues with symmetric relationships and recycled ids
  • Add missing ecs_rule_var_count, ecs_rule_var_name and ecs_rule_var_is_entity functions (thanks @copygirl!)
  • Fix inconsistent naming of desc size constants
  • Fix issue where id record could get deleted twice during world cleanup
  • Fix incorrect JSON serialization of pair ids
  • Fix bug in query creation with recycled relationship id
  • Add missing imports to monitor module
  • Fix assert when iterating rule with 0 source
  • Fix possible leak when reassigning system/observer ctx/binding_ctx
  • Fix crash in ecs_pipeline_stats_get when obtaining stats for pipeline with one task system

This version includes the following improvements:

  • [cpp] Don't compile ECS_FUNC_* marco's for C code (thanks @aganm!)
  • [cpp] Add component::constant overload that works with enum classes
  • [cpp] Remove entity_view::delta_time function
  • [cpp] Change argument of enable_rest to HTTP port
  • [c] Remove unnecessary sep variable initialization in ecs_new_from_path_w_sep (thanks @copygirl!)
  • [c] Add port member to ecs_app_desc_t
  • [http] use non-blocking socket for recv which increases stability for servers with many clients
  • [docs] Add note on pipeline switching performance
  • [docs] Update outdated cascade example in quickstart
  • [docs] Fix incorrect comment for iterable::each (thanks @ZeroErrors!)
  • [docs] Fix error in quickstart example
  • [json] Improve error handling of JSON iterator serializer
  • [rest] Propagate serialization errors to REST endpoints
  • [rest] Log errors that happen while replying to REST request to console
  • [metrics] Improved logic for deriving metric name from enum constant in untyped_component::metric
  • [internals] Implement new entity index data structure
  • [internals] Replace hash function with wyhash
  • [portability] Emulate POSIX atomics for systems that do not have GNU builtins (thanks @aganm!)
  • [portability] Add compiler support for tinycc (thanks @aganm!)
  • [ci] Add vs2017 job to CI

Benchmark results
https://github.com/SanderMertens/ecs_benchmark/tree/7bb9d7cf672f0b5991b5faff4f5f8cc5afcd94ef

Breaking changes:

  • The entity_view::delta_time method has been removed (#466 (comment))
  • The argument of app_builder::enable_rest has changed (#466 (comment))

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

Full Changelog: v3.2.1...v3.2.2

Flecs v3.2.1

16 Apr 20:39
0fab02f
Compare
Choose a tag to compare

Highlights

  • Query iteration improved 20-40% when iterating components
  • New addon for recording component values and relationships as metrics
  • New FLECS_LOW_FOOTPRINT compiler flag that reduces memory usage

Release notes

This version includes the following bugfixes:

  • Fix issue where change detection would not clear when using ecs_query_next_table
  • Fix crash where wildcard id record was deleted before matching non-wildcard id record
  • Fix issue where during world fini a filter incorrectly decreased the refcount of an id record
  • Fix issue with setting This variable to entity for filters
  • Fix issue where OnRemove observer wasn't invoked after deferred batched clear
  • Fix issue in flecs script where pair target was not looked up correctly
  • Fix issue where filter would compute incorrect size for (*, T) pair term

This version includes the following improvements:

  • [cpp] Add flecs::world::reset method deletes/recreates a world
  • [cpp] Add get/set methods to flecs::world for singleton pairs
  • [cpp] Add method to get filter from flecs::rule (thanks @Thinkofname!)
  • [cpp] Add flecs::rule::rule_str method
  • [cpp] Add flecs::entity_view::path_from method
  • [cpp] Allow iterable::set_var to be called for filters
  • [cpp] Add flecs::iter::column_index method
  • [cpp] Add flecs::table::column_size method
  • [c] Add ecs_field_column_index function
  • [c] Add ecs_table_get_column_size function
  • [queries] Improve performance of trivial query iteration (addresses performance regression in 3.2.0)
  • [queries]Implement change detection for flattened tables
  • [filters] Return data for OR terms if the type of terms in the OR chain is the same
  • [filters] Reuse same sizes array for all results of filter (improves cache locality during iteration)
  • [filters] Improve performance of filter creation
  • [metrics] Implement metrics addon
  • [docs] Add scene management example (thanks @benjitrosch!)
  • [docs] Fix typos/grammar issues in relationships doc (thanks @oznogon!)
  • [docs] Fix outdated docs for ecs_filter_iter
  • [docs] Fix outdated docs for ecs_bulk_new_w_id
  • [docs] Fix link to FAQ in readme
  • [cmake] Update version number to 3.2 (thanks @podsvirov!)
  • [internals] Reduce overhead of tables that don't use bitsets/union relationships/flattening
  • [internals] Add FLECS_LOW_FOOTPRINT compiler flag for reduced memory utilization

Breaking changes:

  • A when_changed argument has been added to ecs_query_populate (#466 (comment))

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

New Contributors

Full Changelog: v3.2.0...v3.2.1

Flecs v3.2.0

27 Mar 06:28
1c36f18
Compare
Choose a tag to compare

Release announcement

Flecs 3.2 is out!

Release notes

This version includes the following bugfixes:

  • Fix issue with batched set commands and emitting OnSet events
  • Fix issue where bitset iteration index could go out of bounds
  • Fix issue where ecs_get_target would try inheritance for relationship with DontInherit
  • Fix error in custom_phases_no_builtin C++ example
  • Fix issue in JSON serializer with large string values
  • Fix issue in JSON serializer with entity ids at offset
  • Fix potential crash in ecs_get_target_id_for
  • Correctly set ecs_iter_t::offset in component hooks
  • Fix issue with suspending deferred mode
  • Fix issue in cursor API with double assignment after dotmember
  • Fix issue in script parser with binary operator followed by component assignment
  • Fix issue with vectors in JSON serializer
  • Fix issue where comments inside value blocks didn't work correctly in Flecs script
  • Fix issue with setting name string that overlaps with existing name in deferred mode
  • Add missing implementation of ecs_rule_get_filter
  • Fix issue with command ordering when setting name after reparenting
  • Fix compilation issue with new version of emcc
  • Fix issue where event for multiple ids triggered for wrong entity
  • Fix issue where event for multiple ids triggered multiple times for same observer
  • Fix issue where id in table was not updated after calling ecs_set_entity_generation
  • Fix issue that prevents using ecs_get_target_for_id from stage
  • Fix issue with component registration across binaries in multithreaded applications
  • Fix memory leak in HTTP server
  • Fix issue with importing C module in multiple worlds
  • Fix component registration issue with binaries compiled by different compilers
  • Fix issue with component registration of world::vector
  • Correct for overshoot value when returning delta_system_time for interval systems

This version includes the following improvements:

  • [c] Add missing const qualifiers to query functions
  • [c] Add missing const qualifier to ecs_id_in_use
  • [c] Add ecs_get_parent convenience function
  • [cpp] Add flecs::rule::move method
  • [cpp] Don't assert when creating invalid rule, add flecs::rule::is_valid method
  • [cpp] Add flecs::entity_builder::set_alias method
  • [cpp] Add API for singleton pairs to flecs::world
  • [cpp] Ensure world is cleaned up when app().run() returns
  • [rules] Rule engine refactor
  • [rules] Improved support for Not, Optional, Or operators
  • [rules] Added support for fuzzy name matching
  • [rules] Added support for dependent terms
  • [rules] Added a query profiler for analyzing term performance
  • [rules] Many improvements to performance, VM, data structures, runtime
  • [rules] Add option to auto-match unresolved identifiers at query creation time by name
  • [rules] Add support for using any (_) variable as term source
  • [rules] Add support for queries that start with Not/Optional terms
  • [rules] Add support for transitive queries with any (_) target
  • [rules] Add support for transitive queries with self modifier for target
  • [rules] Allow for usage of relationships other than IsA for component inheritance
  • [rules] Add support for parsing variable values from argument string
  • [rules] Add performance optimization for trivial rule queries
  • [filters] Default to InOutNone if the term type is not known beforehand
  • [filters] Change interface for Or operator to allow for neighboring Or terms
  • [queries] Improve query sorting performance
  • [queries] Add assert on invalid order_by component id
  • [core] Implement relationship flattening
  • [core] Replace all remaining occurrences of ecs_vector_t with ecs_vec_t
  • [core] Cache (ChildOf, *) id record on world for improved performance
  • [core] Cache (Identifier, Name) id record on world for improved performance
  • [core] Add AlwaysOverride component property
  • [core] Ensure children of a prefab are also tagged as prefabs
  • [core] Add stricter check on adding properties to components that are already in use
  • [meta] Add conversion to cursor API from bool to int
  • [meta] Throw less confusing error in cursor API when assigning out of bounds element/member
  • [rest] Add validity checks on offset/limit parameters
  • [rest] Add functions to call REST API from C
  • [http] Implement request caching (replaces caching mechanism of REST API)
  • [doc] Fix conflicting declaration in quickstart example
  • [doc] Fix outdated code example in systems manual
  • [doc] Add build instructions to quickstart for cmake and bake
  • [doc] Fix incorrect link in README to prefab documentation
  • [doc] Add parent(), target_for() to query section of relationship manual
  • [doc] Expand explorer section of REST manual with query examples
  • [script] Add experimental support for loading managed scripts
  • [script] Add experimental support for assemblies
  • [script] Allow for setting nested members in expression
  • [script] Add support for deriving variable name from assigned member
  • [script] Add support for adding variables as components
  • [script] Make EXPR/META addon mandatory when using script addon
  • [script] Add support for using foo.* syntax
  • [script] Add support for module foo syntax
  • [script] Add Flecs script tutorial
  • [script] Add support for assigning singletons with $ :- Component{}
  • [log] Add ecs_log_get_level

Breaking Changes

  • The interface for creating queries with Or operators has changed (#466 (comment))
  • The ecs_vector_t type has been removed from the source and replaced with ecs_vec_t (#466 (comment))

Known issues

#844
#765
#714
#620
#478
#314

New Contributors

Full Changelog: v3.1.5...v3.2.0

Flecs v3.1.5

22 Feb 01:53
e9c5ddb
Compare
Choose a tag to compare

Highlights

  • A big upgrade to the reflection framework which can now serialize/deserialize custom (including STL) types!
  • New functions to serialize & deserialize a world to & from JSON
  • Improved performance of iterating queries with tag fields (+30-50%)
  • Improved performance of table creation in apps with lots of cached queries (+70-90%)
  • Improved performance of notifying multiple observers for the same event (+20-30%)

Release notes

This version includes the following bugfixes:

  • Fix issue where symmetric relationship would be cleaned up before its observer
  • Fix issue in debug mode where entity generation check could use wrong index in dense array
  • Fix issue where on_set hook was not called before observers during command batching
  • Changed incorrect return type of ecs_id_is_tag to bool
  • Ensure destructor is called on moved away from value in command queue
  • Fix memory leaks when using a global flecs::world object
  • Ensure destructor is called on moved away from column when merging tables
  • Fix lambda compilation issue when using Visual Studio 2017

This version includes the following improvements:

  • [core] Allow for ecs_ensure to be called from stage
  • [core] Add Traversable property to allow for relationships that are acyclic but not traversable
  • [core] Only apply DontInherit property to IsA traversal
  • [meta] Serialization & deserialization support for opaque types
  • [meta] Add methods for deserializing values & entities to C++ API
  • [json] Add option to JSON serializer to serialize all contents of a matched table
  • [json] Add functions for serializing/deserializing world to/from JSON
  • [observers] Improve performance of invoking multiple observers for the same event
  • [queries] Improve detection and handling of query terms without data
  • [cpp] Remove redundant world argument from flecs::entity constructor in id::second()
  • [cpp] Add begin/end methods to flecs::type so it can be iterated
  • [cpp] Add entity::view method for safe upcast from staged flecs::entity object
  • [cpp] Automatically disable enum reflection for compilers that don't support it
  • [docs] Improve documentation of get_mut
  • [docs] Rewrite of the FAQ
  • [docs] Add query example for singletons, add singleton section to quickstart
  • [ux] Add assert when not using stage when creating iterator in multi threaded world
  • [internals] Use observers for notifying queries of new tables
  • [internals] Improve performance of ecs_bulk_init by using faster function to update entity index
  • [internals] Implement small utility API for parsing JSON strings

Breaking Changes:

  • Inconsistencies in the naming of JSON deserialization functions have been fixed (#466 (comment))
  • The behavior of the Acyclic property has been split up into an Acyclic and Traversable property (#466 (comment))

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

New Contributors

Full Changelog: v3.1.4...v3.1.5