[DirectX] Level 매니저와 Level


LevelMgr 클래스와 Level 클래스 구현하기

CLevelMgr 클래스 구현


// 헤더파일

#pragma once
#include "CSingleton.h"

class CLevel;

class CLevelMgr :
    public CSingleton<CLevelMgr>
{   
    SINGLE(CLevelMgr);
private:
    CLevel*     m_pCurLevel;

public:
    void init();
    void tick();
    void render();

};



// cpp파일

#include "pch.h"
#include "CLevelMgr.h"

#include "CLevel.h"
#include "CLayer.h"

#include "CGameObject.h"
#include "CTransform.h"
#include "CMeshRender.h"
#include "CPlayerScript.h"

#include "CResMgr.h"

CLevelMgr::CLevelMgr()
	: m_pCurLevel(nullptr)
{
}

CLevelMgr::~CLevelMgr()
{
	if (nullptr != m_pCurLevel)
		delete m_pCurLevel;
}


void CLevelMgr::init()
{
	m_pCurLevel = new CLevel;

	// 오브젝트 생성
	CGameObject* pObj = new CGameObject;
	pObj->AddComponent(new CTransform);
	pObj->AddComponent(new CMeshRender);
	pObj->AddComponent(new CPlayerScript);

	Ptr<CMesh> RectMesh = CResMgr::GetInst()->FindRes<CMesh>(L"RectMesh");
	Ptr<CGraphicsShader> TestShader = CResMgr::GetInst()->FindRes<CGraphicsShader>(L"TestShader");

	pObj->MeshRender()->SetMesh(RectMesh);
	pObj->MeshRender()->SetShader(TestShader);

	m_pCurLevel->AddGameObject(pObj, 0);




	pObj = new CGameObject;
	pObj->AddComponent(new CTransform);
	pObj->AddComponent(new CMeshRender);	

	pObj->MeshRender()->SetMesh(RectMesh);
	pObj->MeshRender()->SetShader(TestShader);

	m_pCurLevel->AddGameObject(pObj, 1);
}

void CLevelMgr::tick()
{
	m_pCurLevel->tick();
	m_pCurLevel->finaltick();
}

void CLevelMgr::render()
{
	m_pCurLevel->render();
}



CLevel 클래스 구현


// 헤더파일

#pragma once
#include "CEntity.h"

class CLayer;
class CGameObject;

class CLevel :
    public CEntity
{
private:
    CLayer*     m_arrLayer[MAX_LAYER];

public:
    void tick();
    void finaltick();
    void render();

public:
    void AddGameObject(CGameObject* _Object, int _iLayerIdx);



    CLONE(CLevel);
public:
    CLevel();
    ~CLevel();
};



// cpp파일

#include "pch.h"
#include "CLevel.h"

#include "CLayer.h"


CLevel::CLevel()
	: m_arrLayer{}
{
	for (UINT i = 0; i < MAX_LAYER; ++i)
	{
		m_arrLayer[i] = new CLayer;
	}
}

CLevel::~CLevel()
{
	Safe_Del_Array(m_arrLayer);
}


void CLevel::tick()
{
	for (UINT i = 0; i < MAX_LAYER; ++i)
	{
		m_arrLayer[i]->tick();
	}
}

void CLevel::finaltick()
{
	for (UINT i = 0; i < MAX_LAYER; ++i)
	{
		m_arrLayer[i]->finaltick();
	}
}

void CLevel::render()
{
	for (UINT i = 0; i < MAX_LAYER; ++i)
	{
		m_arrLayer[i]->render();
	}
}

void CLevel::AddGameObject(CGameObject* _Object, int _iLayerIdx)
{
	m_arrLayer[_iLayerIdx]->AddGameObject(_Object);
}



CLayer 클래스 구현


각 레벨을 레이어 그룹으로 관리하기 위해서 레이어 클래스를 생성해준다.

우선 define 헤더에 아래 코드를 추가한다.

#define MAX_LAYER 32
// 헤더파일

#pragma once
#include "CEntity.h"

class CGameObject;

class CLayer :
    public CEntity
{
private:
    vector<CGameObject*>    m_vecObject;

public:    
    void tick();
    void finaltick();
    void render();


public:
    void AddGameObject(CGameObject* _Object) { m_vecObject.push_back(_Object); }


    CLONE(CLayer)
public:
    CLayer();
    ~CLayer();
};



// cpp파일

#include "pch.h"
#include "CLayer.h"

#include "CGameObject.h"

CLayer::CLayer()
{
}

CLayer::~CLayer()
{
	Safe_Del_Vec(m_vecObject);
}

void CLayer::tick()
{
	for (size_t i = 0; i < m_vecObject.size(); ++i)
	{
		m_vecObject[i]->tick();
	}
}

void CLayer::finaltick()
{
	for (size_t i = 0; i < m_vecObject.size(); ++i)
	{
		m_vecObject[i]->finaltick();
	}
}

void CLayer::render()
{
	for (size_t i = 0; i < m_vecObject.size(); ++i)
	{
		m_vecObject[i]->render();
	}
}


CTransform 코드의 변경


UpdataData 함수를 Transform 클래스로 보낸다.


// transform.cpp 파일

#include "pch.h"
#include "CTransform.h"

#include "CDevice.h"
#include "CConstBuffer.h"

CTransform::CTransform()
	: CComponent(COMPONENT_TYPE::TRANSFORM)
{
}

CTransform::~CTransform()
{
}

void CTransform::finaltick()
{
	
}

void CTransform::UpdateData()
{
	// 위치값을 상수버퍼에 전달 및 바인딩		
	CConstBuffer* pTransformBuffer = CDevice::GetInst()->GetConstBuffer(CB_TYPE::TRANSFORM);
	pTransformBuffer->SetData(&m_vRelativePos, sizeof(Vec3));
	pTransformBuffer->UpdateData();
}



© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2