#include <KeyLockComposer.h>
Public Member Functions | |
int | Process (CTileArranger *pTileArranger) |
CKeyLockComposer의 member function을 호출하여 사용자 조건에 맞는 key-lock을 배치한다. | |
Private Member Functions | |
void | ConstructGraph (TiledGraph *tiledGraph) |
m_pTileArranger로부터 slotmatrix를 읽어서 tiledgraph 를 구성한다. | |
int | AllocateLock (LockDef lockdef, int rootX, int rootY, TiledGraph &g, Lock *newLock) |
새로운 Lock을 할당한다. | |
int | AllocateKey (int rootX, int rootY, TiledGraph &g, Key *newKey) |
새로운 Key를 할당한다. | |
int | GetCutGraph (TiledGraph &tileGraph, Lock &lock, TiledGraph *newGraph) |
입력으로 주어진 graph 를 복사한 다음에 lock에 해당하는 edge를 끊은 tiledGraph를 반환한다. | |
void | FindBridges (TiledGraph &g, int rootX, int rootY, vector< Bridge > *bridges) |
주어진 Graph에서 Bridge를 찾는다. | |
int | ADFS (TiledGraph &g, int x, int y, int parentX, int parentY, bool isRoot) |
깊이 우선 탐색을 통해 Articulation Point와 Bridge를 찾는다. | |
int | SubsequentProcessToLock (LockDef lockdef, TiledGraph &tileGraph, Lock newLock, int sectionStartX, int sectionStartY) |
새로운 Lock을 배치한 뒤의 절차를 처리한다. | |
Private Attributes | |
CTileArranger * | m_pTileArranger |
class CTileArranger의 pointer | |
TiledGraph | m_tiledGraph |
class CTileArranger의 Graph 생성 결과로부터 생성한 TiledGraph | |
vector< Lock > | m_locks |
생성한 Lock의 목록 | |
vector< Key > | m_keys |
생성한 Key의 목록 | |
int | m_dForDfs [MAX_SLOT_MATRIX_SIZE][MAX_SLOT_MATRIX_SIZE] |
ADFS() 함수에서 Articulation Point와 Bridge를 구할 때 사용한다. | |
int | m_lowForDfs [MAX_SLOT_MATRIX_SIZE][MAX_SLOT_MATRIX_SIZE] |
ADFS() 함수에서 Articulation Point와 Bridge를 구할 때 사용한다. | |
vector< Coor > | m_artiPoints |
ADFS() 함수에서 발견한 Artiulcation Point의 목록. | |
bool | m_bVisitedBfs [MAX_SLOT_MATRIX_SIZE][MAX_SLOT_MATRIX_SIZE] |
AllocateKey() 내부에서 너비 우선 탐색을 할 때 사용한다. | |
Friends | |
class | CCelledMapGenerator |
int CKeyLockComposer::Process | ( | CTileArranger * | pTileArranger | ) |
CKeyLockComposer의 member function을 호출하여 사용자 조건에 맞는 key-lock을 배치한다.
pTileArranger | CTileArranger의 pointer |
void CKeyLockComposer::ConstructGraph | ( | TiledGraph * | tiledGraph | ) | [private] |
m_pTileArranger로부터 slotmatrix를 읽어서 tiledgraph 를 구성한다.
tiledGraph | 구성된 graph를 반환할 pointer |
int CKeyLockComposer::AllocateLock | ( | LockDef | lockdef, | |
int | rootX, | |||
int | rootY, | |||
TiledGraph & | g, | |||
Lock * | newLock | |||
) | [private] |
새로운 Lock을 할당한다.
인자로 주어진 LockDef에 맞는 Lock을 (rootX, rootY) 로부터 도달 가능한 위치에 배치한다.
lockdef | 생성할 Lock의 정의 | |
rootX | Graph에서 게임의 주인공이 진행하기 시작하는 지점의 x좌표 | |
rootY | Graph에서 게임의 주인공이 진행하기 시작하는 지점의 y좌표 | |
g | Lock을 배치해야 하는 graph | |
newLock | 새로 배치한 Lock의 정의를 반환할 pointer |
int CKeyLockComposer::AllocateKey | ( | int | rootX, | |
int | rootY, | |||
TiledGraph & | g, | |||
Key * | newKey | |||
) | [private] |
새로운 Key를 할당한다.
(rootX, rootY) 로부터 도달 가능한 위치에 Key를 배치한다.
rootX | Graph에서 게임의 주인공이 진행하기 시작하는 지점의 x좌표 | |
rootY | Graph에서 게임의 주인공이 진행하기 시작하는 지점의 y좌표 | |
g | Key를 배치해야 하는 graph | |
newKey | 새로 배치한 Key의 정의를 반환할 pointer |
int CKeyLockComposer::GetCutGraph | ( | TiledGraph & | tileGraph, | |
Lock & | lock, | |||
TiledGraph * | newGraph | |||
) | [private] |
입력으로 주어진 graph 를 복사한 다음에 lock에 해당하는 edge를 끊은 tiledGraph를 반환한다.
tileGraph | 원본 Tiled Graph | |
lock | graph에서 끊어야 하는 Lock | |
newGraph | 새로 생성된 Tiled Graph |
void CKeyLockComposer::FindBridges | ( | TiledGraph & | g, | |
int | rootX, | |||
int | rootY, | |||
vector< Bridge > * | bridges | |||
) | [private] |
주어진 Graph에서 Bridge를 찾는다.
g | tiled graph | |
rootX | 깊이 우선 탐색을 시작할 Slot의 x좌표 | |
rootY | 깊이 우선 탐색을 시작할 Slot의 y좌표 | |
bridges | 발견한 Bridge의 목록을 반환할 pointer |
int CKeyLockComposer::ADFS | ( | TiledGraph & | g, | |
int | x, | |||
int | y, | |||
int | parentX, | |||
int | parentY, | |||
bool | isRoot | |||
) | [private] |
깊이 우선 탐색을 통해 Articulation Point와 Bridge를 찾는다.
g | tiled graph | |
x | 현재 탐색 중인 Slot의 x좌표 | |
y | 현재 탐색 중인 Slot의 y좌표 | |
parentX | 부모 Slot의 x좌표 | |
parentY | 부모 Slot의 y좌표 | |
isRoot | 현재 탐색 중인 Slot이 깊이 우선 탐색 트리의 루트인지 여부 |
int CKeyLockComposer::SubsequentProcessToLock | ( | LockDef | lockdef, | |
TiledGraph & | tileGraph, | |||
Lock | newLock, | |||
int | sectionStartX, | |||
int | sectionStartY | |||
) | [private] |
새로운 Lock을 배치한 뒤의 절차를 처리한다.
새로 배치한 Lock이 중첩 Lock인 경우에는 새로운 Lock을 배치하고 그 안쪽에 이전 Lock의 Key를 배치해야 한다. 중첩 Lock이 아니라면 Lock의 바깥쪽에 Key를 배치하는 절차가 필요하다.
lockdef | 생성한 Lock의 정의 | |
tileGraph | tiled graph | |
newLock | 새로 배치한 Lock | |
sectionStartX | 현재 Section의 시작 지점의 x좌표 | |
sectionStartY | 현재 Section의 시작 지점의 y좌표 |
int CKeyLockComposer::m_dForDfs[MAX_SLOT_MATRIX_SIZE][MAX_SLOT_MATRIX_SIZE] [private] |
ADFS() 함수에서 Articulation Point와 Bridge를 구할 때 사용한다.
각 Slot이 깊이 우선 탐색에서 몇 번째로 방문되었는지 저장
int CKeyLockComposer::m_lowForDfs[MAX_SLOT_MATRIX_SIZE][MAX_SLOT_MATRIX_SIZE] [private] |
ADFS() 함수에서 Articulation Point와 Bridge를 구할 때 사용한다.
각 Slot의 서브 트리에서 Back Edge를 통해 도달 가능한 Slot의 최소 m_dForDfs 값