package com.niw.kuttypanda.scene;
import java.util.Random;
import org.andengine.engine.handler.IUpdateHandler;
import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.entity.scene.IOnSceneTouchListener;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.text.Text;
import org.andengine.input.touch.TouchEvent;
import android.opengl.GLES20;
import com.niw.kuttypanda.GameDao;
import com.niw.kuttypanda.base.BaseScene;
import com.niw.kuttypanda.base.DebugLog;
import com.niw.kuttypanda.common.Constants;
import com.niw.kuttypanda.manager.SceneManager;
import com.niw.kuttypanda.manager.SceneManager.SceneType;
public class GameScene extends BaseScene {
@Override
public void createScene() {
rm.mSwooshing.play();
rm.isDie = false;
Sprite backGroundSprite = new Sprite(0, 0, Constants.width, Constants.height, rm.backgroundTiledTextureRegion, vbom);
attachChild(backGroundSprite);
setTouchAreaBindingOnActionDownEnabled(true);
setOnSceneTouchListener(new IOnSceneTouchListener() {
public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
// animatedSprite_panda.animate(new long[]{200, 200, 200}, 1, 3, true);
rm.panda_down = 2f;
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() - rm.panda_up);
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() - rm.panda_up);
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() - rm.panda_up);
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() - rm.panda_up);
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() - rm.panda_up);
rm.mWing.play();
return true;
}
});
rm.animatedSprite_panda = new AnimatedSprite(Constants.width / rm.panda_position, Constants.height / 2, rm.tiledTextureRegion_panda, vbom) {
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
DebugLog.logd("click");
}
return true;
}
};
rm.animatedSprite_panda.animate(150);
// long ani = 200;
// this.animatedSprite_panda.animate(new long[]{ani, ani, ani, ani, ani}, 0, 4, true);
rm.animatedSprite_panda.setScale(rm.panda_scale);
attachChild(rm.animatedSprite_panda);
registerTouchArea(rm.animatedSprite_panda);
rm.animatedSprite_panda.setZIndex(1);
rm.mScoreText = new Text(5, Constants.height / 20 * 19, rm.mFont, "Score: 0", "Score: XXXX".length(), vbom);
rm.mScoreText.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
rm.mScoreText.setAlpha(0.5f);
attachChild(rm.mScoreText);
rm.mScoreText.setZIndex(1);
registerUpdateHandler(new IUpdateHandler() {
@Override
public void reset() {
}
@Override
public void onUpdate(float pSecondsElapsed) {
try {
Thread.sleep(rm.speed);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(!rm.isDie){
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() + rm.panda_down);
rm.panda_down = rm.panda_down + 0.05f;
}
if (rm.animatedSprite_panda.getY() >= Constants.height -(rm.panda_height/7 * rm.panda_scale / 2)) {
deathEvent();
}
}
});
rm.sprite_pipe1 = new Sprite(Constants.width, -rm.pipe_height / 2, rm.textureRegion_pipe1, vbom);
attachChild(rm.sprite_pipe1);
rm.sprite_pipe1.setVisible(false);
rm.sprite_pipe2 = new Sprite(Constants.width, Constants.height - rm.pipe_height / 2, rm.textureRegion_pipe2, vbom);
attachChild(rm.sprite_pipe2);
rm.sprite_pipe2.setVisible(false);
rm.sprite_pipe1.setZIndex(0);
rm.sprite_pipe2.setZIndex(0);
rm.sprite_score_board = new Sprite(Constants.width / 8, Constants.height / 3, rm.textureRegion_score_board, vbom);
attachChild(rm.sprite_score_board);
rm.sprite_score_board.setVisible(false);
rm.mScoreText2 = new Text(Constants.width / 2 + 30, Constants.height / 3 + 50, rm.mFont, "0", "XXXX".length(), vbom);
rm.mScoreText2.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
rm.mScoreText2.setAlpha(0.5f);
attachChild(rm.mScoreText2);
rm.mScoreText2.setVisible(false);
rm.mScoreTextBest = new Text(Constants.width / 2 + 30, Constants.height / 3 + 105, rm.mFont, "0", "XXXX".length(), vbom);
rm.mScoreTextBest.setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
rm.mScoreTextBest.setAlpha(0.5f);
attachChild(rm.mScoreTextBest);
rm.mScoreTextBest.setVisible(false);
rm.sprite_game_over = new Sprite(Constants.width / 3, Constants.height / 5, rm.textureRegion_game_over, vbom);
rm.sprite_game_over.setScale(2);
attachChild(rm.sprite_game_over);
rm.sprite_game_over.setVisible(false);
registerUpdateHandler(new TimerHandler(2f,
new ITimerCallback() {
public void onTimePassed(final TimerHandler pTimerHandler) {
unregisterUpdateHandler(pTimerHandler);
loadSpritePipe();
}
}));
}
private void loadSpritePipe() {
DebugLog.logd("PLAY_SCENE: loadSpritePipe");
rm.sprite_pipe1.setVisible(true);
rm.sprite_pipe2.setVisible(true);
rm.point = 0;
rm.heightR = rm.pipe_height / 2 ;
registerUpdateHandler(new IUpdateHandler() {
@Override
public void reset() {
}
boolean chuyen = false;
@Override
public void onUpdate(float pSecondsElapsed) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
sortChildren();
if(!rm.isDie){
if (!chuyen) {
rm.heightR = getRandom(0, rm.pipe_height);
rm.sprite_pipe1.setPosition(Constants.width, -rm.heightR);
rm.sprite_pipe2.setPosition(Constants.width, -rm.heightR + Constants.height);
if (rm.sprite_pipe1.getX() > (Constants.width / 5 * 4)) chuyen = true;
} else {
if(GameDao.getSettings().equals(Constants.hard)){
hardModeEvent();
}else{
rm.sprite_pipe1.setPosition(rm.sprite_pipe1.getX() -rm.pipe_transition, rm.sprite_pipe1.getY());
rm.sprite_pipe2.setPosition(rm.sprite_pipe2.getX() - rm.pipe_transition, rm.sprite_pipe2.getY());
}
if (rm.sprite_pipe1.getX() < -rm.pipe_width || rm.sprite_pipe2.getX() < -rm.pipe_width) {
chuyen = false;
}
}
pointUpEvent();
}
collisionEvent();
}
});
}
private void hardModeEvent() {
if (rm.heightR <= rm.pipe_height / 2) {
if (rm.sprite_pipe2.getY() >= Constants.height) {
rm.cham = false;
}
if (rm.sprite_pipe2.getY() <= (rm.pipe_height - rm.heightR)) {
rm.cham = true;
}
if (!rm.cham) {
rm.sprite_pipe1.setPosition(rm.sprite_pipe1.getX() - rm.pipe_transition, rm.sprite_pipe1.getY() - rm.pipe_move);
rm.sprite_pipe2.setPosition(rm.sprite_pipe2.getX() - rm.pipe_transition, rm.sprite_pipe2.getY() - rm.pipe_move);
} else {
rm.sprite_pipe1.setPosition(rm.sprite_pipe1.getX() - rm.pipe_transition, rm.sprite_pipe1.getY() +rm. pipe_move );
rm.sprite_pipe2.setPosition(rm.sprite_pipe2.getX() - rm.pipe_transition, rm.sprite_pipe2.getY() + rm.pipe_move);
}
} else {
if (rm.sprite_pipe1.getY() >= (-rm.heightR + Constants.height - rm.pipe_height)) {
rm.cham = true;
}
if (rm.sprite_pipe1.getY() <= -rm.pipe_height) {
rm.cham = false;
}
if (!rm.cham) {
rm.sprite_pipe1.setPosition(rm.sprite_pipe1.getX()- rm.pipe_transition, rm.sprite_pipe1.getY() + rm.pipe_move);
rm.sprite_pipe2.setPosition(rm.sprite_pipe2.getX() - rm.pipe_transition, rm.sprite_pipe2.getY() + rm.pipe_move);
} else {
rm.sprite_pipe1.setPosition(rm.sprite_pipe1.getX() - rm.pipe_transition, rm.sprite_pipe1.getY() - rm.pipe_move);
rm.sprite_pipe2.setPosition(rm.sprite_pipe2.getX() - rm.pipe_transition, rm.sprite_pipe2.getY() - rm.pipe_move);
}
}
}
private int getRandom(int min, int max) {
return new Random().nextInt(max - min + 1) + min;
}
private void pointUpEvent() {
if (rm.sprite_pipe1.getX() >= ((Constants.width / rm.panda_position) - (rm.panda_width * rm.panda_scale))
&& rm.sprite_pipe1.getX() <= ((Constants.width / rm.panda_position) + rm.pipe_move + 1 - (rm.panda_width * rm.panda_scale))) {
if (rm.animatedSprite_panda.getY() <= -(rm.panda_height/7 * rm.panda_scale)) {
rm.mHit.play();
this.deathEvent();
} else {
if(!rm.isDie){
rm.point++;
rm.mPoint.play();
rm.mScoreText.setText("Score: " + rm.point);
rm.mScoreText2.setText(""+rm.point);
}
}
}
}
private void collisionEvent() {
if ((rm.animatedSprite_panda.collidesWith(rm.sprite_pipe1)) ||
(rm.animatedSprite_panda.collidesWith(rm.sprite_pipe2))) {
if(!rm.isDie){
rm.mHit.play();
this.deathEvent();
}
}
}
private void deathEvent(){
rm.isDie = true;
rm.animatedSprite_panda.setRotation(180);
sortChildren();
registerUpdateHandler(new IUpdateHandler() {
@Override
public void reset() {
}
@Override
public void onUpdate(float pSecondsElapsed) {
try {
Thread.sleep(rm.speed);
} catch (InterruptedException e) {
e.printStackTrace();
}
rm.animatedSprite_panda.setPosition(rm.animatedSprite_panda.getX(), rm.animatedSprite_panda.getY() + 30);
if (rm.animatedSprite_panda.getY() >= Constants.height -(rm.panda_width * rm.panda_scale / 2)) {
setIgnoreUpdate(true);
rm.mDie.play();
showScore();
}
}
});
}
private void showScore(){
if(GameDao.getSettings().equals(Constants.easy)){
if(GameDao.getBestScoreEasy() < rm.point){
GameDao.setBestScoreEasy(rm.point);
}
rm.mScoreTextBest.setText("" + GameDao.getBestScoreEasy());
}else{
if(GameDao.getBestScoreHard() < rm.point){
GameDao.setBestScoreHard(rm.point);
}
rm.mScoreTextBest.setText("" + GameDao.getBestScoreHard());
}
if(rm.point < 10){
rm.mScoreText2.setPosition(Constants.width / 2 + 30, Constants.height / 3 + 50);
}else if(rm.point < 100){
rm.mScoreText2.setPosition(Constants.width / 2 + 15, Constants.height / 3 + 50);
}else if(rm.point < 1000){
rm.mScoreText2.setPosition(Constants.width / 2, Constants.height / 3 + 50);
}
if(GameDao.getBestScoreHard() < 10){
rm.mScoreTextBest.setPosition(Constants.width / 2 + 30, Constants.height / 3 + 105);
}else if(GameDao.getBestScoreHard() < 100){
rm.mScoreTextBest.setPosition(Constants.width / 2 + 15, Constants.height / 3 + 105);
}else if(GameDao.getBestScoreHard() < 1000){
rm.mScoreTextBest.setPosition(Constants.width / 2, Constants.height / 3 +105);
}
rm.sprite_score_board.setVisible(true);
rm.sprite_game_over.setVisible(true);
rm.mScoreText.setVisible(false);
rm.mScoreText2.setVisible(true);
rm.mScoreTextBest.setVisible(true);
rm.sprite_startButton = new Sprite(Constants.width / 3, Constants.height / 5 * 3, rm.textureRegion_startButton, vbom) {
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
detachSelf();
SceneManager.getInstance().loadGameScene(engine);
rm.isDie = false;
}
return true;
}
};
attachChild(rm.sprite_startButton);
registerTouchArea(rm.sprite_startButton);
rm.sprite_settingsButton = new Sprite(Constants.width / 7, Constants.height / 5 * 4, rm.textureRegion_settingsButton, vbom) {
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
SceneManager.getInstance().loadSettingsScene(engine);
}
return true;
}
};
attachChild(rm.sprite_settingsButton);
registerTouchArea(rm.sprite_settingsButton);
rm.sprite_shareButton = new Sprite(Constants.width / 3 * 2, Constants.height / 5 * 4, rm.textureRegion_shareButton, vbom) {
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
//TODO
}
return true;
}
};
attachChild(rm.sprite_shareButton);
registerTouchArea(rm.sprite_shareButton);
setOnSceneTouchListener(null);
}
@Override
public void onBackKeyPressed() {
System.exit(0);
}
@Override
public SceneType getSceneType() {
return SceneType.SCENE_MENU;
}
@Override
public void disposeScene() {
}
}