예제 #1
0
bool Animator::SwitchAnimation(std::string const& name)
{
	auto animation = FindAnimation(name);
	if (animation != nullptr)
	{
		SwitchAnimation(animation);
		return true;
	}

	return false;
}
예제 #2
0
Animator::Animation& Animator::CreateAnimation(std::string const& name, std::string const& textureName, sf::Time const& duration, bool loop)
{
	m_Animations.push_back(Animator::Animation(name, textureName, duration, loop));

	//If we don't have any other animations, use that as current animation
	if (m_CurrentAnimation == nullptr)
		SwitchAnimation(&m_Animations.back());

	return m_Animations.back();


}
예제 #3
0
/*****************************************************************
* DeActivate()			DeActives the skeleton without delting
*
* Ins:					None
*
* Outs:					None
*
* Returns:				void
*
* Mod. Date:		    08/20/2015
* Mod. Initials:	    NS
*****************************************************************/
void CSkeleton::DeActivate()
{
	

	m_vtPointLights[0].m_fRadius = 0;

	for (int i = 0; i < eParticleCount; i++)
	{
		m_pParticleManager->GetEmitter(i)->Stop();
	}
	//m_cShieldRender[0]->GetRender() = false;
	//m_cShieldRender[1]->GetRender() = false;

	int chance = rand() % 2;
	if (chance == 0)
		m_cpTheLoot->Activate();
	else
		m_cpThePowder->Activate();

	//m_cpObjectManager->RemoveObject(this, CObjectManager::Dynamic);

	// Exit the current State
	//m_vStates[m_ipCurrentState]->Exit(this);
	ExitSubState();

	m_bHit = false;
	// Mark as not active
	m_bIsActive = false;

	// Mark as not Invinsable
	m_bInvincible = false;
	m_cpSword->Deactivate();
	m_cpRenderMesh->GetRender() = false;

	m_cDropShadow->GetRender() = false;
	
	m_cpSkeletonController->KillSkeleton();

	SwitchAnimation(eBlockWalkAnim);
	// Remove the mesh
	//GRAPHICS->RemoveRenderMesh(m_cpRenderMesh);


	m_vPath.clear();


	// Build a message
	CRemoveObjectMessage* removeObj = new CRemoveObjectMessage(this, CObjectManager::AI);

	// Send the message
	removeObj->Send();
}
예제 #4
0
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Summary: Updates the medium enemy!
Parameters:
[in] _elapsedTime - the time passed since the last frame.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
bool CMediumEnemy::Update( float _elapsedTime )
{
#if _DEBUG
	if(this->GetIsPaused())
	{
		this->GetAnimationManager()->Update(_elapsedTime, &this->GetRenderNode());
		return true;
	}
#endif

	if(m_SpawnTimer > 0.0f)
		m_SpawnTimer -= _elapsedTime;

	Vec4f white = { 1.0f, 1.0f, 1.0f, 1.0f };
	Vec4f black = { 0.2f, 0.2f, 0.2f, 1.0f };
	// If they are preparing an attack.
	if( this->GetState() == Enemy_Charging )
	{
		if(!m_PowerUp && m_PowerUpTimer <= 0.0f)
		{
			CMessageSystem::GetInstance()->SendMessage(new CCreateVFXMessage(EMITTER_POWERUP,this,0.0f,0.0f,0.0f));
			AudioSystemWwise::GetInstance()->PostEvent(AK::EVENTS::PLAY_SFX_MEDIUM_MORTAR_CHARGE);
//			AudioSystemWwise::GetInstance()->PostEvent(AK::EVENTS::PLAY_MEDIUM_MORTAR_CHARGE);
			m_PowerUpTimer = 6.0f;
			m_PowerUp = true;
		}


		static float tell_blink = 0.2f;
		tell_blink += _elapsedTime;
		if(tell_blink >= 0.2f)
		{
			if(this->GetRenderNode().GetColor()[0] == white[0])
				this->GetRenderNode().SetColor(black);
			else
				this->GetRenderNode().SetColor(white);

			tell_blink = 0.0f;
		}
	}
	else if(this->GetRenderNode().GetColor()[0] != white[0])
		this->GetRenderNode().SetColor(white);

	if(m_PowerUp)
	{
		m_PowerUpTimer -= _elapsedTime;

		if(m_PowerUpTimer <= 0.0f)
		{
			m_PowerUp = false;
			//AudioSystemWwise::GetInstance()->PostEvent(AK::EVENTS::);
		}
	}

	// If they are dying.
	if( this->GetState() == Enemy_Dying )
	{
		// Move the enemy into the planet, so it doesn't
		// pop out of the game.
		if(!GetLaserDeath())
		{
			Vec3f nPos, move;
			glsCopyVector3(move,GetRenderNode().GetUpVector());
			glsScaleVector3(move, 10.5f * _elapsedTime);
			glsAddVectors3(nPos,GetRenderNode().GetPosition(),move);
			GetRenderNode().SetPosition( nPos );
		
			// If death timer has just started:
			if( m_DeathTimer == MEDIUM_ENEMY_TIMER_DEATH )
			{
				CMessageSystem::GetInstance()->SendMessageW(new CCreateVFXMessage(EMITTER_EXPLOSION,this,0.0f,0.0f,0.0f));
			}

			// Decrement the death timer.dd
			m_DeathTimer -= _elapsedTime;

			// Check if the timer is finished.
			// If so... KILL ZE ENEMY!
			if(m_DeathTimer <= 0.0f)
				Kill();

			if(m_HurtTimer > 0.0f)
			{
				this->GetRenderNode().SetColor(white);
				m_HurtTimer = 0.0f;
			}
		}
		else
		{
			GetRenderNode().SetDissolveFactor( GetRenderNode().GetDissolveFactor() - _elapsedTime );
			if(GetRenderNode().GetDissolveFactor() <= 0.0f)
			{
				this->SetIsActive(false);
				this->SetIsAlive(false);
				SetLaserDeath(false);
				//Init();
			}
		}

		return true;
	}

	// Update laser invulnerablity timer
	if( m_LaserTimer > 0.0f )
	{
		m_LaserTimer -= _elapsedTime;
		if( m_LaserTimer < 0.0f )
			m_LaserTimer = 0.0f;
	}

	Vec4f red = {1.0f, 0.0f, 0.0f, 1.0f};
	if( m_HurtTimer > 0.0f )
	{
		GetAnimationManager()->SwitchAnimation(CAssetManager::GetInstance()->GetAnimation(ET_MEDIUMENEMY, MEDIUM_HURT), 0.4f);
		if(this->GetRenderNode().GetColor()[1] == white[1])
			this->GetRenderNode().SetColor(red);

		m_HurtTimer -= _elapsedTime;
		if( m_HurtTimer <= 0.0f )
			this->GetRenderNode().SetColor(white);
	}


	// Orient the movement vector
	glsCopyVector3(m_MoveUp, this->GetRenderNode().GetUpVector());
	glsCrossProduct3( m_MoveForward, m_MoveRight, m_MoveUp );
	glsNormalizeVector3( m_MoveForward );
	glsCrossProduct3( m_MoveRight, m_MoveUp, m_MoveForward );
	glsNormalizeVector3( m_MoveRight );

	UpdateVelocity();
	SwitchAnimation();
	CEnemy::Update(_elapsedTime);

	// Death stuff:
	if(this->GetHealth() <= 0 && this->GetState() != Enemy_Dying)
	{
		this->SetState(Enemy_Dying);
		m_DeathTimer = MEDIUM_ENEMY_TIMER_DEATH;
	}

	return true;
}
예제 #5
0
void CSkeleton::EnterSubState()
{
	switch (m_eCurrState)
	{
	case FOLLOW:
		BuildPathToPlayer();
		SwitchAnimation(CSkeleton::eBlockWalkAnim);
		GetCurrAnimation()->SetScale(1.0f);
		break;
	case MANUVERING:
	{
		/*GetShieldRenderMesh(0)->GetRender() = false;
		GetShieldRenderMesh(1)->GetRender() = false;*/
		m_nMaxManuver = (rand() % 3) + 1;
		m_nManuverCount = 0;
		m_nChance = rand() % 2;

		SwitchAnimation(CSkeleton::eBlockWalkAnim);
		GetCurrAnimation()->SetScale(0.8f);
		m_fExitTimer = 2.0f;

	}
	break;
	case CSkeleton::MOVING_IN:
		SwitchAnimation(CSkeleton::eBlockWalkAnim);
		GetCurrAnimation()->SetScale(1.0f);
		m_fExitTimer = 2.0f;
		/*GetShieldRenderMesh(0)->GetRender() = false;
		GetShieldRenderMesh(1)->GetRender() = false;*/
		break;
	case CSkeleton::RETREAT:
		SwitchAnimation(CSkeleton::eBlockWalkAnim);
		GetCurrAnimation()->SetScale(1.0f);
		BuildPathHome();
		/*GetShieldRenderMesh(0)->GetRender() = false;
		GetShieldRenderMesh(1)->GetRender() = false;*/
		break;
	case CSkeleton::BACKING_OUT:
		SwitchAnimation(CSkeleton::eBlockWalkAnim);
		GetCurrAnimation()->SetScale(-1.0f);
		m_fExitTimer = 2.0f;
		/*GetShieldRenderMesh(0)->GetRender() = false;
		GetShieldRenderMesh(1)->GetRender() = false;*/
		break;
	case CSkeleton::SWINGING:
	{
		SwitchAnimation(CSkeleton::eAttackAnim);

		const XMFLOAT3& skelPosition = *GetPosition();
		GetAttack()->Attack(GetWeapon()->GetDamage());
		AudioSystemWwise::Get()->PostEvent(AK::EVENTS::SKELETONATTACK, XMFLOAT3(skelPosition.x, skelPosition.y, skelPosition.z));
		// Set the timer
		m_fExitTimer = GetCurrAnimation()->GetDuration();
		/*GetShieldRenderMesh(0)->GetRender() = false;
		GetShieldRenderMesh(1)->GetRender() = false;*/
	}
	break;
	case CSkeleton::SPAWN:
	{
		SwitchAnimation(CSkeleton::eSpawnAnim);
		m_cpAnimations[eSpawnAnim].IntializeAnimation();
		m_cpAnimations[eSpawnAnim].SetScale(1.0f);
		m_fExitTimer = m_cpAnimations[eSpawnAnim].GetDuration() - 0.25f;
		/*GetShieldRenderMesh(0)->GetRender() = false;
		GetShieldRenderMesh(1)->GetRender() = false;*/
	}
	break;
	/*case CSkeleton::BLOCKING:
	{
	SwitchAnimation(CSkeleton::eBlockAnim);
	int nBlockSide = (int)CheckBlockSide();


	GetShieldRenderMesh(nBlockSide)->GetRender() = true;
	m_nShieldIndex = nBlockSide;

	m_fExitTimer = GetCurrAnimation()->GetDuration();

	}
	break;*/
	case CSkeleton::HURT:
	{
		const XMFLOAT3& skelPosition = *GetPosition();

		if (GetHealth() > 0)
		{
			int rndHitAnim = rand() % 2;

			switch (rndHitAnim)
			{
			case 0:
				SwitchAnimation(CSkeleton::eHurtAnim);
				break;
			case 1:
				SwitchAnimation(CSkeleton::eHurt2Anim);
				break;
			}
			AudioSystemWwise::Get()->PostEvent(AK::EVENTS::SKELETONATTACK, XMFLOAT3(skelPosition.x, skelPosition.y, skelPosition.z));
			AudioSystemWwise::Get()->PostEvent(AK::EVENTS::SKELETONHURT, XMFLOAT3(skelPosition.x, skelPosition.y, skelPosition.z));
			m_fExitTimer = GetCurrAnimation()->GetDuration();
		}
		else
		{
			PlayParticle(eFadeAway, XMFLOAT3{ 0.0f, -50.0f, 0.0f });

			SwitchAnimation(CSkeleton::eDeathAnim);
			AudioSystemWwise::Get()->PostEvent(AK::EVENTS::SKELETONHURT, XMFLOAT3(skelPosition.x, skelPosition.y, skelPosition.z));
			AudioSystemWwise::Get()->PostEvent(AK::EVENTS::SKELETONDEATH, XMFLOAT3(skelPosition.x, skelPosition.y, skelPosition.z));
			m_fExitTimer = GetCurrAnimation()->GetDuration();
		}
		PlayHitParticles();
		XMFLOAT3 tVelocity(0.0f, 0.0f, 0.0f);
		SetWorldVelocity(tVelocity);
	}

	break;
	case DEATH:
	{
		m_cpAttack->SetIsActive(false);
		break;
	}
	default:
		break;
	}
}