/* ================================================ */ 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; }
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; } }
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; }