BubbleBobbleRemake / BubbleBobble / PlayerScoreComponent.cpp
PlayerScoreComponent.cpp
Raw
#include "PlayerScoreComponent.h"
#include "GameObject.h"
#include <string>
#include "PlayerComponent.h"
#include "BubbleComponent.h"
#include "PickupComponent.h"
#include "GameEvents.h"
#include "GameState.h"
#include "Scene.h"
//#include <iostream>

#include "TextComponent.h"


dae::PlayerScoreComponent::PlayerScoreComponent(int id)
    : m_Id{ id }
{

}

dae::PlayerScoreComponent::~PlayerScoreComponent()
{

}

void dae::PlayerScoreComponent::Initialize()
{

}

void dae::PlayerScoreComponent::ReceiveNotification(unsigned eventId, Component* pComponent)
{
    auto pPlayerComponent = dynamic_cast<PlayerComponent*>(pComponent);
    if (pPlayerComponent != nullptr)
    {
        if (PlayerEvents(eventId) == PlayerEvents::REVIVED_AFTER_GAMEOVER)
        {
            m_Score = 0;
            UpdateScore();
        }
    }

    auto pPickupComponent = dynamic_cast<PickupComponent*>(pComponent);
    if (pPickupComponent != nullptr)
    {
        if (m_Id == 1)
        {
            switch (PickupEvents(eventId))
            {
            case PickupEvents::P1_PICKED_UP_WATERMELON:
                m_Score += 100;
                UpdateScore();
                break;
            case PickupEvents::P1_PICKED_UP_FRIES:
                m_Score += 200;
                UpdateScore();
                break;
            case PickupEvents::P1_PICKED_UP_BANANA:
                m_Score += 500;
                UpdateScore();
                break;
            default:
                break;
            }
        }
        else if (m_Id == 2)
        {
            switch (PickupEvents(eventId))
            {
            case PickupEvents::P2_PICKED_UP_WATERMELON:
                m_Score += 100;
                UpdateScore();
                break;
            case PickupEvents::P2_PICKED_UP_FRIES:
                m_Score += 200;
                UpdateScore();
                break;
            case PickupEvents::P2_PICKED_UP_BANANA:
                m_Score += 500;
                UpdateScore();
                break;
            default:
                break;
            }
        }
    }

    auto pBubbleComponent = dynamic_cast<BubbleComponent*>(pComponent);
    if (pBubbleComponent != nullptr)
    {
        if (m_Id == 1)
        {
            switch (BubbleEvents(eventId))
            {
            case BubbleEvents::P1_POPPED_EMPTY_BUBBLE:
                m_Score += 10;
                UpdateScore();
                break;
            case BubbleEvents::P1_POPPED_ZENCHAN_BUBBLE:
                m_Score += 1000;
                UpdateScore();
                break;
            default:
                break;
            }
        }
        else if (m_Id == 2)
        {
            switch (BubbleEvents(eventId))
            {
            case BubbleEvents::P2_POPPED_EMPTY_BUBBLE:
                m_Score += 10;
                UpdateScore();
                break;
            case BubbleEvents::P2_POPPED_ZENCHAN_BUBBLE:
                m_Score += 1000;
                UpdateScore();
                break;
            default:
                break;
            }
        }
    }
}

void dae::PlayerScoreComponent::UpdateScore()
{
    std::string paddedScore = std::to_string(m_Score);
    if (paddedScore.length() < 5)
    {
        paddedScore.insert(0, 5 - paddedScore.length(), ' ');
    }

    GetGameObject()->GetComponent<TextComponent>()->SetText(paddedScore);

    if (m_Id == 1)
    {
        GameState::GetInstance().SetPlayer1Score(m_Score);
    }
    else if (m_Id == 2)
    {
        GameState::GetInstance().SetPlayer2Score(m_Score);
    }

    if (GameState::GetInstance().GetHighScore() < m_Score)
    {
        GameState::GetInstance().SetHighScore(m_Score);
        SceneManager::GetInstance().GetActiveScene()->FindChild("HighScoreText")->GetComponent<TextComponent>()->SetText(std::to_string(m_Score));
    }
}

void dae::PlayerScoreComponent::Update(float)
{

}

void dae::PlayerScoreComponent::FixedUpdate(float)
{

}

void dae::PlayerScoreComponent::RefreshScore()
{
    if (m_Id == 1)
    {
        m_Score = GameState::GetInstance().GetPlayer1Score();
        UpdateScore();
    }
    else if (m_Id == 2)
    {
        m_Score = GameState::GetInstance().GetPlayer2Score();
        UpdateScore();
    }
}