/* ================================================ */
bool CommandTable::CheckCommand( const uint32_t &watchPad )
{
	bool isCommandFinish = false;

	if( IsStepButtonPress(m_commandStep, watchPad) ){
		//! 入力待機時間をリセットして次ステップへ
		IncStep();
		DEBUG_PRINT("step : %d \n", m_commandStep);
		m_waitTime = 0;
		if(m_table[m_commandStep][0] == INVALID_VALUE){
			//! コマンド入力成功
			Reset();
			DEBUG_PRINT("コマンド入力成功!!\n");
			isCommandFinish = true;
		}
	}
	else{
		++m_waitTime;
		if(m_waitTime >= m_waitTimeMax){
			//! 残念
			Reset();
		}
	}

	//! 次のフレームのため状態保持
	m_prePadState = GetJoypadInputState( watchPad );

	return isCommandFinish;
}
Beispiel #2
0
void ChsBullet::Update(irr::f32 fTick)
{

	irr::scene::ISceneManager *pSmgr = CSAApp::GetPtr()->m_pSmgr;

	switch(GetStatus())
	{
	case ChsBullet::FSM_READY:
		{
			SetStatus(ChsBullet::FSM_MOVE);
		}
		break;
	case ChsBullet::FSM_MOVE:
		{
			if(m_pAnim->getRigidBody()->getHitFraction() < 1.0f)
			{
				Signal("hit",NULL);				
			}
		}
		break;
	case ChsBullet::FSM_HIT:
		if(GetStep() == 0)
		{
			m_pAnim->RemoveFromWorld();
			irr::scene::ISceneNodeAnimator *pAniDel = pSmgr->createDeleteAnimator(0);
			m_pNode->addAnimator(pAniDel);
			pAniDel->drop();
			IncStep();			
		}		
		else
		{
			SetStatus(ChsBullet::FSM_DIE);
		}
		break;
	case ChsBullet::FSM_DIE:
		
		break;	
	}

}
Beispiel #3
0
void CAIPlayer::Update(irr::f32 fDelta)
{
	irr::scene::ISceneManager *pSmgr = CSAApp::GetPtr()->m_pSmgr;
	irr::IrrlichtDevice *pDevice = CSAApp::GetPtr()->m_pDevice;
	irr::scene::CBulletAnimatorManager* pBulletPhysicsFactory = CSAApp::GetPtr()->m_pBulletPhysicsFactory; 
	irr::scene::CBulletWorldAnimator* pWorldAnimator = CSAApp::GetPtr()->m_pWorldAnimator;

	switch(GetStatus())
	{
	case FSM_READY:
		{
			//시작위치 지정
			m_pNode->setVisible(true);			
			irr::core::vector3df pos_Spwan = pSmgr->getSceneNodeFromName("genpos/zombie",m_pTrigerNode)->getAbsolutePosition();
			m_pChracterAnimator->setPosition(pos_Spwan);
			m_pChracterAnimator->zeroForces();
			//캐릭터 중심점을 보정해준다.
			

			SetStatus(FSM_STAND);
		}
		break;
	case FSM_STAND:		
		if(GetStep() == 0)
		{
			m_pNode->changeAction("stand");
			IncStep();
			m_accTick = 0; //누적시간 리셋
		}
		else if(GetStep() == 1)
		{		
			if(m_accTick >= 2.0f) //2초경과
			{
				SetStatus(FSM_WALK);
				
				m_vTargetDir.X = (rand() % 1000) / 1000.f - 0.5f;
				m_vTargetDir.Z = (rand() % 1000) / 1000.f - 0.5f;
				m_vTargetDir.Y = 0;

				m_vTargetDir.normalize();

			}
		}
		break;
	case FSM_WALK:
		if(GetStep() == 0)
		{
			m_pNode->changeAction("walk");
			IncStep();

			m_accTick = 0; //누적시간 리셋
		}
		else if(GetStep() == 1)
		{
			if(m_accTick >= 3.0f) //3초경과
			{
				SetStatus(FSM_STAND);
			}
			else
			{
				btVector3 WalkVelocity(0,0,0);
				btScalar speed = 0;			
				speed = btScalar(1.1) * 180.0f * fDelta;

				btVector3 btDir;
				Irrlicht2Bullet(m_vTargetDir,btDir);

				WalkVelocity = btDir * speed;
				m_pChracterAnimator->controlStep_Walker(WalkVelocity);
			}			
		}
		break;
	case FSM_KICK:
		break;
	case FSM_ATTACKED:
		if(GetStep() == 0)
		{
			m_pNode->changeAction("damage",false);			

			IncStep();
		}
		else if(GetStep() == 1)
		{	
			if(m_pNode->IsActionFinished()) 
			{	
				SetStatus(FSM_STAND);
			}
		}
		break;	
	}

	//누적 타이머
	m_accTick += fDelta;
}