AndEngine icon indicating copy to clipboard operation
AndEngine copied to clipboard

Modifiers improved to be able to use them in more general pools :

Open flomin opened this issue 12 years ago • 0 comments

This patch improves the modifiers to be able to use them in pools:

  • reset methods taking a IEaseFunction as parameter added in BaseDoubleValueSpanModifier and BaseSingleValueSpanModifier classes
  • IModifier.clearModifierListeners method added to able to clear all modifier listeners when the modifier goes back in the pool
  • IModifier.onUnregister event method added to be able to recycle the modifier back to the pool easily
  • ModifierList.clear, remove and onUpdate method overridden from super class to call onUnregister event on modifiers

With this patch it's possible to create and use a pool of modifiers like this:

new GenericPool<MoveModifier> mMoveModifierPool = new GenericPool<MoveModifier>() {
    @Override
    protected MoveModifier onAllocatePoolItem() {
        final MoveModifier lRes = new MoveModifier(0, 0, 0, 0, 0) {
            @Override
            public void onUnregister(final IEntity pItem) {
                recyclePoolItem(this);
            }
        };
        lRes.setAutoUnregisterWhenFinished(true);
        return lRes;
    }

    @Override
    protected void onHandleObtainItem(final MoveModifier pItem) {
        pItem.clearModifierListeners();
    }
};

final MoveModifier lMoveModifier = mMoveModifierPool.obtainPoolItem();
lMoveModifier.reset(aDuration, fromX, toX, fromY, toY, EaseStrongIn.getInstance());
lMoveModifier.addModifierListener(new IModifierListener<IEntity>() {
    @Override public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) { }

    @Override
    public void onModifierFinished(final IModifier<IEntity> pModifier, final IEntity pItem) {
        // do something
    }
});
aShape.registerEntityModifier(lMoveModifier);

flomin avatar Apr 10 '13 16:04 flomin