bool Animator::SwitchAnimation(std::string const& name) { auto animation = FindAnimation(name); if (animation != nullptr) { SwitchAnimation(animation); return true; } return false; }
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(); }
/***************************************************************** * 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(); }
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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; }
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; } }