/* ==========================================================================
* 파    일 : TriggerManager.h
* 목    적 : 
* 작 성 자 : 김가람
* 작 성 일 : 2008-08-01
* 주의사항 :
*===========================================================================*/
#pragma once
#include "Quest_Common.h"

/// 트리거 정보
class cTrigger
{
	friend class cQuestManager;
	friend class cTriggerManager;

public:
	cTrigger();

private:
	/// 발생 퀘스트 인덱스
	unsigned long mQuestIndex;

	/// 최저 레벨
	short mLowLevel;

	/// 최고 레벨
	short mHighLevel;

	/// 종족
	short mRace[2];

	/// 가능한 직업
	typedef tHashSet<unsigned long> cJobSet;
	cJobSet mJobSet;

	/// 보유해야하는 아이템
	sQuestItem mHaveItem[QUEST_ITEM_MAX];

	/// 퀘스트매니저 - 완료 목록 참조
	/// 하위 연계 퀘스트 인덱스
	typedef tArray<unsigned long> cLinkQuestArr;
	cLinkQuestArr mLinkQuestArr;

	/// 걸려있어야 하는 효과리스트
	unsigned long mSkillArray[QUEST_BUFF_MAX];
};


/// 트리거 매니저
class cTriggerManager
{
	static cTriggerManager* mpSingleton;

public:	
	cTriggerManager();
	~cTriggerManager();

	bool Init();
	void Clear();
	
	bool AddTrigger( unsigned long questIdx, cTrigger* trigger );
	void DeleteTrigger( unsigned long questIdx );

protected:
	cTrigger* GetTrigger( unsigned long questIdx );

public:
	static cTriggerManager* GetSingleton();

private:
	/// 트리거 맵 (questidx, cTrigger*)
	typedef tPointerHashMap<unsigned long, void*> cTriggerMap;
	cTriggerMap mTriggerMap;
};

inline
cTriggerManager* cTriggerManager::GetSingleton()
{
	return mpSingleton;
}

#define TRIGGERMAN cTriggerManager::GetSingleton()

