- Notifications
You must be signed in to change notification settings - Fork 0
Description
- Write full change log
- Create GitHub release
- Upload
.msixand.appinstallerfor Windows - Update website redirects
Ecsact SDK 0.7.0 Release
The New Stuff
0.7.0 is our biggest release yet. We've been hard at work improving the Ecsact language as well as improving tooling and performance.
Parameters
The Ecsact language added a new core concept - Parameters. All statements now can accept parameters. You'll see them mentioned in the features below.
statement Name(param_name: param_value) More in-depth documentation to come
- feat: allow string parameters ecsact_parse#155
- feat: new parallel parameter values support ecsact_interpret#227
Parallel Systems
It's been long documented that Ecsact systms were meant to be ran in parallel. The Ecsact RT EnTT implementation has now implemented parallel systems #127 and systems will execute in parallel by default if they can.
A new API was introduced to control this feature. You can now mark a system to explicitly not run in parallel with ECSACT_PAR_EXEC_DENY. See more options in ecsact/common.h. Of course you can also set this option in the Ecsact language.
system MySystem(parallel: deny) { /* ... */ } - feat: respect parallel system parameter ecsact_rt_entt#127
- feat: parallel execution ecsact_rt_entt#124
- feat: more parallel execution options ecsact_runtime#249
- feat: new parallel parameter values support ecsact_interpret#227
Reactive Systems
Added the notify keyword to specify conditions for a system to execute. These can be individually configured for every component in the system. The options currently available are:
oninit,onupdate, andonremoveonchangewhen the component is updated and one or more of its internal values has been changed
system NotifySystemA { readwrite ComponentA; readonly ComponentB; notify { // System will execute when ComponentA is added to qualifying entity oninit ComponentA; // System will execute if ComponentB is removed from qualifying entity onremove ComponentB; } } system NotifySystemB { readwrite ComponentA; readonly ComponentB; // Alternatively, you can do a notify without a body and it will apply to all components in the system notify oninit; } More in-depth documentation to come
- feat: adding onchange for systems ecsact_rt_entt#114
- feat: add reactive systems with init, update and remove as initial features ecsact_rt_entt#110
Lazy Systems
Having all qualifying entities for a system running on the same tick can be expensive. Now you can limit the amount of entities that get iterated in a system per tick by making it lazy.
Lazy systems are sorted so accurate determinism is still at play, this is especially important for multiplayer games.
There is a new dynamic function to mark a system as lazy ecsact_set_system_lazy_iteration_rate and an accompanying meta function to read if a system is lazy ecsact_meta_get_lazy_iteration_rate, but the way you most likely will be using lazy systems is via parameter in the Ecsact language.
system MyLazySystem(lazy: 25) { /* ... */ } More in-depth documentation to come.
Ecsact CLI Build System
We've completely deprecated ecsact_rtb and now instead have an ecsact build command. There is a "recipe" system which allows you to pick and choose what runtime implementation you want. There's only one (Ecsact RT EnTT) right now, but it opens the gate for you to write your own and for more implementations to come.
ecsact build also improves some quality of life things compared to ecsact_rtb such as coloured output and reporting C++ build errors more nicely.
More in-depth documentation to come
- feat: add build recipe and tests ecsact_rt_entt#100
- feat: enable all features with ecsact build ecsact_rt_entt#105
- feat: fetch archive, fetch integrity checks, and globbing ecsact_cli#104
- feat: add debug flag ecsact_cli#102
- feat: always build with ECSACT_BUILD define ecsact_cli#98
- feat(build): merge multiple build recipes ecsact_cli#84
- feat: support bundled codegen plugins ecsact_cli#90
- feat: better error output when running with bazel ecsact_cli#91
- feat: recipe bundle command ecsact_cli#85
- feat: build receipe can now fetch sources ecsact_cli#71
- feat: coloured text output ecsact_cli#51
- feat: report more msvc CL errors ecsact_cli#76
- feat: display C++ warnings/errors as messages ecsact_cli#74
- feat(build): allow plugins relative to recipe file ecsact_cli#72
Codegen Error Reporting
Ecsact Codegen plugins now can report errors and other information while generating code. This is a breaking change since the ecsact_codegen_plugin now utilises a 3rd parameter. All official plugins have been updated in this release.
New Assoc API
The old association API has been completely re-done and we've introduced a new concept called "indxed fields". This feature isn't fully ready for prime time, but you can checkout the changes we've made here:
- feat: indexed fields multi-add api ecsact_runtime#255
- feat: using assoc id in 'other' context api ecsact_runtime#247
- feat: improve assoc api + C++ wrappers ecsact_runtime#246
- feat: more multi assoc api adjustments ecsact_runtime#244
- feat: multi field association API ecsact_runtime#243
- feat: allow multiple 'with' fields ecsact_parse#153
- feat: implement new assoc api ecsact_interpret#224
- feat: support new assoc api in C++ codegen ecsact_lang_cpp#196
- feat: generate indexed fields in plugins ecsact_lang_cpp#194
- feat: add constexpr for components with assoc fields ecsact_lang_cpp#204
Bazel Support
We've added more bazel support to include building an Ecsact runtime directly via the ecsact CLI. We use bazel a lot so expect more imrpovements to rules_ecsact.
- feat: add rules for recipe bundles rules_ecsact#56
- feat: support ecsact_cli --debug flag rules_ecsact#54
- feat: ecsact_binary provides CcInfo rules_ecsact#53
- feat: configurable ecsact build report filter rules_ecsact#45
- feat: new toolchain bzlmod extension rules_ecsact#43
Misc. Small Improvements
- feat: invalid id macro ecsact_runtime#245
- feat: add 'any' component callback to cpp wrapper ecsact_runtime#238
- feat: better invalid cast error ecsact_runtime#234
- feat(meta): add main package C++ method ecsact_runtime#206
- fix: force inline for c++ wrappers ecsact_runtime#231
Internal Improvements
Ecsact codegen plugin for optimization #56
Metaprogramming compile times were taking longer and longer the bigger .ecsact files got. This is a refactor to use codegen instead.
System providers #126
It was getting more and more difficult to add features to systems. This is a refactor to add providers to systems, allowing the separation of new features like lazy systems while being more readable.
Bug Fixes
- Fixed generate add events not calling, parent trivial systems children systems not running fix: generate add events not calling, parent trivial systems children systems not running ecsact_rt_entt#136
- Dynamic view gets used instead of accessing registry fix: dynamic view gets ecsact_rt_entt#123
- Proper internal comparer fix: proper internal comparor ecsact_rt_entt#121
- Generates missing internal sorting fix: generates missing internal sorting ecsact_rt_entt#115
- Update events were happening too often fix: update events happening too often ecsact_rt_entt#119
- Generated entity having invalid callback fix: generates invalid callback ecsact_rt_entt#113
- Entity created callback called too often fix: entity created callback called too often ecsact_rt_entt#111
- Check for created entity callback being nullptr fix: check for created callback nullptr ecsact_rt_entt#97
- (meta) c++ wrapper bad container access #252
- (meta) c++ wrapper using wrong assoc cap count #251
Other
- Association is currently disabled on Ecsact RT EnTT. It's a work-in-progress as we've overhauled the assocation api completely. For now, it will return an error when you try to use it. feat: new assoc api placeholder ecsact_rt_entt#139
- Ecsact CLI benchmark is temporarily disabled
- Ecsact SI Wasm recipe is not shipped with this release. To build with wasm you must utilise the recipe found at https://github.com/ecsact-dev/ecsact_si_wasm. This will be fixed next release.