////////////////////////////////////////////////////////////////////////////

		 ******	MisteryEngine 함수 메뉴얼 1.2  ******

////////////////////////////////////////////////////////////////////////////


			***  엔진 생성 가이드 ***

//***** 엔진 생성부분 *******

ENGINE			eng;

ZeroMemory(&eng, sizeof(eng));

eng.DirectXUse.m_bChangeDisplay		= true;
eng.DirectXUse.m_bDirectDrawUse		= false;
eng.DirectXUse.m_bDirectSoundUse	= true;
eng.DirectXUse.m_bFullScreen		= false;
eng.DirectXUse.m_bKeyBoardUse		= false;
eng.DirectXUse.m_bMouseUse			= false;
eng.DirectXUse.m_byDDMemoryFlags	= DDMF_SYSTEM;
eng.m_byMaxSoundBuf			= 30;
eng.m_iWidth				= 640;
eng.m_iHeight				= 480;
eng.m_iMaxBackSurfaceCount	= 5;
eng.m_iMaxSprite			= 10;
eng.m_byColorBits			= 16;
eng.m_dwColorKey			= 0;
SET_RECT(eng.m_rctView, 0, 0, eng.m_iWidth, eng.m_iHeight);//게임화면 크기(다		이렉트X를 사용할때 창드일경우 반드시 설정해야함)

m_pME_Eng = new CMisteryEngine();

if(m_pME_Eng->ME_CreateEngine(&eng)) {
	//성공했을경우 처리
}


//***** 설명부분 *******

//밑에 코딩설명부분을 보면 아시겠지만 다이렉트X
//사용방법은 간단하게 단지 스트럭쳐에 정보만
//기입해주면 됩니다. 그리고 다이렉트 드로우를 쓰나
//안쓰나 스프라이트 출력이나 표면생성할때에
//코딩은 절대 변경하지 않으셔도 됩니다.
//(내부에서 자동적으로 처리)


ENGINE		eng;//엔진 세팅 정보를 담을 스프럭처

ZeroMemory(&eng, sizeof(eng));//스트럭쳐 데이터를 초기화

eng.DirectXUse.m_bChangeDisplay		= true;
/*게임의 컬러비트수와 데스크탑 디스플레이 컬러비트수가 다를경우
	eng.m_byColorBits 에서 설정해준 컬러비트수로 컬러비트를 바꾼다*/

eng.DirectXUse.m_bDirectDrawUse		= false;
//다이렉트를 사용할것인가

eng.DirectXUse.m_bDirectSoundUse	= true;
//다이렉트사운드를 사용할것인가

eng.DirectXUse.m_bFullScreen		= false;
//전체화면인가

eng.DirectXUse.m_bKeyBoardUse		= false;
//지원안함(삭제예정)

eng.DirectXUse.m_bMouseUse			= false;
//지원안함(삭제예정)

eng.DirectXUse.m_byDDMemoryFlags	= DDMF_SYSTEM;
/*DDMF_LOCAL, DDMF_NONLOCAL, DDMF_VIDEO, DDMF_SYSTEM
	다이렉트드로우 표면의 메모리 위치, DEFAULT는 시스템메모리*/

eng.m_byMaxSoundBuf			= 30;
//사운드가 동시에 출력될 최대갯수를 말한다

eng.m_iWidth				= 640;
//게임의 가로크기, 단 전체화면일때는 640, 800, 1024, 1152...등등으로만 해야함

eng.m_iHeight				= 480;
//게임의 세로크기, 단 전체화면일때는 480, 600, 768, 864...등등으로만 해야함

eng.m_iMaxBackSurfaceCount	= 5;
//백서피스 최대갯수 1 - 65535

eng.m_iMaxSprite			= 10;
//스프라이트 최대갯수 1 - 65535

eng.m_byColorBits			= 16;
//게임 컬러비트수	16비트만 최적화 되어있음, 8비트이하나 24비트 이상은 지원안함

eng.m_dwColorKey			= 0;
//게임에 사용될 컬러키

m_pME_Eng = new CMisteryEngine();
//엔진 생성, 전역으로 CMisteryEngine클레스포인터를 멤버로 두세요

if(m_pME_Eng->ME_CreateEngine(&eng)) {//엔진 생성
	//성공했을경우 처리
}






			***	MisteryEngine 함수 가이드  ***


**함수들 앞에 ME는 MisteryEngine에 이니셜입니다.


** ME_CreateEngine **

