public class

AccelerationData

extends BaseSensorData
package org.andengine.input.sensor.acceleration;

import java.util.Arrays;

import org.andengine.input.sensor.BaseSensorData;

import android.hardware.SensorManager;
import android.view.Surface;

/**
 * (c) 2010 Nicolas Gramlich 
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 16:50:44 - 10.03.2010
 */
public class AccelerationData extends BaseSensorData {
	// ===========================================================
	// Constants
	// ===========================================================

	private static final IAxisSwap AXISSWAPS[] = new IAxisSwap[4];

	static {
		AXISSWAPS[Surface.ROTATION_0] = new IAxisSwap() {
			@Override
			public void swapAxis(final float[] pValues) {
				final float x = -pValues[SensorManager.DATA_X];
				final float y = pValues[SensorManager.DATA_Y];
				pValues[SensorManager.DATA_X] = x;
				pValues[SensorManager.DATA_Y] = y;
			}
		};

		AXISSWAPS[Surface.ROTATION_90] = new IAxisSwap() {
			@Override
			public void swapAxis(final float[] pValues) {
				final float x = pValues[SensorManager.DATA_Y];
				final float y = pValues[SensorManager.DATA_X];
				pValues[SensorManager.DATA_X] = x;
				pValues[SensorManager.DATA_Y] = y;
			}
		};

		AXISSWAPS[Surface.ROTATION_180] = new IAxisSwap() {
			@Override
			public void swapAxis(final float[] pValues) {
				final float x = pValues[SensorManager.DATA_X];
				final float y = -pValues[SensorManager.DATA_Y];
				pValues[SensorManager.DATA_X] = x;
				pValues[SensorManager.DATA_Y] = y;
			}
		};

		AXISSWAPS[Surface.ROTATION_270] = new IAxisSwap() {
			@Override
			public void swapAxis(final float[] pValues) {
				final float x = -pValues[SensorManager.DATA_Y];
				final float y = -pValues[SensorManager.DATA_X];
				pValues[SensorManager.DATA_X] = x;
				pValues[SensorManager.DATA_Y] = y;
			}
		};
	}

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

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

	public AccelerationData(final int pDisplayOrientation) {
		super(3, pDisplayOrientation);
	}

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

	public float getX() {
		return this.mValues[SensorManager.DATA_X];
	}

	public float getY() {
		return this.mValues[SensorManager.DATA_Y];
	}

	public float getZ() {
		return this.mValues[SensorManager.DATA_Z];
	}

	public void setX(final float pX) {
		this.mValues[SensorManager.DATA_X] = pX;
	}

	public void setY(final float pY) {
		this.mValues[SensorManager.DATA_Y] = pY;
	}

	public void setZ(final float pZ) {
		this.mValues[SensorManager.DATA_Z]  = pZ;
	}

	@Override
	public void setValues(final float[] pValues) {
		super.setValues(pValues);

		AccelerationData.AXISSWAPS[this.mDisplayRotation].swapAxis(this.mValues);
	}

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

	@Override
	public String toString() {
		return "Acceleration: " + Arrays.toString(this.mValues);
	}

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

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

	private static interface IAxisSwap {
		// ===========================================================
		// Constants
		// ===========================================================

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

		public void swapAxis(final float[] pValues);
	}
}