Java tutorial
/* ******************************************************************************** * Copyright (c) 2012 Samsung Electronics, Inc. * All rights reserved. * * This software is a confidential and proprietary information of Samsung * Electronics, Inc. ("Confidential Information"). You shall not disclose such * Confidential Information and shall use it only in accordance with the terms * of the license agreement you entered into with Samsung Electronics. ******************************************************************************** */ package com.thirdgame.shootkillninjabomb; import java.util.Iterator; import java.util.LinkedList; import org.andengine.engine.handler.BaseEntityUpdateHandler; import org.andengine.engine.handler.IUpdateHandler; import org.andengine.engine.handler.timer.ITimerCallback; import org.andengine.engine.handler.timer.TimerHandler; import org.andengine.entity.IEntity; import org.andengine.entity.scene.IOnSceneTouchListener; import org.andengine.entity.scene.ITouchArea; import org.andengine.entity.scene.Scene; import org.andengine.entity.scene.background.SpriteBackground; import org.andengine.entity.sprite.Sprite; import org.andengine.entity.text.Text; import org.andengine.extension.physics.box2d.PhysicsWorld; import org.andengine.extension.physics.box2d.util.Vector2Pool; import org.andengine.input.sensor.acceleration.AccelerationData; import org.andengine.input.sensor.acceleration.IAccelerationListener; import org.andengine.input.touch.TouchEvent; import org.andengine.opengl.font.StrokeFont; import org.andengine.opengl.texture.TextureOptions; import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas; import org.andengine.opengl.texture.region.ITextureRegion; import org.andengine.opengl.util.GLState; import org.andengine.opengl.vbo.VertexBufferObjectManager; import org.andengine.util.color.Color; import org.andengine.util.math.MathUtils; import android.app.Activity; import android.graphics.Typeface; import android.hardware.SensorManager; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.Fixture; import com.thirdgame.shootkillninjabomb.GraphicsKeys.GameTextureKeys; import org.andengine.engine.camera.Camera; /** * Class extending class Scene. This class is representing main scene. On this scan will be attach all layers. */ public class GameScene extends Scene implements IOnSceneTouchListener { private final ThirdGameActivity mThirdGameActivity; public final GameLayer mGameLayer; private final float mCameraWidth; private final float mCameraHeight; public static PhysicsWorld mPhysicsWorld; public static GameScene gameScene; public static ThirdGameActivity activity; private SceneManager mSceneManager; public static final int STEP_PER_SECOND = 30; private int mScore[] = new int[4]; private int mAccuracyScore[] = new int[4]; private int totalScore = 0; private int accuracyScore = 0; private boolean mInGameMenuIsOpen; private float nextDrop; private float dropDelay; private Iterator<Object> eggObjectIterator; private Iterator<Object> bulletObjectIterator; private Iterator<Particle> particleObjectIterator; private Iterator<ParticleOne> particleOneObjectIterator; private Iterator<ParticleTwo> particleTwoObjectIterator; private Iterator<ParticleThree> particleThreeObjectIterator; private Iterator<ParticleFour> particleFourObjectIterator; private Iterator<ParticleFive> particleFiveObjectIterator; private Object eggObject; private Particle particleObject; private ParticleOne particleOneObject; private ParticleTwo particleTwoObject; private ParticleThree particleThreeObject; private ParticleFour particleFourObject; private ParticleFive particleFiveObject; private BonusParticle bonusParticleObject; private Object bulletObject; private Hero mHero; public LinkedList<Object> objectList = new LinkedList<Object>(); public LinkedList<Object> bulletList = new LinkedList<Object>(); public LinkedList<Particle> particleList = new LinkedList<Particle>(); public LinkedList<ParticleOne> particleOneList = new LinkedList<ParticleOne>(); public LinkedList<ParticleTwo> particleTwoList = new LinkedList<ParticleTwo>(); public LinkedList<ParticleThree> particleThreeList = new LinkedList<ParticleThree>(); public LinkedList<ParticleFour> particleFourList = new LinkedList<ParticleFour>(); public LinkedList<ParticleFive> particleFiveList = new LinkedList<ParticleFive>(); public LinkedList<BonusParticle> bonusParticleList = new LinkedList<BonusParticle>(); public LinkedList<Object> bulletDestroyleList = new LinkedList<Object>(); private UserData userData; private Sprite mSpriteNumber[] = new Sprite[40]; public int mGetScore[] = new int[4]; public int mGetAccuracyScore[] = new int[4]; private float xVelocity = 0, yVelocity = 0; private float angularVelocity = 0; private int randomInt; private float linearDamping; private float scoreMultipleDelay = 10; private float freezeDelay = 5; private float freezeTime; private boolean freezeFlag = false; private float scoreMultipleTime; private boolean scoreMultipleFlag = false; private int bulletCount = 0; private int bulletHitCount = 0; private boolean gameStart = false; private Sprite mLivesZero; private Sprite mLivesOne; private int livesCount = 0; private StrokeFont mStrokeFont; private Text bestScore; private float startdelay = 0; private boolean noInitialTime = false; private float dampingFactor = 0; // private final TimerHandler mGameTimerHandler; public GameScene(final ThirdGameActivity parent) { super(); mThirdGameActivity = parent; //this is to access activity in object class activity = parent; gameScene = this; parent.setGameScene(this); /*mPhysicsWorld = new FixedStepPhysicsWorld(STEP_PER_SECOND, new Vector2(AppCache.getInstance().getFloat( AppCacheKey.WIND_STRENGTH), SensorManager.STANDARD_GRAVITY), false);*/ mPhysicsWorld = new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false); // cameraWidth and cameraHeight must // be set before creating main layer mCameraWidth = mThirdGameActivity.getEngine().getCamera().getWidth(); mCameraHeight = mThirdGameActivity.getEngine().getCamera().getHeight(); mGameLayer = new GameLayer(this); attachChild(mGameLayer); mHero = new Hero(); setOnAreaTouchListener(mGameLayer); setOnSceneTouchListener(mGameLayer); mStrokeFont = new StrokeFont(activity.getFontManager(), new BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR), Typeface.createFromAsset(activity.getAssets(), "font/fab.TTF"), 40, true, Color.WHITE, 1, Color.BLACK); mStrokeFont.load(); bestScore = new Text(ThirdGameActivity.SCREEN_WIGHT * 0.8f, ThirdGameActivity.SCREEN_HIGHT * 0.1f, this.mStrokeFont, "Best " + activity.getBestScore(), mThirdGameActivity.getVertexBufferObjectManager()); attachChild(bestScore); // setTouchAreaBindingOnActionDownEnabled(true); // setTouchAreaBindingOnActionMoveEnabled(true); /* if (AppCache.getInstance().getBoolean(AppCacheKey.DEBUG_MODE)) { final Box2dDebugRenderer box2dDebugRender = new Box2dDebugRenderer(mPhysicsWorld, mThirdGameActivity.getVertexBufferObjectManager()); attachChild(box2dDebugRender); }*/ initScore(); registerUpdateHandler(mPhysicsWorld); registerUpdateHandler(getUpdateHandler()); // mPhysicsWorld.setContactListener(new CollisionListener(this)); /* final int currentLevel = AppCache.getInstance().getInt(AppCacheKey.CURRENT_LEVEL); final float gameSpeed = GameUtils.getSpeedForLevel(currentLevel); mGameTimerHandler = createTimerHandler(gameSpeed); runOnUpdateThread(new Runnable() { @Override public void run() { attachHens(gameSpeed); } });*/ // registerUpdateHandler(mGameTimerHandler); final ITextureRegion menuBackgorund = mThirdGameActivity .getGameTextureRegion(GameTextureKeys.GAME_BACKGROUND); final SpriteBackground sprbackground = new SpriteBackground( new Sprite(0, 0, menuBackgorund, mThirdGameActivity.getVertexBufferObjectManager()) { @Override protected void preDraw(GLState pGLState, Camera pCamera) { super.preDraw(pGLState, pCamera); pGLState.enableDither(); } }); setBackground(sprbackground); mLivesZero = new Sprite(10, 10, mThirdGameActivity.getGameTextureRegion(GameTextureKeys.LIVES), mThirdGameActivity.getVertexBufferObjectManager()); mLivesOne = new Sprite(52, 10, mThirdGameActivity.getGameTextureRegion(GameTextureKeys.LIVES), mThirdGameActivity.getVertexBufferObjectManager()); attachChild(mLivesZero); attachChild(mLivesOne); for (int k = 0; k < 2; k++) { UserData u; eggObject = ObjectPool.sharedObjectPool().obtainPoolItem(); objectList.add(eggObject); u = (UserData) eggObject.body.getUserData(); u.type = "Remove"; eggObject = BrownskyblueeggPool.sharedObjectPool().obtainPoolItem(); objectList.add(eggObject); u = (UserData) eggObject.body.getUserData(); u.type = "Remove"; eggObject = OrangeeyelloweggPool.sharedObjectPool().obtainPoolItem(); objectList.add(eggObject); u = (UserData) eggObject.body.getUserData(); u.type = "Remove"; eggObject = BlueeegreeneggPool.sharedObjectPool().obtainPoolItem(); objectList.add(eggObject); u = (UserData) eggObject.body.getUserData(); u.type = "Remove"; } eggObject = NewblueredeggPool.sharedObjectPool().obtainPoolItem(); objectList.add(eggObject); UserData eU = (UserData) eggObject.body.getUserData(); eU.type = "Remove"; eggObject = NewblueyellowPool.sharedObjectPool().obtainPoolItem(); objectList.add(eggObject); UserData nU = (UserData) eggObject.body.getUserData(); nU.type = "Remove"; cleanObjectList(); if (!BulletPool.isNew) BulletPool.isNew = true; for (int k = 0; k < 8; k++) { eggObject = BulletPool.sharedObjectPool().obtainPoolItem(); bulletList.add(eggObject); UserData u = (UserData) eggObject.body.getUserData(); u.type = "Remove"; BulletPool.isNew = false; } BulletPool.isNew = true; for (int k = 0; k < 1; k++) { particleObject = ParticlePool.sharedObjectPool().obtainPoolItem(); particleList.add(particleObject); } for (int k = 0; k < 1; k++) { particleOneObject = ParticleOnePool.sharedObjectPool().obtainPoolItem(); particleOneList.add(particleOneObject); } for (int k = 0; k < 1; k++) { particleTwoObject = ParticleTwoPool.sharedObjectPool().obtainPoolItem(); particleTwoList.add(particleTwoObject); } for (int k = 0; k < 1; k++) { particleThreeObject = ParticleThreePool.sharedObjectPool().obtainPoolItem(); particleThreeList.add(particleThreeObject); } for (int k = 0; k < 1; k++) { particleFourObject = ParticleFourPool.sharedObjectPool().obtainPoolItem(); particleFourList.add(particleFourObject); } for (int k = 0; k < 1; k++) { particleFiveObject = ParticleFivePool.sharedObjectPool().obtainPoolItem(); particleFiveList.add(particleFiveObject); } BulletPool.isNew = false; cleanObjectList(); } private void cleanOneParticle() { // TODO Auto-generated method stub } @Override public void registerTouchArea(final ITouchArea pTouchArea) { throw new IllegalAccessError("Must use AnimatedSpriteWithAreaToTouch as the pTouchArea parameter"); } private IUpdateHandler getUpdateHandler() { return new BaseEntityUpdateHandler(this) { @Override protected void onUpdate(final float pSecondsElapsed, final IEntity pEntity) { updateMainScene(); } }; } private TimerHandler createTimerHandler(final float pGameSpeed) { final TimerHandler result = new TimerHandler(pGameSpeed, true, new ITimerCallback() { @Override public void onTimePassed(final TimerHandler pTimerHandler) { } }); return result; } /** * Shows animated */ private void onGameOver() { /* final BitmapFont bitmapFont = getBitmapFont(BitmapFontKeys.ANIMATED_TEXT_FONT); final AnimatedText gameOverText = new AnimatedText(0, 0, bitmapFont, mThirdGameActivity.getString(R.string.game_over), new TextOptions(HorizontalAlign.CENTER), getVertexBufferObjectManager(), EffectType.DISAPPEAR, 2f); final float xCoord = mGameLayer.getCameraWidth() / 2 - gameOverText.getWidth() / 2; final float yCoord = mGameLayer.getCameraHeight() / 2 - gameOverText.getHeight() / 2; gameOverText.setPosition(xCoord, yCoord); gameOverText.registerEntityModifier(new SequenceEntityModifier(new IEntityModifierListener() { @Override public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) { // Do nothing } @Override public void onModifierFinished(final IModifier<IEntity> pModifier, final IEntity pItem) { gameOverText.detachSelf(); if (gameOverText.isDisposed()) { gameOverText.dispose(); } final int currentScore = AppCache.getInstance().getInt(AppCacheKey.CURRENT_SCORE); final int highScore = AppCache.getInstance().getInt(AppCacheKey.HIGH_SCORE); if (currentScore > highScore) { showDialog(); unregisterUpdateHandler(mGameTimerHandler); } else { mThirdGameActivity.setCurrentScene(SceneType.MENU); } } }, new ParallelEntityModifier(new ScaleModifier(0.5f, 1.0f, 5f)), new AlphaModifier(0.3f, 1f, 0f))); attachChild(gameOverText);*/ } public float getCameraWidth() { return mCameraWidth; } public float getCameraHeight() { return mCameraHeight; } /** * Simple wrapper around Scene.registerTouchArea(ITouchArea). <b>Must be used to register touch area.</b> */ /* public void registerTouchArea(final AnimatedSpriteWithAreaToTouch pTouchArea) { super.registerTouchArea(pTouchArea); }*/ /** * Simple wrapper around Scene.registerTouchArea(ITouchArea). <b>Must be used to register touch area.</b> */ /*public void registerTouchArea(final ButtonSpriteWithSound pTouchArea) { super.registerTouchArea(pTouchArea); }*/ /** * Simple wrapper around Scene.registerTouchArea(ITouchArea). <b>Must be used to register touch area.</b> */ /* public void registerTouchArea(final ToggleButtonSprite pTouchArea) { super.registerTouchArea(pTouchArea); }*/ /** * Method updates the scene <b>IMPORTANT</b>This method must be called on update thread after the step() method of * physics engine was called to avoid runtime exceptions */ public void updateMainScene() { /* mPhysicsWorld.setGravity(new Vector2(AppCache.getInstance().getFloat(AppCacheKey.WIND_STRENGTH), SensorManager.STANDARD_GRAVITY)); mGameLayer.onUpdateLayer();*/ if (!gameStart && activity.getGameCount() < 2) { setIgnoreUpdate(true); getAudioPlayer().play(SoundKeys.GAME_START); mThirdGameActivity.runOnUiThread(new Runnable() { public void run() { mThirdGameActivity.showHelpDialog(); } }); } if (!gameStart) { gameStart = true; getAudioPlayer().play(SoundKeys.GAME_START); } nextDrop -= 1 / 50.0f; dropDelay -= 1 / 60.0f; if (!scoreMultipleFlag) scoreMultipleDelay -= 1 / 60.0f; else scoreMultipleTime -= 1 / 30f; if (!freezeFlag) freezeDelay -= 1 / 60.0f; else freezeTime -= 1 / 30f; if (startdelay > 20 && !noInitialTime) { noInitialTime = true; dampingFactor = 0; } else if (startdelay <= 20) { startdelay += 1 / 60.0f; dampingFactor = 2f * (20 - startdelay) / 20; } if (nextDrop <= 0) { randomInt = MathUtils.random(0, 3); linearDamping = MathUtils.random(0, 5) * 0.2f + dampingFactor; //for(int k=0;k<randomInt;k++) { if (randomInt == 0) eggObject = ObjectPool.sharedObjectPool().obtainPoolItem(); else if (randomInt == 1) eggObject = BrownskyblueeggPool.sharedObjectPool().obtainPoolItem(); else if (randomInt == 2) eggObject = OrangeeyelloweggPool.sharedObjectPool().obtainPoolItem(); else if (randomInt == 3) eggObject = BlueeegreeneggPool.sharedObjectPool().obtainPoolItem(); float u = eggObject.face.getY(); u = eggObject.face.getX(); userData = (UserData) eggObject.body.getUserData(); if (userData.eggType == "redyellowegg") { xVelocity = MathUtils.random(-12, -10); yVelocity = -0.5f; angularVelocity = MathUtils.random(-20, -10); linearDamping = 1f; } else if (userData.eggType == "brownskyblueegg") { xVelocity = MathUtils.random(-8, -6); yVelocity = -0.4f; angularVelocity = MathUtils.random(-10, 0); linearDamping = 0.8f; } else if (userData.eggType == "orangeeyellowegg") { xVelocity = MathUtils.random(-5, -3); yVelocity = -0.3f; angularVelocity = MathUtils.random(0, 10); linearDamping = 0.6f; } else if (userData.eggType == "blueeegreenegg") { xVelocity = MathUtils.random(-2, 0); yVelocity = -0.1f; angularVelocity = MathUtils.random(10, 20); linearDamping = 0.4f; } if (MathUtils.random(0, 10) == 1) userData.isCritical = true; else userData.isCritical = false; //gameObject.face.setPosition(MathUtils.random(200, 600),0); eggObject.body.setTransform(MathUtils.random(600, 600) / 32, 1, 0); eggObject.body.setLinearVelocity(xVelocity, yVelocity); eggObject.body.setAngularVelocity(angularVelocity); linearDamping += dampingFactor; if (freezeFlag) linearDamping = 2; eggObject.body.setLinearDamping(linearDamping); // b.body.setUserData(new UserData("Shape",u.eggType,u.isCritical)); userData.type = "Shape"; objectList.add(eggObject); } nextDrop = 4 * MathUtils.random(0.1f, 0.5f); } if (dropDelay <= 0) { randomInt = MathUtils.random(0, 3); linearDamping = MathUtils.random(0, 5) * 0.2f + dampingFactor; //for(int k=0;k<randomInt;k++) { if (randomInt == 0) eggObject = ObjectPool.sharedObjectPool().obtainPoolItem(); else if (randomInt == 1) eggObject = BrownskyblueeggPool.sharedObjectPool().obtainPoolItem(); else if (randomInt == 2) eggObject = OrangeeyelloweggPool.sharedObjectPool().obtainPoolItem(); else if (randomInt == 3) eggObject = BlueeegreeneggPool.sharedObjectPool().obtainPoolItem(); float u = eggObject.face.getY(); u = eggObject.face.getX(); userData = (UserData) eggObject.body.getUserData(); if (userData.eggType == "redyellowegg") { xVelocity = -MathUtils.random(-12, -10); yVelocity = 0.08f; angularVelocity = -MathUtils.random(-4, -2); linearDamping = 1f; } else if (userData.eggType == "brownskyblueegg") { xVelocity = -MathUtils.random(-8, -6); yVelocity = 0.06f; angularVelocity = -MathUtils.random(-2, 0); linearDamping = 0.8f; } else if (userData.eggType == "orangeeyellowegg") { xVelocity = -MathUtils.random(-5, -3); yVelocity = 0.04f; angularVelocity = -MathUtils.random(2, 4); linearDamping = 0.6f; } else if (userData.eggType == "blueeegreenegg") { xVelocity = -MathUtils.random(-2, 0); yVelocity = 0.02f; angularVelocity = -MathUtils.random(0, 2); linearDamping = 0.4f; } if (MathUtils.random(0, 10) == 1) userData.isCritical = true; else userData.isCritical = false; //gameObject.face.setPosition(MathUtils.random(200, 600),0); eggObject.body.setTransform(MathUtils.random(200, 200) / 32, 1, 0); eggObject.body.setLinearVelocity(xVelocity, yVelocity); eggObject.body.setAngularVelocity(angularVelocity); /* final Vector2 gravity = Vector2Pool.obtain(0,5); final Vector2 gravityq = Vector2Pool.obtain(eggObject.face.getX(),eggObject.face.getY()); eggObject.body.applyForce(gravity, gravityq);*/ linearDamping += dampingFactor; if (freezeFlag) linearDamping = 2; eggObject.body.setLinearDamping(linearDamping); // b.body.setUserData(new UserData("Shape",u.eggType,u.isCritical)); userData.type = "Shape"; objectList.add(eggObject); } dropDelay = 4 * MathUtils.random(0.2f, 0.5f); } if (scoreMultipleDelay <= 0 && !scoreMultipleFlag && noInitialTime) { linearDamping = MathUtils.random(0, 5) * 0.2f; eggObject = NewblueyellowPool.sharedObjectPool().obtainPoolItem(); //gameObject.face.setPosition(MathUtils.random(200, 600),0); eggObject.body.setTransform(MathUtils.random(400, 400) / 32, 1, 0); eggObject.body.setAngularVelocity(MathUtils.random(-7, -2)); if (freezeFlag) linearDamping = 2; eggObject.body.setLinearDamping(linearDamping); if (MathUtils.random(1, 2) == 1) eggObject.body.setLinearVelocity(MathUtils.random(-10, -3), -0.3f); else eggObject.body.setLinearVelocity(-MathUtils.random(-10, -3), 0.3f); // b.body.setUserData(new UserData("Shape",u.eggType,u.isCritical)); userData = (UserData) eggObject.body.getUserData(); userData.type = "Shape"; objectList.add(eggObject); scoreMultipleDelay = 15 * MathUtils.random(0.1f, 0.5f); } if (freezeDelay <= 0 && !freezeFlag && noInitialTime) { linearDamping = MathUtils.random(0, 5) * 0.2f; eggObject = NewblueredeggPool.sharedObjectPool().obtainPoolItem(); //gameObject.face.setPosition(MathUtils.random(200, 600),0); eggObject.body.setTransform(MathUtils.random(400, 400) / 32, 1, 0); eggObject.body.setAngularVelocity(MathUtils.random(-7, -2)); eggObject.body.setLinearDamping(linearDamping); if (MathUtils.random(1, 2) == 1) eggObject.body.setLinearVelocity(MathUtils.random(-10, -3), -0.3f); else eggObject.body.setLinearVelocity(-MathUtils.random(-10, -3), 0.3f); // b.body.setUserData(new UserData("Shape",u.eggType,u.isCritical)); userData = (UserData) eggObject.body.getUserData(); userData.type = "Shape"; objectList.add(eggObject); freezeDelay = 15 * MathUtils.random(0.1f, 0.5f); } if (freezeTime <= 0) freezeFlag = false; if (scoreMultipleTime <= 0) scoreMultipleFlag = false; cleanParticle(); cleanParticleOne(); cleanParticleTwo(); cleanBullet(); setTopGameScene(); //cleanObjectList(); } public void cleanBullet() { bulletObjectIterator = bulletList.iterator(); while (bulletObjectIterator.hasNext()) { bulletObject = bulletObjectIterator.next(); userData = (UserData) bulletObject.body.getUserData(); if (userData.type == "Remove") { // bulletDestroyleList.add(bulletObject); BulletPool.sharedObjectPool().recyclePoolItem(bulletObject); bulletObjectIterator.remove(); } } } public void cleanParticle() { particleObjectIterator = particleList.iterator(); while (particleObjectIterator.hasNext()) { particleObject = particleObjectIterator.next(); if (!particleObject.particleSystem[0].hasParent()) { ParticlePool.sharedObjectPool().recyclePoolItem(particleObject); particleObjectIterator.remove(); } } } public void cleanParticleOne() { particleOneObjectIterator = particleOneList.iterator(); while (particleOneObjectIterator.hasNext()) { particleOneObject = particleOneObjectIterator.next(); if (!particleOneObject.particleSystem[0].hasParent()) { ParticleOnePool.sharedObjectPool().recyclePoolItem(particleOneObject); particleOneObjectIterator.remove(); } } } public void cleanParticleTwo() { particleTwoObjectIterator = particleTwoList.iterator(); while (particleTwoObjectIterator.hasNext()) { particleTwoObject = particleTwoObjectIterator.next(); if (!particleTwoObject.particleSystem[0].hasParent()) { ParticleTwoPool.sharedObjectPool().recyclePoolItem(particleTwoObject); particleTwoObjectIterator.remove(); } } } public void cleanParticleThree() { particleThreeObjectIterator = particleThreeList.iterator(); while (particleThreeObjectIterator.hasNext()) { particleThreeObject = particleThreeObjectIterator.next(); if (!particleThreeObject.particleSystem[0].hasParent()) { ParticleThreePool.sharedObjectPool().recyclePoolItem(particleThreeObject); particleThreeObjectIterator.remove(); } } } public void cleanParticleFour() { particleFourObjectIterator = particleFourList.iterator(); while (particleFourObjectIterator.hasNext()) { particleFourObject = particleFourObjectIterator.next(); if (!particleFourObject.particleSystem[4].hasParent()) { ParticleFourPool.sharedObjectPool().recyclePoolItem(particleFourObject); particleFourObjectIterator.remove(); } } } public void cleanParticleFive() { particleFiveObjectIterator = particleFiveList.iterator(); while (particleFiveObjectIterator.hasNext()) { particleFiveObject = particleFiveObjectIterator.next(); if (!particleFiveObject.particleSystem[4].hasParent()) { ParticleFivePool.sharedObjectPool().recyclePoolItem(particleFiveObject); particleFiveObjectIterator.remove(); } } } public void cleanObjectList() { eggObjectIterator = objectList.iterator(); while (eggObjectIterator.hasNext()) { eggObject = eggObjectIterator.next(); userData = (UserData) eggObject.body.getUserData(); if (userData.type == "Remove") { // userData.type="Deleted"; if (userData.eggType == "redyellowegg") ObjectPool.sharedObjectPool().recyclePoolItem(eggObject); else if (userData.eggType == "brownskyblueegg") BrownskyblueeggPool.sharedObjectPool().recyclePoolItem(eggObject); else if (userData.eggType == "orangeeyellowegg") OrangeeyelloweggPool.sharedObjectPool().recyclePoolItem(eggObject); else if (userData.eggType == "blueeegreenegg") BlueeegreeneggPool.sharedObjectPool().recyclePoolItem(eggObject); else if (userData.eggType == "newblueyellow") NewblueyellowPool.sharedObjectPool().recyclePoolItem(eggObject); else if (userData.eggType == "newblueredegg") NewblueredeggPool.sharedObjectPool().recyclePoolItem(eggObject); eggObjectIterator.remove(); } } } /** * Simple wrapper around ThirdGameActivity.getGameTextureRegion(GameTextureKey) method. */ public ITextureRegion getGameTextureRegion(final GameTextureKeys pKey) { return mThirdGameActivity.getGameTextureRegion(pKey); } /** * Simple wrapper around ThirdGameActivity.getVertexBufferObjectManager() method. */ public VertexBufferObjectManager getVertexBufferObjectManager() { return mThirdGameActivity.getVertexBufferObjectManager(); } public LinkedList<Object> getObjectList() { return objectList; } /*public PhysicsWorld getPhysicsWorld() { return mPhysicsWorld; }*/ /** * Simple wrapper around ThirdGameActivity.runOnUpdateThread() method. */ public final void runOnUpdateThread(final Runnable runnable) { mThirdGameActivity.runOnUpdateThread(runnable); } /** * Simple wrapper around ThirdGameActivity.setCurrentScene(SceneType) method. */ public void setCurrentScene(final SceneType pSceneType) { mThirdGameActivity.setCurrentScene(pSceneType); } /** * Handles collisions of two game objects. * * @param pContact * - information about the objects involved in the collision. */ /* public void onCollision(final Contact pContact) { mGameLayer.onCollision(pContact); }*/ /** * Sets a flag informing that the InGameMenuScene is on top. * * @param pInGameMenuIsOpen * Indicates if InGameMenuScene is on top. */ public void setInGameMenuIsOpen(final boolean pInGameMenuIsOpen) { mInGameMenuIsOpen = pInGameMenuIsOpen; } /** * Returns information about InGameMenuScene state. * * @return true if InGameMenuScene is on top, false otherwise. */ public boolean isInGameMenuOpen() { return mInGameMenuIsOpen; } public AudioPlayer getAudioPlayer() { return mThirdGameActivity.getAudioPlayer(); } /** Simple wrapper around TimerHandler.setTimerSeconds(float) method. */ public void setGameSpeed(final float pGameSpeed) { // mGameTimerHandler.setTimerSeconds(pGameSpeed); } /** Simple wrapper around ThirdGameActivity.getAudioPlayer() method. */ /* public AudioPlayer getAudioPlayer() { return mThirdGameActivity.getAudioPlayer(); } */ /** * Shows 'enter a new player name' dialog. */ private void showDialog() { /* final FragmentManager fm = mThirdGameActivity.getFragmentManager(); // Create and show the dialog. final DialogFragment newFragment = NewProfileDialog.newInstance(); newFragment.show(fm, "dialog");*/ } /** * Reset game scene. */ public void resetScene() { mThirdGameActivity.resetGame(); } public Activity getThirdGameActivity() { return mThirdGameActivity; } @Override public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { // TODO Auto-generated method stub return false; } public void moveHero(AccelerationData pAccelerationData) { // TODO Auto-generated method stub final Vector2 gravity = Vector2Pool.obtain(pAccelerationData.getX() * 3, pAccelerationData.getY() * 3); mHero.MoveHero(gravity); Vector2Pool.recycle(gravity); } public void setSceneManager(SceneManager s) { mSceneManager = s; } public SceneManager getSceneManager() { return mSceneManager; } public void fireBullet(TouchEvent pSceneTouchEvent) { eggObject = BulletPool.sharedObjectPool().obtainPoolItem(); eggObject.face.setPosition(100, 100); double i = Math.atan2((mHero.face.getY() - pSceneTouchEvent.getY()), (-pSceneTouchEvent.getX() + mHero.face.getX())); double p = Math.atan2((pSceneTouchEvent.getX() - mHero.face.getX()), -(mHero.face.getY() + pSceneTouchEvent.getY())); eggObject.body.setTransform(mHero.face.getX() / 32 + mHero.face.getWidth() / 64, mHero.face.getY() / 32, (float) -p); float sin = (float) Math.sin(i); float cos = (float) Math.cos(i); final Vector2 gravity = Vector2Pool.obtain(-25 * cos, -Math.abs(25 * sin)); eggObject.body.setLinearVelocity(gravity); bulletList.add(eggObject); bulletDestroyleList.add(eggObject); bulletCount++; } public void fireParticle(Fixture x1) { particleObject = ParticlePool.sharedObjectPool().obtainPoolItem(); particleList.add(particleObject); particleObject.SetUpParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.95f, particleObject); particleObject.SetUprParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 0.95f, particleObject); particleObject.SetDownParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 1.02f, particleObject); particleObject.SetDownrParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 1.02f, particleObject); } public void fireParticleOne(Fixture x1) { particleOneObject = ParticleOnePool.sharedObjectPool().obtainPoolItem(); particleOneList.add(particleOneObject); particleOneObject.SetUpParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.95f, particleOneObject); particleOneObject.SetUprParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 0.95f, particleOneObject); particleOneObject.SetDownParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 1.02f, particleOneObject); particleOneObject.SetDownrParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 1.02f, particleOneObject); } public void fireParticleTwo(Fixture x1) { particleTwoObject = ParticleTwoPool.sharedObjectPool().obtainPoolItem(); particleTwoList.add(particleTwoObject); particleTwoObject.SetUpParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.95f, particleTwoObject); particleTwoObject.SetUprParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 0.95f, particleTwoObject); particleTwoObject.SetDownParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 1.02f, particleTwoObject); particleTwoObject.SetDownrParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 1.02f, particleTwoObject); } public void fireParticleThree(Fixture x1) { particleThreeObject = ParticleThreePool.sharedObjectPool().obtainPoolItem(); particleThreeList.add(particleThreeObject); particleThreeObject.SetUpParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.95f, particleThreeObject); particleThreeObject.SetUprParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 0.95f, particleThreeObject); particleThreeObject.SetDownParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 1.02f, particleThreeObject); particleThreeObject.SetDownrParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 1.02f, particleThreeObject); } public void fireParticleFour(Fixture x1) { scoreMultipleTime = 60 * MathUtils.random(0.1f, 0.5f); scoreMultipleFlag = true; particleFourObject = ParticleFourPool.sharedObjectPool().obtainPoolItem(); particleFourList.add(particleFourObject); particleFourObject.SetUpParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.95f, particleFourObject); particleFourObject.SetUprParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 0.95f, particleFourObject); particleFourObject.SetDownParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 1.02f, particleFourObject); particleFourObject.SetDownrParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 1.02f, particleFourObject); particleFourObject.ScoreMultipleParticle(400 - 75, 240, particleFourObject); } public void fireParticleFive(Fixture x1) { freezeTime = 60 * MathUtils.random(0.1f, 0.5f); freezeFlag = true; particleFiveObject = ParticleFivePool.sharedObjectPool().obtainPoolItem(); particleFiveList.add(particleFiveObject); particleFiveObject.SetUpParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.95f, particleFiveObject); particleFiveObject.SetUprParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 0.95f, particleFiveObject); particleFiveObject.SetDownParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 1.02f, particleFiveObject); particleFiveObject.SetDownrParticle(x1.getBody().getPosition().x * 32 * 1.1f, x1.getBody().getPosition().y * 32 * 1.02f, particleFiveObject); particleFiveObject.ScoreMultipleParticle(400 - 75, 240 - 75, particleFiveObject); } public void initScore() { mSpriteNumber[0] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S0), getVertexBufferObjectManager()); mSpriteNumber[10] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S0), getVertexBufferObjectManager()); mSpriteNumber[20] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S0), getVertexBufferObjectManager()); mSpriteNumber[30] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S0), getVertexBufferObjectManager()); mSpriteNumber[1] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S1), getVertexBufferObjectManager()); mSpriteNumber[11] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S1), getVertexBufferObjectManager()); mSpriteNumber[21] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S1), getVertexBufferObjectManager()); mSpriteNumber[31] = new Sprite(0, 0, GameScene.activity.getGameTextureRegion(GameTextureKeys.S1), getVertexBufferObjectManager()); mSpriteNumber[2] = new Sprite(2, 2, GameScene.activity.getGameTextureRegion(GameTextureKeys.S2), getVertexBufferObjectManager()); mSpriteNumber[12] = new Sprite(2, 2, GameScene.activity.getGameTextureRegion(GameTextureKeys.S2), getVertexBufferObjectManager()); mSpriteNumber[22] = new Sprite(2, 2, GameScene.activity.getGameTextureRegion(GameTextureKeys.S2), getVertexBufferObjectManager()); mSpriteNumber[32] = new Sprite(2, 2, GameScene.activity.getGameTextureRegion(GameTextureKeys.S2), getVertexBufferObjectManager()); mSpriteNumber[3] = new Sprite(3, 3, GameScene.activity.getGameTextureRegion(GameTextureKeys.S3), getVertexBufferObjectManager()); mSpriteNumber[13] = new Sprite(3, 3, GameScene.activity.getGameTextureRegion(GameTextureKeys.S3), getVertexBufferObjectManager()); mSpriteNumber[23] = new Sprite(3, 3, GameScene.activity.getGameTextureRegion(GameTextureKeys.S3), getVertexBufferObjectManager()); mSpriteNumber[33] = new Sprite(3, 3, GameScene.activity.getGameTextureRegion(GameTextureKeys.S3), getVertexBufferObjectManager()); mSpriteNumber[4] = new Sprite(4, 4, GameScene.activity.getGameTextureRegion(GameTextureKeys.S4), getVertexBufferObjectManager()); mSpriteNumber[14] = new Sprite(4, 4, GameScene.activity.getGameTextureRegion(GameTextureKeys.S4), getVertexBufferObjectManager()); mSpriteNumber[24] = new Sprite(4, 4, GameScene.activity.getGameTextureRegion(GameTextureKeys.S4), getVertexBufferObjectManager()); mSpriteNumber[34] = new Sprite(4, 4, GameScene.activity.getGameTextureRegion(GameTextureKeys.S4), getVertexBufferObjectManager()); mSpriteNumber[5] = new Sprite(5, 5, GameScene.activity.getGameTextureRegion(GameTextureKeys.S5), getVertexBufferObjectManager()); mSpriteNumber[15] = new Sprite(5, 5, GameScene.activity.getGameTextureRegion(GameTextureKeys.S5), getVertexBufferObjectManager()); mSpriteNumber[25] = new Sprite(5, 5, GameScene.activity.getGameTextureRegion(GameTextureKeys.S5), getVertexBufferObjectManager()); mSpriteNumber[35] = new Sprite(5, 5, GameScene.activity.getGameTextureRegion(GameTextureKeys.S5), getVertexBufferObjectManager()); mSpriteNumber[6] = new Sprite(6, 6, GameScene.activity.getGameTextureRegion(GameTextureKeys.S6), getVertexBufferObjectManager()); mSpriteNumber[16] = new Sprite(6, 6, GameScene.activity.getGameTextureRegion(GameTextureKeys.S6), getVertexBufferObjectManager()); mSpriteNumber[26] = new Sprite(6, 6, GameScene.activity.getGameTextureRegion(GameTextureKeys.S6), getVertexBufferObjectManager()); mSpriteNumber[36] = new Sprite(6, 6, GameScene.activity.getGameTextureRegion(GameTextureKeys.S6), getVertexBufferObjectManager()); mSpriteNumber[7] = new Sprite(7, 7, GameScene.activity.getGameTextureRegion(GameTextureKeys.S7), getVertexBufferObjectManager()); mSpriteNumber[17] = new Sprite(7, 7, GameScene.activity.getGameTextureRegion(GameTextureKeys.S7), getVertexBufferObjectManager()); mSpriteNumber[27] = new Sprite(7, 7, GameScene.activity.getGameTextureRegion(GameTextureKeys.S7), getVertexBufferObjectManager()); mSpriteNumber[37] = new Sprite(7, 7, GameScene.activity.getGameTextureRegion(GameTextureKeys.S7), getVertexBufferObjectManager()); mSpriteNumber[8] = new Sprite(8, 8, GameScene.activity.getGameTextureRegion(GameTextureKeys.S8), getVertexBufferObjectManager()); mSpriteNumber[18] = new Sprite(8, 8, GameScene.activity.getGameTextureRegion(GameTextureKeys.S8), getVertexBufferObjectManager()); mSpriteNumber[28] = new Sprite(8, 8, GameScene.activity.getGameTextureRegion(GameTextureKeys.S8), getVertexBufferObjectManager()); mSpriteNumber[38] = new Sprite(8, 8, GameScene.activity.getGameTextureRegion(GameTextureKeys.S8), getVertexBufferObjectManager()); mSpriteNumber[9] = new Sprite(9, 9, GameScene.activity.getGameTextureRegion(GameTextureKeys.S9), getVertexBufferObjectManager()); mSpriteNumber[19] = new Sprite(9, 9, GameScene.activity.getGameTextureRegion(GameTextureKeys.S9), getVertexBufferObjectManager()); mSpriteNumber[29] = new Sprite(9, 9, GameScene.activity.getGameTextureRegion(GameTextureKeys.S9), getVertexBufferObjectManager()); mSpriteNumber[39] = new Sprite(9, 9, GameScene.activity.getGameTextureRegion(GameTextureKeys.S9), getVertexBufferObjectManager()); for (int i = 0; i < 40; i++) { attachChild(mSpriteNumber[i]); mSpriteNumber[i].setVisible(false); } } public void setScore(int score) { totalScore = score; if (score < 700) accuracyScore = (int) (score * bulletHitCount * bulletHitCount * bulletHitCount / (bulletCount * bulletCount * bulletCount)); else accuracyScore = (int) (score * bulletHitCount * bulletHitCount / (bulletCount * bulletCount)); mScore[0] = totalScore % 10; totalScore = totalScore / 10; mScore[1] = totalScore % 10; totalScore = totalScore / 10; mScore[2] = totalScore % 10; mScore[3] = totalScore / 10; mAccuracyScore[0] = accuracyScore % 10; accuracyScore = accuracyScore / 10; mAccuracyScore[1] = accuracyScore % 10; accuracyScore = accuracyScore / 10; mAccuracyScore[2] = accuracyScore % 10; mAccuracyScore[3] = accuracyScore / 10; for (int i = 0; i < 40; i++) mSpriteNumber[i].setVisible(false); for (int i = 0; i < 4; i++) { mGetScore[i] = mScore[i]; mGetAccuracyScore[i] = mAccuracyScore[i]; mSpriteNumber[i * 10 + mScore[i]].setPosition(800 - 43 * (i + 1), 5); mSpriteNumber[i * 10 + mScore[i]].setVisible(true); } } public int getScore(int index) { if (index < 4) { totalScore = mGetScore[0] + mGetScore[1] * 10 + mGetScore[2] * 100 + mGetScore[3] * 1000 + mGetAccuracyScore[0] + mGetAccuracyScore[1] * 10 + mGetAccuracyScore[2] * 100 + mGetAccuracyScore[3] * 1000; mScore[0] = totalScore % 10; totalScore = totalScore / 10; mScore[1] = totalScore % 10; totalScore = totalScore / 10; mScore[2] = totalScore % 10; mScore[3] = totalScore / 10; } return mScore[index]; } public int getAccuracyScore(int index) { return mGetAccuracyScore[index]; } public void fireBonusParticle(int i, Fixture x1) { bonusParticleObject = BonusParticlePool.sharedObjectPool().obtainPoolItem(); bonusParticleList.add(bonusParticleObject); if (i == 1) bonusParticleObject.SetDoubleComboParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.8f, bonusParticleObject); else if (i == 2) bonusParticleObject.SetTripleComboParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.8f, bonusParticleObject); else bonusParticleObject.SetCriticalParticle(x1.getBody().getPosition().x * 32, x1.getBody().getPosition().y * 32 * 0.8f, bonusParticleObject); } public void fireComboParticle(int i) { bonusParticleObject = BonusParticlePool.sharedObjectPool().obtainPoolItem(); bonusParticleList.add(bonusParticleObject); if (i == 1) bonusParticleObject.SetTwoShotComboParticle(400, 200, bonusParticleObject); else if (i == 2) bonusParticleObject.SetThreeShotComboParticle(400, 200, bonusParticleObject); else bonusParticleObject.SetFourShotComboParticle(400, 200, bonusParticleObject); } public void setTopGameScene() { if (scoreMultipleFlag && freezeFlag) { mGameLayer.getFreezeSprite().setPosition(400 - mGameLayer.getFreezeSprite().getWidth(), 0); mGameLayer.getScoreMultipleSprite().setPosition(400, 0); mGameLayer.getFreezeSprite().setVisible(true); mGameLayer.getScoreMultipleSprite().setVisible(true); } else if (scoreMultipleFlag) { mGameLayer.getScoreMultipleSprite() .setPosition(400 - mGameLayer.getScoreMultipleSprite().getWidth() / 2, 0); mGameLayer.getScoreMultipleSprite().setVisible(true); } else if (freezeFlag) { mGameLayer.getFreezeSprite().setPosition(400 - mGameLayer.getScoreMultipleSprite().getWidth() / 2, 0); mGameLayer.getFreezeSprite().setVisible(true); } if (!scoreMultipleFlag) mGameLayer.getScoreMultipleSprite().setVisible(false); if (!freezeFlag) mGameLayer.getFreezeSprite().setVisible(false); } public boolean getMultiplier() { return scoreMultipleFlag; } public void setGameOver() { getAudioPlayer().play(SoundKeys.GAME_OVER); GameScene.gameScene.setIgnoreUpdate(true); mSceneManager.setCurrentScene(SceneType.SCORE); } public void setBulletHitCount() { bulletHitCount++; } public void setGameStartFlag() { gameStart = true; } public int countLives() { mLivesOne.setVisible(false); return ++livesCount; } }