Releases: Quillraven/Fleks
2.9
Changelog:
- NEW: new
isMarkedForRemoval
entity extension function (#153) - NEW: systems can now be added and removed after world configuration (#145)
- NEW: new
systemOrNull
function (#146) - NEW: new
first
andfirstOrNull
with predicate argument function on family (#147) - NEW: new update method on world using Kotlin's
Duration
(#152) [thanks to @RefuX] - UPDATE: update following versions
- gradle 8.7 -> 8.10
- Kotlin 2.0.0 -> 2.0.20
- kotlinx-serialization: 1.7.1 -> 1.7.2
2.8
2.7
Changelog:
- NEW: new
partition
andpartitionTo
function forEntityBag
[#141] - UPDATE: optimized notifications for families. A family is now notified only once per
world.entity
orworld.configure
call, even in nested call scenarios [#138] - UPDATE: update gradle to 8.7 and use configuration cache
- UPDATE: update github action versions to current latest ones
- UPDATE: update following versions
- Kotlin to 1.9.23
- Dokka to 1.9.20
- Kotlinx-Serialization to 1.6.3
- Kotlinx-Benchmark to 0.4.10
2.6
Changelog:
- NEW (BREAKING CHANGE): new
onInit
function of a system which gets called after the world is configured- the creation of entities in a system's constructor now throws an exception. Such logic must be moved to the
onInit
function. This is a necessary change to keep consistency of hooks and families in that specific scenario. [#128]
- the creation of entities in a system's constructor now throws an exception. Such logic must be moved to the
- NEW: new
onEnable
/onDisable
functions for systems to react onenabled
changes. [#127] - NEW: new
FamilyOnAdd
/FamilyOnRemove
interfaces that can be used onIteratingSystem
to add family hooks for the system's family in an easier way. Refer to the wiki for more details. [#128] - UPDATE: Update versions:
- Kotlin 1.9.21
- kotlinx.serialization 1.6.2
- Gradle 8.5
- UPDATE:
onEntityRemoved
of a family is now called BEFORE the entitiy's components are removed. [#120] - UPDATE: Fixed an issue that you can write
it += Component
which broke Fleks internally. This was introduced with the Tags feature and will now show you a compile error again. [#125] - UPDATE: Systems
onDispose
and systems'onRemoveEntity
functions are called in reverse order. Before, the order was the order of systems of the world. [#130] - UPDATE: extracted the sorting logic of a system to a separate
onSort
function and made the sorting attributes protected instead of private. This allows a better support for overriding theonTick
function, if needed. [#133]
Shoutout to @metaphore for the different suggestions and contributions!
2.5
Changelog
- NEW (BREAKING CHANGE):
Entities
are no longer value classes. They are now a data class that contains the previousid
and a newversion
. With this new functionality it is now way easier to safely reference entities in components. Big shoutout to @dragbone for the contribution! [#115] - NEW: A new
EntityTag
functionality was added which is a more memory efficient and faster way to create components without data. Thanks to @LobbyDivinus for the suggestion and help during development [#119] - NEW (BREAKING CHANGE): a new
Snapshot
class was introduced to support the newEntityTag
functionality. Check the wiki's serialization page for more details - UPDATE: Wiki contains updates for the new functionalities and an updated serialization page using kotlinx-serialization with the latest changes
- UPDATE: improved
ComponentsHolder
memory usage slightly (no longer stores a string property of its name) [#110] - UPDATE: great performance improvement for
BitArray
usage which makes entity creation and removal even faster. Thank you @tommyettinger for the contribution! [#111] - UPDATE: memory improvement for
MutableEntityBag
. Thanks to @LobbyDivinus [#117] - UPDATE: some minor improvements when it comes to serialization with kotlinx-serialization
- UPDATE: following versions got updated:
- Kotlin 1.9.10
- Dokka 1.9.10
- Benchmark 0.4.9
- Kotlinx-serialization 1.6.0
- Gradle 8.4
- BUGFIX: fixed a potential issue when iterating over the same family in a nested way while modifying it
2.4
This version contains some breaking changes which add some more flexibility to Fleks and also keep it up-to-date with other technologies. The most important change is the requirement of Java 11 instead of 8. This seems to be safe nowadays, even for Android. For LibGDX users, please use Gdx-Liftoff as your setup tool which already creates proper Java11 projects.
Changelog:
- Several version updates:
- Kotlin 1.7.21 -> 1.9.0
- Dokka 1.7.20 -> 1.8.20
- Kotlinx-benchmark 0.4.5 -> 0.4.8
- Gradle 7.6 -> 8.2.1
world
function got renamed toconfigureWorld
. I got several comments on my YT videos that people got confused betweenworld
andWorld
(constructor vs DSL function). To make it clear, it got now renamed toconfigureWorld
- Also, the order of
configureWorld
functions no longer matters. Before, it was mandatory to callsystems
last. Now you are free to callinjectables
,systems
,family
in any order. - Kotlinx-serialization got added to Fleks. The
@Serializable
annotation is now part of the entity and makes it easier for certain serialization topics. This was suggested by the KorGE community. - A new
EntityProvider
interface got added which allows to provide your own entity ID logic. Per default it will still use the Fleks built-in recycle ID logic. However, you can now define anEntityProvider
inside theconfigureWorld
function to use your own implementation. This should improve the usability for network gaming. - We now have a new built setup with Gradle 8.x, thanks to @aSemy. The entire gradle setup is now more modern and easier to maintain. Also, Snapshot and LTS releases are now automatically published when the build is successful.
- In addition to the gradle setup changes, Fleks now supports more native targets:
- linuxarm64
- macosarm64
- linuxx64
- macosx64
- mingwx64
ComponentHook
s got replaced by normal component functions. TheComponent
interface now has anonAddComponent
andonRemoveComponent
function which can be overridden to add custom functionality. Both functions run in the context of aWorld
. This makes it easier to write such logic because you no longer need to add theComponentHook
to your world configuration. Thanks to @geist-2501 for the contribution!- documentation fixes for
Entity.configure
function (@aSemy)
For more information about the new functionality, please check out the updated wiki.
2.3
- NEW:
EntityHook
to react on entity creation and removal. They are added via the world configuration withonAddEntity
andonRemoveEntity
- NEW:
componentTypeOf
utility function to easily create aComponentType
. This makes it a little bit shorter and more readable for components with multiple types. - NEW:
plusAssign
function with aList<Component*>>
parameter to assign multiple components at once to an entity. This will be useful in certain special cases where the normal typesafe variant is to restrictive. - NEW:
loadSnapshotOf
function to load a snapshot of a specific entity. This is similar toloadSnapshot
but for a single entity. - UPDATE: minor grammar fixes (missing ,) in some docs
- UPDATE: update Gradle to 7.6
2.2
- BUGFIX: fixed an issue that was introduced in version 2.1 which caused families to not get updated properly when used in a nested iteration way. Thanks to @ernespn for reporting this issue!
- NEW: added the
get
operator to theEntityBag
interface. This allows to do a normal for loop over a family. Thanks to @ScottHamper for the proposal and contribution! - UPDATE: updated Kotlin to 1.7.21
2.1
A small update that brings some collection functionality when working with entities (EntityBag
):
- UPDATE: Kotlin and Dokka to 1.7.20
- UPDATE: change
Entity
back to value class instead of data class - UPDATE: nested calls of
entity
andentity.configure
are now possible. Also, the documentation of those two functions got updated to point out a potential risk. - NEW: add entity
contains
function tofamily
- UPDATE:
IntBag
is now split into two classes:EntityBag
andMutableEntityBag
. You can use them in your own game if you want. - NEW: add a lot of collection functionality to
EntityBag
(thanks to @rubybrowncoat for the suggestion):size
contains
,containsAll
isEmpty
,isNotEmpty
all
,any
,none
associate
,associateBy
,associateTo
,associateByTo
count
filter
,filterNot
,filterIndexed
,filterTo
,filterNotTo
,filterIndexedTo
find
first
,firstOrNull
fold
,foldIndexed
forEach
,forEachIndexed
map
,mapIndexed
,mapTo
,mapIndexedTo
,mapNotNull
,mapNotNullTo
random
,randomOrNull
take
groupBy
,groupByTo
flatMap
,flatMapSequence
,flatMapBag
,flatMapNotNull
,flatMapSequenceNotNull
,flatMapBagNotNull
2.0
After almost one year, this release finally combines the JVM and KMP releases into one single release. I also tried to simplify Fleks for newcomers and be more consistent with the way of Kotlin, resulting in more concise and readable code.
This has the sideeffect, that there are several breaking changes in version 2.0 and you cannot simply upgrade from either 1.6-JVM or 1.6-KMP because of those API changes.
For more details, please check out the wiki which contains both, the hold and new API documentation.
If you want to migrate then also please have a look at this youtube video from myself, where I migrate some code segments from 1.6-JVM to 2.0.
I hope you like the new changes and try it out!
Special shout outs to @jobe-m and @czyzby who helped with the development of 2.0 by giving feedback and suggestions. And also for the verification in a KorGE game setup (jobe-m). Thanks!