bool	ME_CreateEngine(LPENGINE lpEngineSetting = NULL, HWND hWnd = NULL);

설명 --- 엔진을 생성함

리턴값 --- 성공하면 true, 아니면 false

파라메터--- 1 파라메터가 NULL일경우 기본값으로 생성함, 2 파라메터는 윈도우
			핸들로서 넣어줄경우 여러가지 (자동)처리에 이점이 있음



** ME_SetUpdateFrame **

void	ME_SetUpdateFrame(bool bUpdate = true);

설명 --- 화면 업데이트 플레임 여부(지원안함)



** ME_IsCreateEngine **

bool	ME_IsCreateEngine();

설명 --- 엔진이 생성되어 있는가

리턴값 --- 있으면 true, 없으면 false



** ME_LoadBmp **

LRESULT		ME_LoadBmp(LPSTR lpFileName, bool bDirectDrawUse = false, bool bConvertColorBit = false, BYTE byConvertColorBit = 16, LPIMAGEDATA lpImageData = NULL);

설명 --- 비트맵파일 로드

리턴값 --- 성공할경우 BMP_OK 를 리턴, 실패할경우 다음중 하나를 리턴
		 	BMP_MEMORYOUT, BMP_FILEERROR (파일이 없거나 열수가 없다.)
				BMP_DATAERROR (BitmapFile의 정보가 잘못되어 있다.)

파라미터 --- lpFileName(파일이름 ex> "C:\\My Document\\Images\\picture.bmp")
				bDirectDrawUse(다이렉트 드로우 사용하고 있는지 여부)
				bConvertColorBit(칼라비트수를 컨버트 할것인가)
				byConvertColorBit(몇비트로 컨버트 할것인가)
				lpImageData(리턴될 이미지데이터 스트럭쳐 포인터)



** ME_LoadJpg **

LRESULT		ME_LoadJpg(LPSTR lpFileName, bool bDirectDrawUse = false, bool bConvertColorBit = false, BYTE byConvertColorBit = 16, LPIMAGEDATA lpImageData = NULL);

설명 --- JPG파일 로드

리턴값 --- 성공하면 JPG_OK 를 리턴, 실패할경우 다음중 하나를 리턴
			JPG_MEMORYOUT 0
			JPG_FILEERROR -1	파일이 없거나 열수가 없다.
			JPG_DATAERROR -2	File의 정보가 잘못되어 있다.

파라미터 --- lpFileName(파일이름 ex> "C:\\My Document\\Images\\picture.jpg")
				bDirectDrawUse(다이렉트 드로우 사용하고 있는지 여부)
				bConvertColorBit(칼라비트수를 컨버트 할것인가)
				byConvertColorBit(몇비트로 컨버트 할것인가)
				lpImageData(리턴될 이미지데이터 스트럭쳐 포인터)



** ME_GetLoadedImageData **

LPIMAGEDATA		ME_GetLoadedImageData();

설명 --- 가장 최근의 로드한 이미지파일데이터 얻어옴

리턴값 --- 스트럭쳐포인터 리턴

	typedef struct _IMAGEDATA {
		HANDLE				szData;			//메모리 핸들
		LPBITMAPINFO		lpbmpInfo;		//비트맵정보
		LPBITMAPINFOHEADER	lpbmpheader;	//비트맵정보헤더
		LPRGBQUAD			m_pRGBTable;	//RGB테이블
		LPBYTE				m_lpData;		//이미지 데이터
		LPBYTE				m_lpOrgData;	//사용안함
		int					m_iW;			//가로
		int					m_iH;			//세로
		DWORD				m_dwSize;		//이미지 사이즈
	} IMAGEDATA, *LPIMAGEDATA;



** ME_CreateSurface **

LRESULT		ME_CreateSurface(int w, int h, int iCnt, DWORD dwColorKey = 0);

설명 --- 백서피스 생성

리턴값 --- 성공할경우 SURFACE_OK 를 리턴, 실패할경우 다음중 하나를 리턴
			SURFACE_MEMORYOUT	0	//메모리 부족
			SURFACE_COUNTOUT	-1	//엔진생성할때 스트럭쳐에 기입해준 카운트											범위를 벗어났음
			SURFACE_FAILED		-2	//실패

파라메터 --- w(가로), h(세로), iCnt(생성할 백서피스 번호), dwColorKey(지원안함)



** ME_AddBackSurface **

LRESULT		ME_AddBackSurface(int w, int h, DWORD dwColorKey = 0);

