#include "LevelWinComponent.h" #include "ZenChanComponent.h" #include "GameEvents.h" #include "Scene.h" #include "GameState.h" #include "GameObject.h" dae::LevelWinComponent::LevelWinComponent(int nrEnemies) : m_nrEnemies{ nrEnemies } { } dae::LevelWinComponent::~LevelWinComponent() { } void dae::LevelWinComponent::Initialize() { } void dae::LevelWinComponent::Reset() { m_LevelWon = false; m_LevelChangeTimer = 0; m_nrEnemiesDead = 0; } void dae::LevelWinComponent::ReceiveNotification(unsigned eventId, Component* pComponent) { if (m_LevelWon) return; auto pZenChanComp = dynamic_cast(pComponent); if (pZenChanComp != nullptr) { if (EnemyEvents(eventId) == EnemyEvents::KILLED) { m_nrEnemiesDead++; if (m_nrEnemiesDead >= m_nrEnemies) { m_LevelWon = true; } } } } void dae::LevelWinComponent::Update(float deltaTime) { if (m_LevelWon) { m_LevelChangeTimer += deltaTime; if (m_LevelChangeTimer >= m_LevelChangeDuration) { Reset(); int levelId = GameState::GetInstance().GetLevelId(); levelId++; if (levelId >= 1 && levelId <= 3) { GameState::GetInstance().SetLevelId(levelId); GameMode gameMode = GameState::GetInstance().GetGameMode(); // cleanup auto pPickups = SceneManager::GetInstance().GetActiveScene()->FindChildren("pickup"); for (auto& pPickup : pPickups) { pPickup->Destroy(); } auto pBubbles = SceneManager::GetInstance().GetActiveScene()->FindChildren("bubble"); for (auto& pBubble : pBubbles) { pBubble->Destroy(); } if (gameMode == GameMode::SINGLEPLAYER) { SceneManager::GetInstance().SetScene("SinglePlayer", true); } else if (gameMode == GameMode::COOP) { SceneManager::GetInstance().SetScene("MultiPlayer", true); } } else { SceneManager::GetInstance().SetScene("GameOver", true); } } } } void dae::LevelWinComponent::FixedUpdate(float) { }