package com.andengine.blackdog.chapter4;

import org.andengine.entity.modifier.RotationModifier;
import org.andengine.opengl.texture.region.ITiledTextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;

public class Player extends GameObject {
	private static final float UP_VELOCITY = 300.0f;
	private static final float DOWN_VELOCITY = 400.0f;
	private static final float JUMP_HEIGHT = 150.0f; // 이 숫자가 작을 수록 더 높이 뜁니다

	// jump height가 70까지 가면 오류가 나는듯 합니다.

	public Player(final float pX, final float pY,
			final ITiledTextureRegion pTiledTextureRegion,
			final VertexBufferObjectManager pVertexBufferObjectManager) {
		super(pX, pY, pTiledTextureRegion, pVertexBufferObjectManager);
	}

	@Override
	public void move() {
		Jumping();
	}

	private void Jumping() {
		if ((CharacterJump.bUp == false || CharacterJump.bDown == false)
				&& (CharacterJump.actionCount == 0)) {

			// // 점프할때 회전합니다.
			// // 앞의 duration 값이 작을 수록 빨리 회전 합니다.
			// // -360은 왼쪽으로 회전, +360은 오른쪽으로 회전합니다
			this.registerEntityModifier(new RotationModifier(1, 0, -360));

			// 0이면 최상단 까지 갔다가 내려옴
			// 2. 점점 떨어지게 함
			if (this.mY < JUMP_HEIGHT) {
				this.mPhysicsHandler.setVelocityY(DOWN_VELOCITY);
				CharacterJump.bDown = true;
				if (this.mY < 0) {
					this.mY = 0;
				}

			}
			// 1. 점점 올라가게함
			else if (this.mY + this.getHeight() > JUMP_HEIGHT) {
				this.mPhysicsHandler.setVelocityY(-UP_VELOCITY);
				CharacterJump.bUp = true;
				if (this.mY > CharacterJump.CAMERA_HEIGHT) {
					this.mY = CharacterJump.CAMERA_HEIGHT;
				}
			}

		}

		// 3. 점프의 완료
		if (CharacterJump.bUp == true && CharacterJump.bDown == true
				&& (CharacterJump.actionCount == 0)) {
			if (this.mY + this.getHeight() > CharacterJump.CAMERA_HEIGHT) {

				this.mPhysicsHandler.setVelocityY(0);

				CharacterJump.bUp = false;
				CharacterJump.bDown = false;
				CharacterJump.actionCount++;

				// 점프가 완료된후 점핑값을 false로 변경
				CharacterJump.jumping = false;
			}

		}
	}
}
