void aiBehaviorAttackTarget::Update( Ogre::Any& owner, float dt ) { Unit* pUnit = Ogre::any_cast<Unit*>(owner); Unit* target = pUnit->GetAttackTarget(); AnimatedComponent* anim = pUnit->GetAnim(); if (target) { //³¯ÏòÄ¿±ê POS targetPos = target->GetPosition(); targetPos.y = pUnit->GetPosition().y; pUnit->GetSceneNode()->lookAt(targetPos, Ogre::Node::TS_WORLD, FLOAT3::UNIT_Z); float fLastAttkTime = pUnit->GetLastAttackPastTime(); fLastAttkTime += dt; float cooldown = pUnit->GetAttackInterval(); pUnit->SetLastAttackPastTime(fLastAttkTime); //¹¥»÷ÀäÈ´ if (fLastAttkTime >= cooldown) { anim->PlayAnimation(eAnimation_Attack, false); target->_OnAttacked(pUnit); pUnit->SetLastAttackPastTime(0); } else if(anim->IsAnimationOver()) { anim->PlayAnimation(eAnimation_Idle, true); } } }
void aiBehaviorGathering::Execute( Ogre::Any& owner ) { Unit* pUnit = Ogre::any_cast<Unit*>(owner); HarvestComponent* gather = pUnit->GetGather(); gather->SetGatherTime(0); gather->SetCurStage(HarvestComponent::eHarvestStage_Gather); pUnit->GetAnim()->PlayAnimation(eAnimation_Gather, true); }
void aiBehaviorMoveToBase::Execute( Ogre::Any& owner ) { Unit* pUnit = Ogre::any_cast<Unit*>(owner); AiComponent* pAi = pUnit->GetAi(); PathComponent* path = pUnit->GetPath(); POS target = pAi->GetFaction()->GetBase()->GetPosition(); if(path->FindPath(target, true)) { path->SetDestPos(target); bool bSucceed = path->FindPath(target, false); assert(bSucceed); pUnit->GetAnim()->PlayAnimation(eAnimation_Move, true); } }
void aiBehaviorMoveToBase::Exit( Ogre::Any& owner ) { Unit* pUnit = Ogre::any_cast<Unit*>(owner); pUnit->GetAnim()->StopAnimation(); }
void aiBehaviorAttackTarget::Exit( Ogre::Any& owner ) { Unit* pUnit = Ogre::any_cast<Unit*>(owner); pUnit->GetAnim()->StopAnimation(); }
void aiBehaviorIdle::Execute( Ogre::Any& owner ) { Unit* pUnit = Ogre::any_cast<Unit*>(owner); pUnit->GetAnim()->PlayAnimation(eAnimation_Idle, true); }