package com.dzinelabs.game; import org.anddev.andengine.engine.Engine; import org.anddev.andengine.engine.camera.Camera; import org.anddev.andengine.engine.options.EngineOptions; import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation; import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy; import org.anddev.andengine.entity.Entity; import org.anddev.andengine.entity.primitive.Rectangle; import org.anddev.andengine.entity.scene.Scene; import org.anddev.andengine.entity.scene.Scene.IOnAreaTouchListener; import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener; import org.anddev.andengine.entity.scene.Scene.ITouchArea; import org.anddev.andengine.entity.shape.Shape; import org.anddev.andengine.entity.sprite.AnimatedSprite; import org.anddev.andengine.entity.sprite.Sprite; import org.anddev.andengine.entity.util.FPSLogger; import org.anddev.andengine.extension.physics.box2d.PhysicsConnector; import org.anddev.andengine.extension.physics.box2d.PhysicsFactory; import org.anddev.andengine.extension.physics.box2d.PhysicsWorld; import org.anddev.andengine.extension.physics.box2d.util.Vector2Pool; import org.anddev.andengine.input.touch.TouchEvent; import org.anddev.andengine.opengl.texture.Texture; import org.anddev.andengine.opengl.texture.TextureOptions; import org.anddev.andengine.opengl.texture.region.TextureRegion; import org.anddev.andengine.opengl.texture.region.TextureRegionFactory; import org.anddev.andengine.opengl.texture.region.TiledTextureRegion; import org.anddev.andengine.sensor.accelerometer.AccelerometerData; import org.anddev.andengine.sensor.accelerometer.IAccelerometerListener; import org.anddev.andengine.ui.activity.BaseGameActivity; import android.hardware.SensorManager; import android.util.DisplayMetrics; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef.BodyType; import com.badlogic.gdx.physics.box2d.FixtureDef; public class SimplePool extends BaseGameActivity implements IAccelerometerListener, IOnSceneTouchListener, IOnAreaTouchListener { private Camera mCamera; private Texture mTexture; private Texture mBallYellowTexture; private Texture mBallRedTexture; private Texture mBallBlackTexture; private Texture mBallBlueTexture; private Texture mBallGreenTexture; private Texture mBallOrangeTexture; private Texture mBallPinkTexture; private Texture mBallPurpleTexture; private Texture mBallWhiteTexture; private TiledTextureRegion mBallYellowTextureRegion; private TiledTextureRegion mBallRedTextureRegion; private TiledTextureRegion mBallBlackTextureRegion; private TiledTextureRegion mBallBlueTextureRegion; private TiledTextureRegion mBallGreenTextureRegion; private TiledTextureRegion mBallOrangeTextureRegion; private TiledTextureRegion mBallPinkTextureRegion; private TiledTextureRegion mBallPurpleTextureRegion; private TiledTextureRegion mBallWhiteTextureRegion; private Texture mBackgroundTexture; private TextureRegion mBackgroundTextureRegion; private PhysicsWorld mPhysicsWorld; private float mGravityX; private float mGravityY; private Scene mScene; private final int mFaceCount = 0; private final int CAMERA_WIDTH = 720; private final int CAMERA_HEIGHT = 480; @Override public Engine onLoadEngine() { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera)); } @Override public void onLoadResources() { this.mTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallBlackTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallBlueTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallGreenTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallOrangeTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallPinkTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallPurpleTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallYellowTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallRedTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBallWhiteTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); TextureRegionFactory.setAssetBasePath("gfx/"); mBallYellowTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallYellowTexture, this, "ball_yellow.png", 0, 0, 1, 1); // 64x32 mBallRedTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallRedTexture, this, "ball_red.png", 0, 0, 1, 1); // 64x32 mBallBlackTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallBlackTexture, this, "ball_black.png", 0, 0, 1, 1); // 64x32 mBallBlueTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallBlueTexture, this, "ball_blue.png", 0, 0, 1, 1); // 64x32 mBallGreenTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallGreenTexture, this, "ball_green.png", 0, 0, 1, 1); // 64x32 mBallOrangeTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallOrangeTexture, this, "ball_orange.png", 0, 0, 1, 1); // 64x32 mBallPinkTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallPinkTexture, this, "ball_pink.png", 0, 0, 1, 1); // 64x32 mBallPurpleTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallPurpleTexture, this, "ball_purple.png", 0, 0, 1, 1); // 64x32 mBallWhiteTextureRegion = TextureRegionFactory.createTiledFromAsset(this.mBallWhiteTexture, this, "ball_white.png", 0, 0, 1, 1); // 64x32 this.mBackgroundTexture = new Texture(512, 1024, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mBackgroundTextureRegion = TextureRegionFactory.createFromAsset(this.mBackgroundTexture, this, "table_bkg.png", 0, 0); this.enableAccelerometerSensor(this); this.mEngine.getTextureManager().loadTextures(this.mBackgroundTexture, mBallYellowTexture, mBallRedTexture, mBallBlackTexture, mBallBlueTexture, mBallGreenTexture, mBallOrangeTexture, mBallPinkTexture, mBallPurpleTexture); } @Override public Scene onLoadScene() { this.mEngine.registerUpdateHandler(new FPSLogger()); this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); this.mScene = new Scene(); this.mScene.attachChild(new Entity()); this.mScene.setBackgroundEnabled(false); this.mScene.setOnSceneTouchListener(this); Sprite backgrund = new Sprite(0, 0, this.mBackgroundTextureRegion); backgrund.setWidth(CAMERA_WIDTH); backgrund.setHeight(CAMERA_HEIGHT); backgrund.setPosition(0, 0); this.mScene.getChild(0).attachChild(backgrund); final Shape ground = new Rectangle(0, CAMERA_HEIGHT, CAMERA_WIDTH, 0); final Shape roof = new Rectangle(0, 0, CAMERA_WIDTH, 0); final Shape left = new Rectangle(0, 0, 0, CAMERA_HEIGHT); final Shape right = new Rectangle(CAMERA_WIDTH, 0, 0, CAMERA_HEIGHT); final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f); PhysicsFactory.createBoxBody(this.mPhysicsWorld, ground, BodyType.StaticBody, wallFixtureDef); PhysicsFactory.createBoxBody(this.mPhysicsWorld, roof, BodyType.StaticBody, wallFixtureDef); PhysicsFactory.createBoxBody(this.mPhysicsWorld, left, BodyType.StaticBody, wallFixtureDef); PhysicsFactory.createBoxBody(this.mPhysicsWorld, right, BodyType.StaticBody, wallFixtureDef); this.mScene.attachChild(ground); this.mScene.attachChild(roof); this.mScene.attachChild(left); this.mScene.attachChild(right); this.mScene.registerUpdateHandler(this.mPhysicsWorld); this.mScene.setOnAreaTouchListener(this); return this.mScene; } @Override public void onLoadComplete() { setupBalls(); } @Override public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final ITouchArea pTouchArea, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { if (pSceneTouchEvent.isActionDown()) { final AnimatedSprite face = (AnimatedSprite) pTouchArea; this.jumpFace(face); return true; } return false; } @Override public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) { if (this.mPhysicsWorld != null) { if (pSceneTouchEvent.isActionDown()) { // this.addFace(pSceneTouchEvent.getX(), // pSceneTouchEvent.getY()); return true; } } return false; } @Override public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) { this.mGravityX = pAccelerometerData.getX(); this.mGravityY = pAccelerometerData.getY(); final Vector2 gravity = Vector2Pool.obtain(this.mGravityX, this.mGravityY); this.mPhysicsWorld.setGravity(gravity); Vector2Pool.recycle(gravity); } private void setupBalls() { final AnimatedSprite[] balls = new AnimatedSprite[9]; final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); AnimatedSprite redBall = new AnimatedSprite(10, 10, this.mBallRedTextureRegion); AnimatedSprite yellowBall = new AnimatedSprite(20, 20, this.mBallYellowTextureRegion); AnimatedSprite blueBall = new AnimatedSprite(30, 30, this.mBallBlueTextureRegion); AnimatedSprite greenBall = new AnimatedSprite(40, 40, this.mBallGreenTextureRegion); AnimatedSprite orangeBall = new AnimatedSprite(50, 50, this.mBallOrangeTextureRegion); AnimatedSprite pinkBall = new AnimatedSprite(60, 60, this.mBallPinkTextureRegion); AnimatedSprite purpleBall = new AnimatedSprite(70, 70, this.mBallPurpleTextureRegion); AnimatedSprite blackBall = new AnimatedSprite(70, 70, this.mBallBlackTextureRegion); AnimatedSprite whiteBall = new AnimatedSprite(70, 70, this.mBallWhiteTextureRegion); balls[0] = redBall; balls[1] = yellowBall; balls[2] = blueBall; balls[3] = greenBall; balls[4] = orangeBall; balls[5] = pinkBall; balls[6] = purpleBall; balls[7] = blackBall; balls[8] = whiteBall; for (int i = 0; i < 9; i++) { Body body = PhysicsFactory.createBoxBody(this.mPhysicsWorld, balls[i], BodyType.DynamicBody, objectFixtureDef); this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(balls[i], body, true, true)); balls[i].animate(new long[] { 200, 200 }, 0, 1, true); balls[i].setUserData(body); this.mScene.registerTouchArea(balls[i]); this.mScene.attachChild(balls[i]); } } private void jumpFace(final AnimatedSprite face) { final Body faceBody = (Body) face.getUserData(); final Vector2 velocity = Vector2Pool.obtain(this.mGravityX * -50, this.mGravityY * -50); faceBody.setLinearVelocity(velocity); Vector2Pool.recycle(velocity); } }