설명 --- 백서피스 추가

리턴값 --- 성공할경우 SURFACE_OK 를 리턴, 실패할경우 다음중 하나를 리턴
			SURFACE_MEMORYOUT	0	//메모리 부족
			SURFACE_COUNTOUT	-1	//엔진생성할때 스트럭쳐에 기입해준 카운트											범위를 벗어났음
			SURFACE_FAILED		-2	//실패

파라메터 --- w(가로), h(세로), iCnt(생성할 백서피스 번호), dwColorKey(지원안함)



** ME_GetCurrentBackSurface **

int		ME_GetCurrentBackSurface();

설명 --- 현제 백서피스 갯수

리턴값 --- 개수



** ME_GetFirstSurfaceNULL **

WORD	ME_GetFirstSurfaceNULL();

설명 --- 첫번째로 비어있는 백서피스번호를 얻어옴

리턴값 --- 첫번째로 비어있는 백서피스번호 리턴



** ME_IsBackSurface **

bool	ME_IsBackSurface(int iSur);

설명 --- 백서피스가 있는가

리턴값 --- 있으면 true



** ME_SetBackSurfaceSize **

LRESULT		ME_SetBackSurfaceSize(int w, int h, int iSur, DWORD dwColorKey = 0);

설명 --- 백서피스 사이즈 변경

리턴값 --- 성공할경우 SURFACE_OK 를 리턴, 실패할경우 다음중 하나를 리턴
			SURFACE_MEMORYOUT	0	//메모리 부족
			SURFACE_COUNTOUT	-1	//엔진생성할때 스트럭쳐에 기입해준 카운트											범위를 벗어났음
			SURFACE_FAILED		-2	//실패



** ME_DeleteSurface **

void	ME_DeleteSurface(int iSur);

설명 --- 백서피스 삭제

파라미터 ---  삭제할 번호



** ME_DeleteCurrentSurface **

void	ME_DeleteCurrentSurface();

설명 --- 제일 나중에 추가된 백서피스 삭제



** ME_DeleteAllSurface **

void	ME_DeleteAllSurface();//모든 백서피스 삭제



** ME_GetBackSurfaceSize ** 

POINT	ME_GetBackSurfaceSize(int iSur);

설명 --- 백서피스 사이즈 얻어옴

파라미터 --- iSur(백서피스 번호)



** ME_GetSurfacePitch **

long	ME_GetSurfacePitch(int iSur);

설명 --- 백서피스 핏치 얻어옴

파라미터 --- iSur(백서피스 번호)



** ME_AddSprite **

LRESULT		ME_AddSprite(int w, int h, LPBYTE lpData, int *piSpr = NULL, bool bAddCnt = true);

설명 --- 스프라이트 추가

파라메터 --- w, h(가로, 세로), lpData(이미지 데이터 버퍼), pISpr(NULL이면 자			동으로 번호를 매김), bAddCnt(스프라이트 갯수 카운트 증가여부)



** ME_DeleteSprite **

void	ME_DeleteSprite(int iSpr, bool bAddCnt = true);

설명 --- 스프라이트 삭제

파라미터 --- iSpr(번호), bAddCnt(스프라이트 갯수 카운트 감소여부)



** ME_DeleteAllSprite **

void	ME_DeleteAllSprite();

설명 --- 모든 스프라이트 삭제



** ME_GetSpritePitch **

long	ME_GetSpritePitch(int iImg);

설명 --- 스프라이트 핏치 얻어옴

파라미터 --- 스프라이트 번호



** ME_GetSpriteBuffer **

LPBYTE	ME_GetSpriteBuffer(int iSpr);

설명 --- 스프라이트 버퍼 리턴

파라미터 --- 스프라이트 번호



** ME_GetSpriteRectBuffer **

void	ME_GetSpriteRectBuffer(LPBYTE lpDest, RECT rect, int iSpr);

설명 --- 사각형 영역만큼 버퍼를 리턴

파라미터 --- lpDest(메모리가 할당된 이미지 버퍼), rect(얻어올 영역),
			iSpr(스프라이트 번호)



** ME_GetSpriteSize **

POINT	ME_GetSpriteSize(int iSpr);

설명 --- 스프라이트 사이즈

파라미터 --- 스프라이트 번호

리턴값 --- 사이즈



** ME_GetCurrentSprite **

int		ME_GetCurrentSprite();

설명 --- 현제 추가된 스프라이트 갯수 얻어옴

