#1. Engine System
+ WinMain - EngineSystem
+ EngineCore
+ EngineError
+ MainNode
#2. FrameWork
+ Grahpics
+ Image - SpriteData
+ Layer (현재 글)
+ Input
+ Game
+ Manager
+ Game Interface
+ Utility
#3. Testing Module
+ 2D Image Test
+ 2D Animation Test
+ Game UI Test
-----------------------------------------------------------------------
이어서 LayerManager Class에 대해서 설명하도록 하겠습니다.
Layer Class를 보셨다면 헤더 파일 내용 중에
enum class 타입으로 선언되어있는 Layer 리스트를 보셨을 겁니다.
위 그림은 해당 리스트 내용을 그대로 순서대로 나열한 것 입니다.
다시 뒤로 돌아가서 코드 보기 귀찮으신 분들을 위해 enum Class만 다시 올려드립니다.
enum class enLayerList { | |
LAYER_NONE = 0, | |
LAYER_FIRST = 1, | |
LAYER_BACKGROUND, | |
LAYER_DEFAULT, | |
LAYER_UI, | |
LAYER_LAST | |
}; |
보는 바와 같이 LAYER_NONE 부터 LAYER_LAST 까지.
(1) LAYER_NONE : 초기화용 레이어 타입
(2) LAYER_FIRST : 첫 번째 레이어
(3) LAYER_BACKGROUND : 배경 레이어
(4) LAYER_DEFAULT : 일반 레이어
(5) LAYER_UI : UI 용 레이어
(6) LAYER_LAST : 마지막 레이어
순으로 총 6가지의 레이어 타입이 있습니다.
만약 무엇보다 우선순위를 높여서 출력하고 싶으신 것이 있다면 첫 번째 레이어로 이미지 클래스에서 타입을 결정시키면 되고.
일반적인 이미지 출력(캐릭터, 아이템, 애니메이션 등)은 LAYER_DEFAULT 를 이용하시면 됩니다.
그 외에 레이어들은 다른 레이어와 똑같이 직관적이므로 설명은 생략하겠습니다.
만약 어떤 설정을 안한다면 모든 이미지들은 LAYER_DEFAULT 값으로 들어갑니다.
그럼 Layer에 대한 복습이 다시 됐으리라 생각하고,
LayerManager를 바로 살펴보도록 하겠습니다.
Layer Manager 헤더 내용입니다.
#ifndef _LAYERMANAGER_H | |
#define _LAYERMANAGER_H | |
class LayerManager; | |
#include "cSingletonBase.h" | |
#include "layer.h" | |
#include <algorithm> | |
#include <string> | |
#include <vector> | |
#include <map> | |
//LayerManager enum enLayerList Matched layerName List | |
namespace LayerManagerNS | |
{ | |
const std::string none = "LAYER_NONE"; | |
const std::string first = "LAYER_FIRST"; | |
const std::string background = "LAYER_BACKGROUND"; | |
const std::string default = "LAYER_DEFAULT"; | |
const std::string ui = "LAYER_UI"; | |
const std::string last = "LAYER_LAST"; | |
} | |
//Layer Manager Class has Singleton pattern | |
class LayerManager : public cSingletonBase<LayerManager> | |
{ | |
private: | |
std::map<std::string, Layer*> layerList; | |
std::vector<std::pair<std::string, Layer*>> layerVec; | |
enLayerList curLayerState = enLayerList::LAYER_NONE; | |
public: | |
LayerManager(); | |
~LayerManager(); | |
//Manager Initialize | |
HRESULT initialize(); | |
// Manager Release | |
void release(); | |
// layerList Sorting -> layerVec | |
// LayerManager using layerVec | |
// Auto Sorting when AddLayer | |
void sortLayer(); | |
//get All Layer Vector | |
std::vector<std::pair<std::string, Layer*>> getAllLayer() { return layerVec; } | |
//get a layer parameter(int layerNum) | |
Layer* getLayer(int layerNum); | |
//get a Layer parameter(std::string layerName) | |
Layer* getLayer(std::string layerName); | |
//get a Layer parameter(enum enlayerList) | |
Layer* getLayer(enLayerList layerState); | |
enLayerList getCurrentLayerState() { return curLayerState; } | |
//set currentLayer State | |
void setCurrentLayerState(enLayerList layerState) { curLayerState = layerState; } | |
void setLayerLoop(); | |
//add Layer Function | |
bool addLayer(std::string layerKey, Layer* layer); | |
//delete Layer Function | |
bool deleteLayer(std::string layerName); | |
void printAllLayer(); | |
}; | |
template<template <typename> class P = std::less > | |
struct compare_pair_second { | |
template<class T1, class T2> bool operator() | |
(const std::pair<T1, T2>&left, const std::pair<T1, T2>&right) | |
{ | |
return P<T2>()(left.second, right.second); | |
} | |
}; | |
#define LAYERMANAGER LayerManager::GetInstance() | |
#endif // !_LAYERMANAGER_H |
1. LayerManagerNS
먼저 namespace 를 살펴보시면 const std::string 타입으로 미리 구성 된 LAYER의 이름들이 들어가있습니다.
2. 변수들
그리고 private: 에 선언되어있는 변수를 확인해주시기 바랍니다.
(1) std::map<std::string, layer*> layerList; (레이어 정렬 전 MAP 컨테이너)
(2) std::vector<std::pair<std::string, layer*>> layerVec; (레이어 정렬 된 VECTOR 컨테이너)
(3) enLayerList curLayerState; (현재 렌더링 해야할 레이어)
이렇게 3가지의 변수가 있습니다.
3. 함수들
다음 public: 에 여러가지 함수들이 있습니다만...
역시나 getter/setter함수들이 주로 있을 뿐, 현재 눈여겨 봐야 될 함수는 SortLayer( ) 밖에 없습니다.
4. 정렬용 템플릿
네 번째로 확인할 점은 레이어들을 정렬 시키기 위해 만들어 둔 템플릿 입니다.
std::less를 이용하여 받아온 매개변수를 left / right 비교를 통해 true/false를 뱉어줍니다.
헤더에서 일단 살펴볼 내용들은 위에 언급한 정도이고,
자세한 설명은 .cpp에서 이어가도록 하겠습니다.
'MyProject > SephyEngine' 카테고리의 다른 글
June_Engine #2_Input .h (0) | 2017.05.18 |
---|---|
June_Engine #3_LayerManager Class .cpp (0) | 2017.04.21 |
June_Engine #3_Layer Class (0) | 2017.04.21 |
June_Engine #3_Image Class .cpp (2) (0) | 2017.04.20 |
June_Engine #3_Image Class .cpp (1) (0) | 2017.04.19 |