public abstract class

BaseSingleValueChangeModifier

extends BaseDurationModifier<T>
package org.andengine.util.modifier;


/**
 * (c) 2010 Nicolas Gramlich
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 10:49:51 - 03.09.2010
 * @param <T>
 */
public abstract class BaseSingleValueChangeModifier<T> extends BaseDurationModifier<T> {
	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================

	private final float mValueChangePerSecond;

	// ===========================================================
	// Constructors
	// ===========================================================

	public BaseSingleValueChangeModifier(final float pDuration, final float pValueChange) {
		this(pDuration, pValueChange, null);
	}

	public BaseSingleValueChangeModifier(final float pDuration, final float pValueChange, final IModifierListener<T> pModifierListener) {
		super(pDuration, pModifierListener);

		this.mValueChangePerSecond = pValueChange / pDuration;
	}

	protected BaseSingleValueChangeModifier(final BaseSingleValueChangeModifier<T> pBaseSingleValueChangeModifier) {
		super(pBaseSingleValueChangeModifier);

		this.mValueChangePerSecond = pBaseSingleValueChangeModifier.mValueChangePerSecond;
	}

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================

	protected abstract void onChangeValue(final float pSecondsElapsed, final T pItem, final float pValue);

	@Override
	protected void onManagedInitialize(final T pItem) {

	}

	@Override
	protected void onManagedUpdate(final float pSecondsElapsed, final T pItem) {
		this.onChangeValue(pSecondsElapsed, pItem, this.mValueChangePerSecond * pSecondsElapsed);
	}

	// ===========================================================
	// Methods
	// ===========================================================

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}