package com.andengine.blackdog.chapter2;

import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.sprite.Sprite;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;
import org.andengine.ui.activity.SimpleBaseGameActivity;

public class TouchImageLoadCon extends SimpleBaseGameActivity {
	// 카메라 필드를 생성합니다.
	// 가로와 세로 2개의 카메라 변수를 선언했습니다.
	private Camera camera;
	Scene scene;

	private static final int CAMERA_WIDTH = 480;
	private static final int CAMERA_HEIGHT = 800;

	private BitmapTextureAtlas mBgTexture;
	private ITextureRegion mImgObj;
	private ITextureRegion mImgObjBehind;

	Sprite appleSprite;
	Sprite backSprite;

	// 카드를 연속으로 뒤집기 위해 bool값 선언
	// 카드는 6장. 뒤집히지 않으면 false
	boolean bOneFlip = false;

	// onCreateEngineOptions() 안에서는 Camera object를 초기화하고, EngineOptions을 생성 합니다.
	// 소스를 보시면 Camera와 EngineOptions을 생성했는데,
	// full screen을 가능하게 했고, landscape orientation을 고정 했습니다.
	// 그리고, FillResolutionPolicy를 정의 했습니다.
	// 엔진은 전체로 해상도를 가득 채울텐데, 가끔 화면에서 어긋날 수 있으므로 주의해야 합니다.
	@Override
	public EngineOptions onCreateEngineOptions() {
		camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		EngineOptions engineOptions = new EngineOptions(true,
				ScreenOrientation.PORTRAIT_FIXED, new FillResolutionPolicy(),
				camera);
		return engineOptions;
	}

	@Override
	protected void onCreateResources() {
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

		// 뒷면 카드
		this.mBgTexture = new BitmapTextureAtlas(this.getTextureManager(),
				CAMERA_WIDTH, CAMERA_HEIGHT);
		this.mImgObj = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
				this.mBgTexture, this, "back.png", 0, 0);

		// 사과 카드
		// 판을 하나만 사용하기 위해서 이미지를 판 위에 얹을 때 좌표를 다르게 놓음
		this.mImgObjBehind = BitmapTextureAtlasTextureRegionFactory
				.createFromAsset(this.mBgTexture, this, "apple.png", 165, 0);
		this.mBgTexture.load();

	}

	// onCreateScene()에서는 화면에 관련된 scene object를 초기화 합니다.
	// Scene이란 스프라이트와 같은 새로운 객체를 덧붙일수 있는 객체(Entity)입니다.
	// 배경 화면을 검정(0,0,0)으로 셋팅 하였습니다.
	@Override
	protected Scene onCreateScene() {
		scene = new Scene();
		scene.setBackground(new Background(0f, 0f, 0f));
		final VertexBufferObjectManager vertexBufferObjectManager = this
				.getVertexBufferObjectManager();

		appleSprite = new Sprite(10, 130, this.mImgObjBehind,
				vertexBufferObjectManager);

		backSprite = new Sprite(10, 130, this.mImgObj,
				vertexBufferObjectManager) {
			@Override
			public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
					final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
				if (pSceneTouchEvent.isActionDown()) {

					//뒷면인경우, 뒷면상태에 터치하면 뒷면 카드를 없애고 사과카드를 노출한다.
					if (bOneFlip == false) {
						scene.detachChild(backSprite);
						scene.attachChild(appleSprite);
						bOneFlip=true; //boolean 상태를 뒤집힌 상태로 변경
					}
					//이미 뒤집힌 경우는 반대로 정의한다.
					else{
						scene.detachChild(appleSprite);
						scene.attachChild(backSprite);
						bOneFlip=false;
					}
					return true;
				}
				return false;
			}
		};
		scene.attachChild(backSprite);
		scene.registerTouchArea(backSprite);

		return scene;
	}
}