리턴값 --- 현제 추가된 스프라이트 갯수



** ME_GetSpriteCount **

int		ME_GetSpriteCount();

설명 --- 스프라이트 총갯수

리턴값 --- 스프라이트 총갯수



** ME_GetSpriteBufSize **

int		ME_GetSpriteBufSize(int iSpr);

설명 --- 스프라이트 이미지버퍼 사이즈

파라미터 --- 스프라이트 번호

리턴값 --- 이미지버퍼 사이즈



** ME_SetSpriteBuffer **

void	ME_SetSpriteBuffer(int iSpr, LPBYTE lpBuf)

설명 --- 스프라이트 버퍼바꿈(이미지 크기가 같아야 함)

파라미터 --- iSpr(스프라이트 번호), lpBuf(넘겨줄 이미지 버퍼)



** ME_SetChangeSprite **

void	ME_SetChangeSprite(int iSpr1, int iSpr2)

설명 --- 스프라이트데이터를 서로 완전히 바꿈

파라미터 --- iSpr1, iSpr2  바꿀 스프라이트 번호



** ME_EngGethWnd **

HWND	ME_EngGethWnd() { if(this) return m_pEng->EngGethWnd();	else return NULL; };

설명 --- 엔진을 생성할때 지정해준 윈도우 핸들을 리턴한다.

리턴값 --- 윈도우 핸들



** ME_ClearSurface **

void	ME_ClearSurface(int iImg = 0);

설명 --- 백서피스 0번색으로 초기화(지운다)

파라미터 --- 백서피스 번호



** ME_FillSprite **

void	ME_FillSprite(DWORD dwColor, int iImg = 0);

설명 --- 스프라이트 일정색으로 채움

파라미터 --- dwColor(칼라값), iImg(백서피스 번호)



** ME_EffectBlt **

void	ME_EffectBlt(POINT pos, int iImg[2], BYTE byLevel, BYTE byEffectFlag = 0);

설명 --- 에펙트 드로잉

파라미터 --- pos(위치), iImg(iImg[0] -> 백서피스 번호, 
							 iImg[1] -> 스프라이트 번호) 
			, byLevel(효과단계 0 - 31, 32단계)
			, byEffectFlag = EBF_ALPHA, EBF_FADE



** ME_EffectBltZoomIn **

void	ME_EffectBltZoomIn(POINT pos, int iImg[2], BYTE byLevel, float fZoom, BYTE byEffectFlag = 0);

설명 --- 쉐어버젼에서는 지원 안함



** ME_CopySurface **

void	ME_CopySurface(int iDest, int iSrc);

설명 --- 백서피스끼리 복사

파라미터 --- iDest(복사될 백서피스 번호), iSrc(원본번호)



** ME_BltZoomIn **

bool	ME_BltZoomIn(POINT pos, LPRECT lpBltRect, float fZoom, int iSpr, int iSurface = 0);

설명 --- 확대드로잉

리턴값 --- 성공하면 true를 리턴

파라미터 --- pos(그릴위치), lpBltRect(그리게 될 윈본이미지 사각형 정보, NULL			일경우 자동으로 전체이미지 출력)
			, fZoom(소수점입력 가능, 1보다 큰 소수), iSpr(그릴 스프라이트번호			), iSurface(그려질 백서피스)



** ME_CopySurfaceToSprite **

bool	ME_CopySurfaceToSprite(int iSpr, int iSurface = 0);

설명 --- 백서피스를 스프라이트 버퍼로 복사

리턴값 --- 성공하면 true를 리턴

파라미터 --- iSpr(스프라이트 번호), iSurface(백서피스 번호)



** ME_BltZoomOut **

bool	ME_BltZoomOut(POINT pos, BYTE byZoom, int iSpr, int iSurface = 0);

설명 --- 축소 그리기

리턴값 --- 성공하면 true를 리턴

파라미터 --- pos(위치), byZoom(1보다 큰 정수), iSpr(스프라이트 번호)
			, iSurface(그려질 백서피스 번호)



** ME_BltZoomOutSurface **

bool	ME_BltZoomOutSurface(POINT pos, BYTE byZoom, int iSrcSurface, int iDestSurface = 0);

설명 --- 백서피스 축소

리턴값 --- 성공하면 true를 리턴

파라미터 --- pos(위치), byZoom(1보다 큰 정수), iSrcSurface(윈본 백서피스 번호			), iDestSurface(그려질 대상 백서피스 번호)



