Skip to content

artemis-odb-2.0.0-RC4

Compare
Choose a tag to compare
@junkdog junkdog released this 10 Jul 04:58
· 294 commits to develop since this release

Change Log

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
        to InvocationStrategy::process
      • InvocationStrategy::updateEntityStates must be called before processing the first system.
        Previously, the initial update was done by the world instance.
  • ComponentManager::compositionIdentity(BitSet) now public.
  • @AspectDescriptor now also valid on Archetypes.
  • EntityLinkManager fires 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 of SystemInvocationStrategy.
    • EntityFactory annotation processor and related classes have been removed,
      for more background, see #428.
  • AspectFieldResolver; additional default injection field resolver.
    • @AspectDescriptor on 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.
  • World#compositionId(entityId) added. Previously, one had to go
    via Entity#getCompositionId()
  • EntityManager#reset - if the world is empty, resets entity id generation to 0
  • Optimized entity subscriptions: compositionId pre-calculated and bundled
    by AspectSubscriptionManager before 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#getSafe deprecated, #get is sufficient for all use-cases now.
      due to mappers always growing their backing arrays to accomodate the highest entity id.
    • Calling BaseSystem#process will now run the system, even if setEnabled(false) has been called.
      SystemInvocationStrategy now tracks which systems are enabled/disabled.
      (you may want to update your custom SystemInvocationStrategy implementations).
    • Bag#getData throws ClassCastException when container wasn't created with any of the
      typed constructors.
  • 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).
    • LinkListener for 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.
  • @DelayedComponentRemoval guarantees that component is available in SubscriptionListener#removed(IntBag).
  • World#getRegistered, retrieves injectable objects programmatically.
  • Re-worked EntityEdit logic, less code and more performance.
  • ComponentType validates component when first encountered.
  • Removed PackedComponent and @PackedWeaver.
  • added AspectSubscriptionManager#getSubscriptions
  • added Bag(Class<T>) and Bag(Class<T>, int capacity)
  • IntBag#get throws ArrayIndexOutOfBoundsException whenever index is 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-serializer artifact, used by all serialization backends,
    • Kryo serialization backend: binary with kryo
      (thanks to @piotr-j).