dartemis 0.8.0 dartemis: ^0.8.0 copied to clipboard
An Entity System Framework for game development. Based on Artemis.
Changelog #
0.8.0 (Dart 2.0+ required) #
Breaking API Changes #
- removed deprecated code
- replaced
Entity
withint
, methods previously onEntity
need to be called onWorld
, with theint
value of the entity as the first parameter - removed
world.processEntityChanges
, it's now done by default after every system Aspect
no longer uses static methods, uses named constructors instead (migration: replaceAspect.getAspectF
withAspect.f
)- methods in
Aspect
no longer return the aspect, use cascading operator to chain calls - improved type safety for
world.getManager
andworld.getSystem
, no longer takes aType
as parameter and uses generic methods instead (e.g.world.getManager<TagManager>()
instead ofworld.getManager(TagManager)
) - removed
Type
parameter in constructor ofMapper
, change code fromMapper<Position>(Position, world)
toMapper<Position>(world)
Enhancements #
world.destroy()
for cleaning upEntitySystem
s andManager
s
Internal #
- existing entities are processed first, addition of new entities is processed last, makes more sense now that the processing is done after every system
0.7.3 #
Bugfixes #
- adding an entity to a dirty EntityBag could lead to an inconsistency between the bitset and the list of entities
0.7.2 #
Bugfixes #
- removing an entity multiple times caused it to be added to the entity pool multiple times
0.7.0 #
Breaking API Changes #
- renamed
Poolable
toPooled
- renamed
ComponentPoolable
toPooledComponent
- removed
FastMath
andUtils
, unrelated to ECS - removed
removeAll
fromBag
time
andframe
getters have been moved fromWorld
toEntitySystem
,World
has methods instead
API Changes #
- deprecated
ComponentMapper
useMapper
instead - deprecated
ComponentMapper#get(Entity)
, useMapper[Entity]
instead - properties have been added to the
World
, can be accessed using the[]
operator System
s can be assigned to a group when adding them to theWorld
,Word.process()
can be called for a specific group
Enhancements #
- performance improvement when removing entities
Bugfixes #
- DelayedEntityProcessingSystem keeps running until all current entities have expired
Internal #
- upgraded dependencies
0.6.0 #
API Changes #
Bag
isIterable
- removed
ReadOnlyBag
, when upgrading to 0.6.0 replace every occurence ofReadOnlyBag
withIterable
0.5.2 #
Enhancements #
- injection works for
Manager
s initialize()
in theManager
is no longer abstract (same as inEntitySystem
)World.createEntity
got an optional paramter to create anEntity
with components- new function
World.createAndAddEntity
which adds theEntity
to the world after creation
Bugfixes #
- added getter for the
World
inManager
- the uniqueId of an
Entity
was always 0, not very unique
0.5.0 #
Enhancements #
- more injection, less boilerplate (when using dartemis_mirrors)
- Instances of
ComponentMapper
no longer need to be created in theinitialize
-method of a system, they will be injected Manager
s andEntitySystem
s no longer need to be requested from theWorld
in theinitialize
-method of a system, they will be injected
- Instances of
0.4.2 #
0.4.1 #
Bugfixes #
World.deleteAllEntites()
did not work if there was already a deleted entity- writing to the
Bag
by index doesn't make it smaller anymore
0.4.0 #
API Changes #
- swapped parameters of
Tagmanager.register
- replaced
ImmutableBag
withReadOnlyBag
, added getter forReadOnlyBag
toBag
- changed
FreeComponents
toObjectPool
- old
Component
has changed, there are two different kinds of components now:- instances of classes extending
ComponentPoolable
will be added to theObjectPool
when they are removed from anEntity
(preventing garbage collection and allowing reuse) - instances of classes extending
Component
will not be added to theObjectPool
when they are removed from anEntity
(allowing garbage collection)
- instances of classes extending
Enhancements #
- added function
deleteAllEntities
toWorld
IntervalEntitySystem
has a getter for thedelta
since the systm was processed last- updated to work with Dart M4
Bugfixes #
GroupManager.isInGroup
works if entity is in no group