** ME_Blt **

void	ME_Blt(POINT pos, int iSpr, int iSurface = 0);

설명 --- 압축그리기

파라미터 --- pos(위치), iSpr(스프라이트 번호), iSurface(그려질 백서피스 번호)



** ME_Blt_UnCheckColorKey **

void	ME_Blt_UnCheckColorKey(POINT pos, int iSpr, int iSurface = 0);

설명 --- 컬러키 무시 압축그리기

파라미터 --- pos(위치), iSpr(스프라이트 번호), iSurface(그려질 백서피스 번호)



** ME_DDBlt, ME_DDBltFast(다이렉트 드로우를 위한 그리기 함수들) **

void	ME_DDBlt(POINT pos, int iSpr);

설명 --- 지원안함



** ME_DDBltFast **

void	ME_DDBltFast(POINT pos, int iSpr);

설명 --- 지원안함



** ME_Flip ** 

void	ME_Flip(int x = 0, int y = 0, int iSurface = 0);

설명 --- 백서피스 내용 화면에 표시

파라미터 --- x, y(위치), iSurface(풀립할 표면)



** ME_Flip **

void	ME_Flip(HDC hDC, int x = 0, int y = 0, int iSurface = 0);

설명 --- 백서피스 내용 화면에 표시

파라미터 --- hDC(DC 핸들), x, y(위치), iSurface(풀립할 표면)




=========================================
	사운드 부분  New!
=========================================


** ME_PlayBGM **

HRESULT	ME_PlayBGM(LPSTR lpFileName, BYTE byFileType, bool bLoop)

설명 --- 배경음 연주

리턴값 --- 성공했을때 S_OK 를 리턴

파라미터 --- lpFileName(파일명 ex] "c:\\my music\\사운드.wav")
				byFileType(TYPE_WAV, TYPE_MID 중하나..단 MIDI는 아직지원안함)
				bLoop(반복연주)



** ME_PlaySE **

HRESULT	ME_PlaySE(LPSTR lpFileName, BYTE byFileType, bool bLoop);

설명 --- 효과음 연주

리턴값 --- 성공했을때 S_OK 를 리턴

파라미터 --- lpFileName(파일명 ex] "c:\\my music\\효과음.wav")
				byFileType(TYPE_WAV, TYPE_MID 중하나..단 MIDI는 아직지원안함)
				bLoop(반복연주)



** ME_PauseBGM **

void	ME_PauseBGM(bool bPause);

설명 --- 현제 연주되고 있는 배경음을 잠시 멈춤

파라미터 --- bPause 가 ture일때는 멈추고, false일때는 연주



** ME_PauseSE **

void	ME_PauseSE(bool bPause);

설명 --- 현제 연주되고 있는 모든 효과음을 잠시 멈춤

파라미터 --- bPause 가 ture일때는 멈추고, false일때는 연주



** ME_PauseSE **

void	ME_PauseSE(BYTE byBuf, bool bPause);

설명 --- 현제 연주되고 있는 효과음을 잠시 멈춤

파라미터 --- byBuf(연주되고 있는 효과음 번호, 플레이한 순서대로
					번호가 매겨짐)
				bPause 가 ture일때는 멈추고, false일때는 연주



** ME_StopBGM **

void	ME_StopBGM();

설명 --- 현제 연주되고 있는 배경음을 끈다



** ME_StopSE **

void	ME_StopSE();

설명 --- 현제 연주되고 있는 모든 효과음을 끈다



** ME_StopSE **

void	ME_StopSE(BYTE byBuf);

설명 --- 현제 연주되고 있는 효과음을 끈다

파라미터 --- byBuf(연주되고 있는 효과음 번호, 플레이한 순서대로
					번호가 매겨짐)



** ME_SetVolumeBGM **

void	ME_SetVolumeBGM(short sVolume);

설명 --- 연주되고 있는 배경음 볼륨 설정

파라미터 --- 볼륭량



** ME_SetVolumeSE ** 

void	ME_SetVolumeSE(short sVolume);

설명 --- 연주되고 있는 모든 효과음 볼륨 설정

파라미터 --- 볼륭량



** ME_SetVolumeSE **

void	ME_SetVolumeSE(BYTE byBuf, short sVolume);

설명 --- 연주되고 있는 효과음 볼륨 설정

파라미터 --- byBuf(연주되고 있는 효과음 번호, 플레이한 순서대로
					번호가 매겨짐)
				sVolume (볼륭량)



