#include "GPMKappaAttack.h"

#ifdef _DXLIB
#include "GStaticDataDX.h"
#else
#include "GStaticData.h"
#endif

using namespace GEnum;

GPMKappaAttack::GPMKappaAttack(){
}
GPMKappaAttack::~GPMKappaAttack(){
}

void GPMKappaAttack::setup( HPLShootingObject* lpObject ) {
	this->m_State = *lpObject->getState();
	this->m_nWeaponType = lpObject->getUsingWeaponTypeIndex();

	//bool bIsPlayer = lpObject->getObjectType() == ObjectType::PLAYER;
	this->m_bIsHeavyWeapon = false;//this->m_nWeaponType == GEnum::WeaponType::Evigen::MINIGUN;

	this->m_lpSequence = getStaticData()->m_CommonWork.getSequenceFromObject( lpObject );

	this->m_SequenceState = this->m_lpSequence->getState();

}


void GPMKappaAttack::attack( HPLShootingObject* lpObject, HPLShootingObject* lpTarget,
	HPLVector* lpCenter, HPLVector* lpVelocityAngle, 
	std::vector<bool>& vecCurrentKeyState, std::vector<bool>& vecPreviousKeyState )
{
	// セットアップ
	this->setup( lpObject );

	int nFaceDirection = ( lpObject->getFaceDirection() > 0 ? 1: -1 );

	// 
	/*if( this->m_State.isAttackGunState() ) {

		// do nothing

		if( this->m_SequenceState.isFinishAnimation ) {
			
			// ステート巻き戻し
			getStaticData()->m_CommonWork.rollBack( lpObject );
		}
	} else */if( this->m_State.isAttackState() ) {

		// 進行方向へ移動する
		//if( this->m_State.getState() == StateType::ATTACK ) {
			// 横
			if( this->m_lpSequence->getFrameIndex() == 1 && 
				this->m_lpSequence->getStepCounter() == 0 )
			{
				{
				// 攻撃発生
					HPLVector vecShotCenter = lpObject->getCenter();
					vecShotCenter.add( nFaceDirection * 0, 0 );
					GShot* lpShot = getStaticData()->m_ObjectManager.m_ShotManager.create(
						ShotType::SAUCER, vecShotCenter, lpObject->getID(), nFaceDirection );
					lpShot->setVelocityAngle( nFaceDirection * SAUCER_VELOCITY_X , 0 );
				}

				if( this->m_State.isAttackGunState() ) {
					// ガンステート
					// 斜め上にも発射
					HPLVector vecShotCenter = lpObject->getCenter();
					vecShotCenter.add( nFaceDirection * 0, 0 );
					GShot* lpShot = getStaticData()->m_ObjectManager.m_ShotManager.create(
						ShotType::SAUCER, vecShotCenter, lpObject->getID(), nFaceDirection );
					lpShot->setVelocityAngle( nFaceDirection * SAUCER_VELOCITY_X , -SAUCER_VELOCITY_Y );
				}
			}
		//}
			/*else if( this->m_State.getState() == StateType::ATTACK_2 ) {
			// 上
			if( this->m_Sequence->getFrameIndex() == 0 && 
				this->m_Sequence->getStepCounter() == 0 )
			{
			}
		}*/

		if( this->m_SequenceState.isFinishAnimation ) {
			// ステート巻き戻し
			getStaticData()->m_CommonWork.rollBack( lpObject );
		}
	} else {
		// 通常状態

		if( lpObject->getState()->isReadyToAttackState() ) {
			// 攻撃可能な状態

			if( vecCurrentKeyState[ GEnum::KeyMap::A ] && vecPreviousKeyState[ GEnum::KeyMap::A ] == false ) {
				// Z->？
				getStaticData()->m_CommonWork.changeState( lpObject, StateType::ATTACK );

			} else if( vecCurrentKeyState[ GEnum::KeyMap::B ] && vecPreviousKeyState[ GEnum::KeyMap::B ] == false ) {
				// X->？
				getStaticData()->m_CommonWork.changeState( lpObject, StateType::ATTACK_2 );

			} else if( vecCurrentKeyState[ GEnum::KeyMap::C ] && vecPreviousKeyState[ GEnum::KeyMap::C ] == false ) {
				// C->皿
				getStaticData()->m_CommonWork.changeState( lpObject, StateType::ATTACK_GUN );
			}
		}
	}
}
