package org.anddev.andengine.entity;
import java.util.Comparator;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.handler.IUpdateHandler;
import org.anddev.andengine.engine.handler.runnable.RunnableHandler;
import org.anddev.andengine.entity.modifier.IEntityModifier;
import org.anddev.andengine.entity.modifier.IEntityModifier.IEntityModifierMatcher;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.opengl.IDrawable;
import org.anddev.andengine.util.IMatcher;
import org.anddev.andengine.util.ParameterCallable;
import org.anddev.andengine.util.Transformation;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 11:20:25 - 08.03.2010
*/
public interface IEntity extends IDrawable, IUpdateHandler {
// ===========================================================
// Final Fields
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public boolean isVisible();
public void setVisible(final boolean pVisible);
public boolean isIgnoreUpdate();
public void setIgnoreUpdate(boolean pIgnoreUpdate);
public boolean isChildrenVisible();
public void setChildrenVisible(final boolean pChildrenVisible);
public boolean isChildrenIgnoreUpdate();
public void setChildrenIgnoreUpdate(boolean pChildrenIgnoreUpdate);
public int getZIndex();
public void setZIndex(final int pZIndex);
public boolean hasParent();
public IEntity getParent();
public void setParent(final IEntity pEntity);
public float getX();
public float getY();
public float getInitialX();
public float getInitialY();
public void setInitialPosition();
public void setPosition(final IEntity pOtherEntity);
public void setPosition(final float pX, final float pY);
public boolean isRotated();
public float getRotation();
public void setRotation(final float pRotation);
public float getRotationCenterX();
public float getRotationCenterY();
public void setRotationCenterX(final float pRotationCenterX);
public void setRotationCenterY(final float pRotationCenterY);
public void setRotationCenter(final float pRotationCenterX, final float pRotationCenterY);
public boolean isScaled();
public float getScaleX();
public float getScaleY();
public void setScaleX(final float pScaleX);
public void setScaleY(final float pScaleY);
public void setScale(final float pScale);
public void setScale(final float pScaleX, final float pScaleY);
public float getScaleCenterX();
public float getScaleCenterY();
public void setScaleCenterX(final float pScaleCenterX);
public void setScaleCenterY(final float pScaleCenterY);
public void setScaleCenter(final float pScaleCenterX, final float pScaleCenterY);
public float getRed();
public float getGreen();
public float getBlue();
public float getAlpha();
public void setAlpha(final float pAlpha);
public void setColor(final float pRed, final float pGreen, final float pBlue);
public void setColor(final float pRed, final float pGreen, final float pBlue, final float pAlpha);
/**
* @return a shared(!) float[] of length 2.
*/
public float[] getSceneCenterCoordinates();
/**
* @param pX
* @param pY
* @return a shared(!) float[] of length 2.
*/
public float[] convertLocalToSceneCoordinates(final float pX, final float pY);
/**
* @param pX
* @param pY
* @param pReuse must be of length 2.
* @return <code>pReuse</code> as a convenience.
*/
public float[] convertLocalToSceneCoordinates(final float pX, final float pY, final float[] pReuse);
/**
* @param pCoordinates must be of length 2.
* @return a shared(!) float[] of length 2.
*/
public float[] convertLocalToSceneCoordinates(final float[] pCoordinates);
/**
* @param pCoordinates must be of length 2.
* @param pReuse must be of length 2.
* @return <code>pReuse</code> as a convenience.
*/
public float[] convertLocalToSceneCoordinates(final float[] pCoordinates, final float[] pReuse);
/**
* @param pX
* @param pY
* @return a shared(!) float[] of length 2.
*/
public float[] convertSceneToLocalCoordinates(final float pX, final float pY);
/**
* @param pX
* @param pY
* @param pReuse must be of length 2.
* @return <code>pReuse</code> as a convenience.
*/
public float[] convertSceneToLocalCoordinates(final float pX, final float pY, final float[] pReuse);
/**
* @param pCoordinates must be of length 2.
* @return a shared(!) float[] of length 2.
*/
public float[] convertSceneToLocalCoordinates(final float[] pCoordinates);
/**
* @param pCoordinates must be of length 2.
* @param pReuse must be of length 2.
* @return <code>pReuse</code> as a convenience.
*/
public float[] convertSceneToLocalCoordinates(final float[] pCoordinates, final float[] pReuse);
public Transformation getLocalToSceneTransformation();
public Transformation getSceneToLocalTransformation();
// public Transformation getLocalToParentTransformation(); // TODO Add this method.
// public Transformation getParentToLocalTransformation(); // TODO Add this method.
public int getChildCount();
public void onAttached();
public void onDetached();
public void attachChild(final IEntity pEntity);
public boolean attachChild(final IEntity pEntity, final int pIndex);
public IEntity getChild(final int pIndex);
public IEntity getFirstChild();
public IEntity getLastChild();
public int getChildIndex(final IEntity pEntity);
public boolean setChildIndex(final IEntity pEntity, final int pIndex);
public IEntity findChild(final IEntityMatcher pEntityMatcher);
public boolean swapChildren(final int pIndexA, final int pIndexB);
public boolean swapChildren(final IEntity pEntityA, final IEntity pEntityB);
/**
* Sorts the {@link IEntity}s based on their ZIndex. Sort is stable.
*/
public void sortChildren();
/**
* Sorts the {@link IEntity}s based on the {@link Comparator} supplied. Sort is stable.
* @param pEntityComparator
*/
public void sortChildren(final Comparator<IEntity> pEntityComparator);
public boolean detachSelf();
/**
* <b><i>WARNING:</i> This function should be called from within
* {@link RunnableHandler#postRunnable(Runnable)} which is registered
* to a {@link Scene} or the {@link Engine} itself, because otherwise
* it may throw an {@link IndexOutOfBoundsException} in the
* Update-Thread or the GL-Thread!</b>
*/
public boolean detachChild(final IEntity pEntity);
/**
* <b><i>WARNING:</i> This function should be called from within
* {@link RunnableHandler#postRunnable(Runnable)} which is registered
* to a {@link Scene} or the {@link Engine} itself, because otherwise
* it may throw an {@link IndexOutOfBoundsException} in the
* Update-Thread or the GL-Thread!</b>
*/
public IEntity detachChild(final IEntityMatcher pEntityMatcher);
/**
* <b><i>WARNING:</i> This function should be called from within
* {@link RunnableHandler#postRunnable(Runnable)} which is registered
* to a {@link Scene} or the {@link Engine} itself, because otherwise
* it may throw an {@link IndexOutOfBoundsException} in the
* Update-Thread or the GL-Thread!</b>
*/
public boolean detachChildren(final IEntityMatcher pEntityMatcher);
public void detachChildren();
public void callOnChildren(final IEntityCallable pEntityCallable);
public void callOnChildren(final IEntityMatcher pEntityMatcher, final IEntityCallable pEntityCallable);
public void registerUpdateHandler(final IUpdateHandler pUpdateHandler);
public boolean unregisterUpdateHandler(final IUpdateHandler pUpdateHandler);
public boolean unregisterUpdateHandlers(final IUpdateHandlerMatcher pUpdateHandlerMatcher);
public void clearUpdateHandlers();
public void registerEntityModifier(final IEntityModifier pEntityModifier);
public boolean unregisterEntityModifier(final IEntityModifier pEntityModifier);
public boolean unregisterEntityModifiers(final IEntityModifierMatcher pEntityModifierMatcher);
public void clearEntityModifiers();
public void setUserData(Object pUserData);
public Object getUserData();
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public interface IEntityMatcher extends IMatcher<IEntity> {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
@Override
public boolean matches(final IEntity pEntity);
}
public interface IEntityCallable extends ParameterCallable<IEntity> {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
@Override
public void call(final IEntity pEntity);
}
}