Example #1
0
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);
		}
	}
}
Example #2
0
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);
}
Example #3
0
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);
	}
}
Example #4
0
void aiBehaviorMoveToBase::Exit( Ogre::Any& owner )
{
	Unit* pUnit = Ogre::any_cast<Unit*>(owner);
	pUnit->GetAnim()->StopAnimation();
}
Example #5
0
void aiBehaviorAttackTarget::Exit( Ogre::Any& owner )
{
	Unit* pUnit = Ogre::any_cast<Unit*>(owner);
	pUnit->GetAnim()->StopAnimation();
}
Example #6
0
void aiBehaviorIdle::Execute( Ogre::Any& owner )
{
	Unit* pUnit = Ogre::any_cast<Unit*>(owner);
	pUnit->GetAnim()->PlayAnimation(eAnimation_Idle, true);
}