com.thirdgame.shootkillninjabomb.GameScene.java Source code

Java tutorial

Introduction

Here is the source code for com.thirdgame.shootkillninjabomb.GameScene.java

Source

/*
 ********************************************************************************
 * 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;
    }

}