Bomberman-OverlordEngine-x64 / OverlordEngine / Managers / MaterialManager.cpp
MaterialManager.cpp
Raw
#include "stdafx.h"
#include "MaterialManager.h"

MaterialManager::~MaterialManager()
{
	//Delete Model Materials
	for(auto& pMaterial:m_Materials)
	{
		SafeDelete(pMaterial);
	}

	m_Materials.clear();

	//Delete PostProcessing Materials
	for (auto& pMaterial : m_MaterialsPP)
	{
		SafeDelete(pMaterial);
	}

	m_MaterialsPP.clear();
}

BaseMaterial* MaterialManager::GetMaterial(UINT materialId) const
{
	BaseMaterial* pBase{};
	if (IsBaseMaterial(materialId))
	{
		if (materialId < m_Materials.size())
		{
			pBase = m_Materials[materialId];
			return pBase;
		}
	}

	if (pBase == nullptr)
	{
		Logger::LogWarning(L"Material with ID={} not found", materialId);
	}

	return nullptr;
}

PostProcessingMaterial* MaterialManager::GetMaterial_Post(UINT materialId) const
{
	PostProcessingMaterial* pBase{};
	if (IsPostProcessingMaterial(materialId))
	{
		materialId = FromPPID(materialId);
		if (materialId < m_MaterialsPP.size())
		{
			pBase = m_MaterialsPP[materialId];
			return pBase;
		}
	}

	if (pBase == nullptr)
	{
		Logger::LogWarning(L"Material with ID={} not found", materialId);
	}

	return nullptr;
}

void MaterialManager::RemoveMaterial(UINT materialId, bool deleteObj)
{
	//Valid Material id?
	if (!IsValid(materialId))
	{
		Logger::LogWarning(L"MaterialManager::RemoveMaterial >> Invalid Material ID");
		return;
	}

	if(IsBaseMaterial(materialId))
	{
		if (m_Materials.size() < materialId || !m_Materials[materialId])
		{
			Logger::LogWarning(L"MaterialManager::RemoveMaterial >> Invalid Material ID");
			return;
		}

		m_Materials[materialId]->ResetMaterialId();

		if (deleteObj)
		{
			delete m_Materials[materialId];
		}

		m_Materials[materialId] = nullptr;
	}
	else
	{
		materialId = FromPPID(materialId);
		if (m_MaterialsPP.size() < materialId || !m_MaterialsPP[materialId])
		{
			Logger::LogWarning(L"MaterialManager::RemoveMaterial >> Invalid Material ID");
			return;
		}

		m_MaterialsPP[materialId]->ResetMaterialId();

		if (deleteObj)
		{
			delete m_MaterialsPP[materialId];
		}

		m_MaterialsPP[materialId] = nullptr;
	}
	
}

void MaterialManager::RemoveMaterial(BaseMaterial* pMaterial, bool deleteObj)
{
	const auto materialId = pMaterial->GetMaterialId();
	if (!IsValid(materialId) || m_Materials.size() < materialId || !m_Materials[materialId])
	{
		Logger::LogWarning(L"MaterialManager::RemoveMaterial >> Invalid Material ID");
		return;
	}

	if(m_Materials[materialId] == pMaterial)
	{
		RemoveMaterial(materialId, deleteObj);
	}
}

void MaterialManager::RemoveMaterial(PostProcessingMaterial* pMaterial, bool deleteObj)
{
	const auto materialId = pMaterial->GetMaterialId();
	if (!IsValid(materialId) || m_MaterialsPP.size() < materialId || !m_MaterialsPP[materialId])
	{
		Logger::LogWarning(L"MaterialManager::RemoveMaterial >> Invalid Material ID");
		return;
	}

	if (m_MaterialsPP[materialId] == pMaterial)
	{
		RemoveMaterial(materialId, deleteObj);
	}
}