BubbleBobbleRemake / BubbleBobble / LevelWinComponent.cpp
LevelWinComponent.cpp
Raw
#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<ZenChanComponent*>(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)
{
}