artemis-odb-2.0.0-RC6
·
275 commits
to develop
since this release
Change Log
Version: 2.0.0-RC6 - 2016-08-09
- Fix:
IntBag::get(index), ArrayIndexOutOfBoundsException reported size of backing array, not logical size. - Fix: Possible IOOB exception when registering more than 64 systems.
- Fix: EntityLinkManager/LinkListener::onLinkKilled never fired for unestablished links.
Version: 2.0.0-RC5 - 2016-07-23
- BREAKING CHANGES
- All usage of BitSet replaced by BitVector.
- BitVector: custom bitset implementation, generally faster than
java.util.BitSet.- Optimized decoding of bits to integers, making all entity
mutations more efficient. unsafeGet,unsafeSet,unsafeClearrequire that the underlying
array can contain the bit index.BitVector::ensureCapacity(int bits)explicitly grows the bit vector.
Typically used together with theunsafe-methods.EntityManager::registerEntityStore(BitVector)- when representing
entity id:s as bits, makesunsafe-methods safe - as theEntityManager
grows the bit vector as necessary.
- Optimized decoding of bits to integers, making all entity
- Fix: Bag and IntBag equals method would return false for identical bags with different capacities.
Version: 2.0.0-RC4 - 2016-07-10
- BREAKING CHANGES
- Removed previously deprecated code, see: 5de377d.
- InvocationStrategy` - affectes custom implementations:
- bag-of-systems now stored as a field, instead of being passed as a parameter
toInvocationStrategy::process InvocationStrategy::updateEntityStatesmust be called before processing the first system.
Previously, the initial update was done by the world instance.
- bag-of-systems now stored as a field, instead of being passed as a parameter
ComponentManager::compositionIdentity(BitSet)now public.@AspectDescriptornow also valid on Archetypes.EntityLinkManagerfires events for initial entities when registering a LinkListener;
toggleable in constructor.
Version: 2.0.0-RC3 - 2016-06-21
- BREAKING CHANGES
- World's systems array is now typed with
BaseSystem; this should only have
implication for custom implementations ofSystemInvocationStrategy. - EntityFactory annotation processor and related classes have been removed,
for more background, see #428.
- World's systems array is now typed with
- AspectFieldResolver; additional default injection field resolver
@AspectDescriptoron appropriate fields to inject- Valid targets:
Aspect,Aspect.Builder,EntityTransmuter,EntitySubscription
- add
EntityTransmuter(World, Aspect.Builder)constructor - Deserialization exception reports on missing component identifiers (usually from
manually edited json). - Fix: WorldConfigurationBuilder.Priority didn't compare properly.
- Fix: thread safefty; InjectionCache's fields no longer static.
Version: 2.0.0-RC2 - 2016-05-26
- BREAKING CHANGES
- Components require a public no-args constructor. While this was allowed in past versions,
it never worked with serialization or pooled components.
- Components require a public no-args constructor. While this was allowed in past versions,
World#compositionId(entityId)added. Previously, one had to go
viaEntity#getCompositionId()EntityManager#reset- if the world is empty, resets entity id generation to0- Optimized entity subscriptions: compositionId pre-calculated and bundled
byAspectSubscriptionManagerbefore informing listeners. - Fix: ComponentMapper was accidentally marked as final in RC1.
Version: 2.0.0-RC1 - 2016-05-09
- BREAKING CHANGES
- Methods added to interface
Injector#getRegistered(Class|String) ComponentMapper#getSafedeprecated,#getis sufficient for all use-cases now.
due to mappers always growing their backing arrays to accomodate the highest entity id.- Calling
BaseSystem#processwill now run the system, even ifsetEnabled(false)has been called.
SystemInvocationStrategynow tracks which systems are enabled/disabled.
(you may want to update your customSystemInvocationStrategyimplementations). - Bag#getData throws ClassCastException when container wasn't created with any of the
typed constructors.
- Methods added to interface
- Optional manager: EntityLinkManager, discovery and maintenance of relationships between entities.
- Automatically tracks component fields:
@EntityId int,Entity,@EntityId IntBag,Bag<Entity>
(shares behavior with serialization). LinkListenerfor listening in on when links between entities are established, changed or disconnected.- Tune behavior with
@LinkPolicy, applied on component fields referencing entities. - Optimized link accessors via maven/gradle plugin - reflection-based fallback during development.
- Automatically tracks component fields:
@DelayedComponentRemovalguarantees that component is available inSubscriptionListener#removed(IntBag).World#getRegistered, retrieves injectable objects programmatically.- Re-worked
EntityEditlogic, less code and more performance. - ComponentType validates component when first encountered.
- Removed
PackedComponentand@PackedWeaver. - added
AspectSubscriptionManager#getSubscriptions - added
Bag(Class<T>)andBag(Class<T>, int capacity) IntBag#getthrowsArrayIndexOutOfBoundsExceptionwheneverindexis greater than the reported size,
regardless of the size of the underlying array.- All systems are first injected, after which all systems are initialized. Previously,
each system was injected/initialized at the same time. - Serialization
- new
artemis-odb-serializerartifact, used by all serialization backends, - Kryo serialization backend: binary with kryo
(thanks to @piotr-j).
- new