/* ==========================================================================
* 파    일 : StageScript.h
* 목    적 : 
* 작 성 자 : 박경희
* 작 성 일 : 2007-10-22
* 주의사항 :
*===========================================================================*/
#pragma once

#include "Stage_Common.h"
#include "RangeCheck.h"

class cPlayer;

class cStageScript
{
public:
	static cStageScript*	 mpStageScript;

public:

	/// 생성 소멸
	cStageScript();
	virtual ~cStageScript();

	///	초기화
	bool					Init();
	/// 전체 사용 메모리 제거
	void					Release();

	/// 맵이동 포인트 로드
	bool					StageChangePosScriptLoad();
	/// 좌표를 입력해 맵이동 포인트가 스크립트에 있는지 체크해 index를 리턴. (0:없음)
	unsigned long			GetStageChangeIndex( float posX, float posY );
	/// 좌표이동 고유 인덱스를 입력해 목적지를 리턴한다.
	sTargetPos				GetStageChangePos( float posX, float posY, unsigned short mapNum, float objectSize, unsigned long posIdx );

	/// 좌표이동 고유 인덱스를 입력해 목적지를 리턴한다.
	sTargetPos				GetStageChangePos( unsigned long posIdx );

	/// 가장 가까운 맵이동 목적지좌표를 찾아냄
	NiPoint2				CalcNearTargetMapPos( unsigned short mapNum, float posX, float posY );
	bool					CalcTargetMapPos( unsigned long posIdx, float *pX, float *pY );

	tPointerArray<void*>*	GetMapChangeStarterArr( unsigned short mapNum );
	tPointerArray<void*>*	GetMapChangeDestArr( unsigned short mapNum );

	sStageChangePos*	GetPosScriptInfo( unsigned long idx );

#ifndef _CLIENT
	struct sMapInfo
	{
		unsigned long mapNum;
		unsigned long folderIdx;
	};

	bool LoadMapInfo();
	unsigned long	GetMapFolderIdx( unsigned long mapIdx );

protected:
	typedef tPointerHashMap<unsigned long, void*>	cArrayHashMap;
	cArrayHashMap			mMapInfoMap;
#endif

private:

	/// 
	typedef tPointerHashMap<unsigned long, void*> cPointerHashMap;
	cPointerHashMap			mStageChangePosMap;

	/// 특정맵의 모든 이동포인트를 넘겨주기 위한 변수
	tPointerArray<void*>	mMapPortalArray;

	cRangeCheck				mRangeCheck;
};


#define STAGESCRIPT cStageScript::mpStageScript
