BubbleBobbleRemake / BubbleBobble / PickupComponent.cpp
PickupComponent.cpp
Raw
#include "PickupComponent.h"
#include "TextureComponent.h"
#include "PlayerScoreComponent.h"
#include "ColliderComponent.h"
#include "RigidbodyComponent.h"
#include "GameEvents.h"
#include "Scene.h"
#include "ServiceLocator.h"

#include "GameObject.h"

dae::PickupComponent::PickupComponent(PickupId pickupId, float startX, float startY, const std::vector<ColliderComponent*>& pPlayerColliders)
	: m_PickupId{ pickupId }
	, m_StartX{ startX }
	, m_StartY{ startY }
	, m_pPlayerColliders { pPlayerColliders }
{

}

dae::PickupComponent::~PickupComponent()
{

}

void dae::PickupComponent::Initialize()
{
	m_pSoundSystem = &ServiceLocator::GetSoundSystem();

	GameObject* pPickup = GetGameObject();
	pPickup->SetName("pickup");

	std::string spriteName{};
	switch (m_PickupId)
	{
	default:break;
	case WATERMELON:
		spriteName = "watermelon.png";
		break;
	case FRIES:
		spriteName = "fries.png";
		break;
	case BANANA:
		spriteName = "banana.png";
		break;
	}

	pPickup->AddComponent(new TextureComponent(spriteName));
	pPickup->SetPosition(m_StartX, m_StartY);

	GameObject* pPlayer1ScoreGo = SceneManager::GetInstance().GetActiveScene()->FindChild("Player1ScoreGo");
	if (pPlayer1ScoreGo != nullptr)
		AddObserver(pPlayer1ScoreGo->GetComponent<PlayerScoreComponent>());

	GameObject* pPlayer2ScoreGo = SceneManager::GetInstance().GetActiveScene()->FindChild("Player2ScoreGo");
	if (pPlayer2ScoreGo != nullptr)
		AddObserver(pPlayer2ScoreGo->GetComponent<PlayerScoreComponent>());

	pPickup->AddComponent(new ColliderComponent(32, 32, false, 0, 0));
	pPickup->AddComponent(new RigidbodyComponent());
}

void dae::PickupComponent::Update(float )
{
	GameObject* pPickupGo = GetGameObject();

	float colX{}; float colY{};
	if (pPickupGo->GetComponent<RigidbodyComponent>()->IsCollidingWith(m_pPlayerColliders, colX, colY, true))
	{
		GameObject* pCollidedGameObject = pPickupGo->GetComponent<RigidbodyComponent>()->GetLastCollidedGameObject();
		if (pCollidedGameObject != nullptr)
		{
			PickupEvents event{};
			if (pCollidedGameObject->GetName() == "Player1Go")
			{
				switch (m_PickupId)
				{
				default:break;
				case WATERMELON:
					event = P1_PICKED_UP_WATERMELON;
					break;
				case FRIES:
					event = P1_PICKED_UP_FRIES;
					break;
				case BANANA:
					event = P1_PICKED_UP_BANANA;
					break;
				}

				NotifyObservers(event);
			}
			else if (pCollidedGameObject->GetName() == "Player2Go")
			{
				switch (m_PickupId)
				{
				default:break;
				case WATERMELON:
					event = P2_PICKED_UP_WATERMELON;
					break;
				case FRIES:
					event = P2_PICKED_UP_FRIES;
					break;
				case BANANA:
					event = P2_PICKED_UP_BANANA;
					break;
				}

				NotifyObservers(event);
			}
		}

		m_pSoundSystem->Play(6, 0.5f);

		pPickupGo->SetActive(false);
		pPickupGo->Destroy();
	}
}

void dae::PickupComponent::FixedUpdate(float )
{
}