510 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
	
		
		
			
		
	
	
			510 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C
		
	
	
	
|  | #pragma once
 | |||
|  | #include "e2dutil.h"
 | |||
|  | #include "e2dimpl.h"
 | |||
|  | 
 | |||
|  | namespace e2d | |||
|  | { | |||
|  | 
 | |||
|  | 
 | |||
|  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | class Random | |||
|  | { | |||
|  | public: | |||
|  | 	// ȡ<>÷<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	template<typename T> | |||
|  | 	static inline T Range(T min, T max)  | |||
|  | 	{  | |||
|  | 		return e2d::Random::RandomInt(min, max);  | |||
|  | 	} | |||
|  | 
 | |||
|  | 	// ȡ<>÷<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	static inline float Range(float min, float max)  | |||
|  | 	{  | |||
|  | 		return e2d::Random::RandomReal(min, max);  | |||
|  | 	} | |||
|  | 
 | |||
|  | 	// ȡ<>÷<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	static inline double Range(double min, double max) | |||
|  | 	{  | |||
|  | 		return e2d::Random::RandomReal(min, max);  | |||
|  | 	} | |||
|  | 
 | |||
|  | private: | |||
|  | 	template<typename T> | |||
|  | 	static T RandomInt(T min, T max) | |||
|  | 	{ | |||
|  | 		std::uniform_int_distribution<T> dist(min, max); | |||
|  | 		return dist(Random::GetEngine()); | |||
|  | 	} | |||
|  | 
 | |||
|  | 	template<typename T> | |||
|  | 	static T RandomReal(T min, T max) | |||
|  | 	{ | |||
|  | 		std::uniform_real_distribution<T> dist(min, max); | |||
|  | 		return dist(Random::GetEngine()); | |||
|  | 	} | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	static std::default_random_engine &GetEngine(); | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | // <20><><EFBFBD><EFBFBD>
 | |||
|  | class Music : | |||
|  | 	public Ref | |||
|  | { | |||
|  | 	friend class VoiceCallback; | |||
|  | 
 | |||
|  | public: | |||
|  | 	Music(); | |||
|  | 
 | |||
|  | 	explicit Music( | |||
|  | 		const e2d::String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	explicit Music( | |||
|  | 		const Resource& res		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	virtual ~Music(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | |||
|  | 	bool Open( | |||
|  | 		const e2d::String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | |||
|  | 	bool Open( | |||
|  | 		const Resource& res | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD>
 | |||
|  | 	bool Play( | |||
|  | 		int loopCount = 0 | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ͣ
 | |||
|  | 	void Pause(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD>
 | |||
|  | 	void Resume(); | |||
|  | 
 | |||
|  | 	// ֹͣ
 | |||
|  | 	void Stop(); | |||
|  | 
 | |||
|  | 	// <20>رղ<D8B1><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | |||
|  | 	void Close(); | |||
|  | 
 | |||
|  | 	// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>
 | |||
|  | 	bool IsPlaying() const; | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	bool SetVolume( | |||
|  | 		float volume | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD>ò<EFBFBD><C3B2>Ž<EFBFBD><C5BD><EFBFBD>ʱ<EFBFBD><CAB1>ִ<EFBFBD>к<EFBFBD><D0BA><EFBFBD>
 | |||
|  | 	void SetCallbackOnEnd( | |||
|  | 		const Function& func | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿһ<C3BF>β<EFBFBD><CEB2>Ž<EFBFBD><C5BD><EFBFBD>ʱ<EFBFBD><CAB1>ִ<EFBFBD>к<EFBFBD><D0BA><EFBFBD>
 | |||
|  | 	void SetCallbackOnLoopEnd( | |||
|  | 		const Function& func | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ȡ IXAudio2SourceVoice <20><><EFBFBD><EFBFBD>
 | |||
|  | 	IXAudio2SourceVoice * GetSourceVoice() const; | |||
|  | 
 | |||
|  | protected: | |||
|  | 	bool _readMMIO(); | |||
|  | 
 | |||
|  | 	bool _resetFile(); | |||
|  | 
 | |||
|  | 	bool _read( | |||
|  | 		BYTE* buffer, | |||
|  | 		DWORD size_to_read | |||
|  | 	); | |||
|  | 
 | |||
|  | 	bool _findMediaFileCch( | |||
|  | 		wchar_t* dest_path, | |||
|  | 		int cch_dest, | |||
|  | 		const wchar_t * file_name | |||
|  | 	); | |||
|  | 
 | |||
|  | protected: | |||
|  | 	bool					opened_; | |||
|  | 	DWORD					size_; | |||
|  | 	CHAR*					buffer_; | |||
|  | 	BYTE*					wave_data_; | |||
|  | 	HMMIO					hmmio_; | |||
|  | 	MMCKINFO				ck_; | |||
|  | 	MMCKINFO				ck_riff_; | |||
|  | 	WAVEFORMATEX*			wfx_; | |||
|  | 	VoiceCallback			callback_; | |||
|  | 	IXAudio2SourceVoice*	voice_; | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | // <20><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | class Player | |||
|  | { | |||
|  | public: | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | |||
|  | 	static Player * GetInstance(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | |||
|  | 	static void DestroyInstance(); | |||
|  | 
 | |||
|  | 	// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | |||
|  | 	bool Preload( | |||
|  | 		const String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	bool Play( | |||
|  | 		const String& file_path,	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 		int loop_count = 0		/* <20>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1 Ϊѭ<CEAA><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
 | |||
|  | 	void Pause( | |||
|  | 		const String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void Resume( | |||
|  | 		const String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
 | |||
|  | 	void Stop( | |||
|  | 		const String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>״̬
 | |||
|  | 	bool IsPlaying( | |||
|  | 		const String& file_path	/* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | |||
|  | 	bool Preload( | |||
|  | 		const Resource& res		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	bool Play( | |||
|  | 		const Resource& res,	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 		int loop_count = 0		/* <20>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1 Ϊѭ<CEAA><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
 | |||
|  | 	void Pause( | |||
|  | 		const Resource& res		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void Resume( | |||
|  | 		const Resource& res		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
 | |||
|  | 	void Stop( | |||
|  | 		const Resource& res		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>״̬
 | |||
|  | 	bool IsPlaying( | |||
|  | 		const Resource& res		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
 | |||
|  | 	float GetVolume(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void SetVolume( | |||
|  | 		float volume	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΧΪ -224 ~ 224<32><34>0 <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void PauseAll(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void ResumeAll(); | |||
|  | 
 | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void StopAll(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
 | |||
|  | 	void ClearCache(); | |||
|  | 
 | |||
|  | protected: | |||
|  | 	Player(); | |||
|  | 
 | |||
|  | 	~Player(); | |||
|  | 
 | |||
|  | 	E2D_DISABLE_COPY(Player); | |||
|  | 
 | |||
|  | protected: | |||
|  | 	float volume_; | |||
|  | 	std::map<size_t, Music*> musics_; | |||
|  | 
 | |||
|  | 	static Player * instance_; | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | class Timer; | |||
|  | 
 | |||
|  | // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
 | |||
|  | class Task : | |||
|  | 	public Ref | |||
|  | { | |||
|  | 	friend class Timer; | |||
|  | 
 | |||
|  | public: | |||
|  | 	explicit Task( | |||
|  | 		const Function& func,		/* ִ<>к<EFBFBD><D0BA><EFBFBD> */ | |||
|  | 		const String& name = L""	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	explicit Task( | |||
|  | 		const Function& func,		/* ִ<>к<EFBFBD><D0BA><EFBFBD> */ | |||
|  | 		float delay,				/* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩 */ | |||
|  | 		int times = -1,				/* ִ<>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1 Ϊ<><CEAA><EFBFBD><EFBFBD>ִ<EFBFBD>У<EFBFBD> */ | |||
|  | 		const String& name = L""	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void Start(); | |||
|  | 
 | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
 | |||
|  | 	void Stop(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
 | |||
|  | 	bool IsRunning() const; | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	const String& GetName() const; | |||
|  | 
 | |||
|  | protected: | |||
|  | 	// ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void Update(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	bool IsReady() const; | |||
|  | 
 | |||
|  | protected: | |||
|  | 	bool		running_; | |||
|  | 	bool		stopped_; | |||
|  | 	int			run_times_; | |||
|  | 	int			total_times_; | |||
|  | 	String		name_; | |||
|  | 	Duration	delay_; | |||
|  | 	Time		last_time_; | |||
|  | 	Function	callback_; | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | // <20><>ʱ<EFBFBD><CAB1>
 | |||
|  | class Timer | |||
|  | { | |||
|  | public: | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1>ʵ<EFBFBD><CAB5>
 | |||
|  | 	static Timer * GetInstance(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void AddTask( | |||
|  | 		Task * task | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void StartTasks( | |||
|  | 		const String& task_name | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
 | |||
|  | 	void StopTasks( | |||
|  | 		const String& task_name | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void RemoveTasks( | |||
|  | 		const String& task_name | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void StartAllTasks(); | |||
|  | 
 | |||
|  | 	// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void StopAllTasks(); | |||
|  | 
 | |||
|  | 	// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	void RemoveAllTasks(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD>¶<EFBFBD>ʱ<EFBFBD><CAB1>
 | |||
|  | 	void Update(); | |||
|  | 
 | |||
|  | 	// ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
 | |||
|  | 	void UpdateTime(); | |||
|  | 
 | |||
|  | private: | |||
|  | 	Timer(); | |||
|  | 
 | |||
|  | 	~Timer(); | |||
|  | 
 | |||
|  | 	E2D_DISABLE_COPY(Timer); | |||
|  | 
 | |||
|  | private: | |||
|  | 	std::vector<Task*> tasks_; | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | // <20><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | class Data | |||
|  | { | |||
|  | public: | |||
|  | 	Data( | |||
|  | 		const String& key,					/* <20><>ֵ */ | |||
|  | 		const String& field = L"Defalut"	/* <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	bool Exists() const; | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD> int <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	bool SaveInt( | |||
|  | 		int value | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD> float <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	bool SaveFloat( | |||
|  | 		float value | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD> double <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	bool SaveDouble( | |||
|  | 		double value | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD> bool <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	bool SaveBool( | |||
|  | 		bool value | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD> String <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	bool SaveString( | |||
|  | 		const String& value | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><>ȡ int <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	int GetInt() const; | |||
|  | 
 | |||
|  | 	// <20><>ȡ float <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	float GetFloat() const; | |||
|  | 
 | |||
|  | 	// <20><>ȡ double <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	double GetDouble() const; | |||
|  | 
 | |||
|  | 	// <20><>ȡ bool <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	bool GetBool() const; | |||
|  | 
 | |||
|  | 	// <20><>ȡ <20>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD>͵<EFBFBD>ֵ
 | |||
|  | 	String GetString(); | |||
|  | 
 | |||
|  | protected: | |||
|  | 	String key_; | |||
|  | 	String field_; | |||
|  | 	const String& data_path_; | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | // <20>ļ<EFBFBD>
 | |||
|  | class File | |||
|  | { | |||
|  | public: | |||
|  | 	File(); | |||
|  | 
 | |||
|  | 	File( | |||
|  | 		const String& file_name | |||
|  | 	); | |||
|  | 
 | |||
|  | 	virtual ~File(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
 | |||
|  | 	bool Open( | |||
|  | 		const String& file_name | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 	bool Exists() const; | |||
|  | 
 | |||
|  | 	// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
 | |||
|  | 	bool IsFolder() const; | |||
|  | 
 | |||
|  | 	// ɾ<><C9BE><EFBFBD>ļ<EFBFBD>
 | |||
|  | 	bool Delete(); | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
 | |||
|  | 	const String& GetPath() const; | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9>
 | |||
|  | 	String GetExtension() const; | |||
|  | 
 | |||
|  | 	// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>Ŀ¼
 | |||
|  | 	static File Extract( | |||
|  | 		int resource_name,				/* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */ | |||
|  | 		const String& resource_type,	/* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */ | |||
|  | 		const String& dest_file_name	/* Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
 | |||
|  | 	static void AddSearchPath( | |||
|  | 		const String& path | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
 | |||
|  | 	static bool CreateFolder( | |||
|  | 		const String& dir_path	/* <20>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7> */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD>
 | |||
|  | 	static File ShowOpenDialog( | |||
|  | 		const String& title = L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",	/* <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 		const String& filter = L""		/* ɸѡ<C9B8><D1A1>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "*.jpg;*.jpeg" */ | |||
|  | 	); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD>
 | |||
|  | 	static File ShowSaveDialog( | |||
|  | 		const String& title = L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",	/* <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | |||
|  | 		const String& def_file = L"",	/* Ĭ<>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> */ | |||
|  | 		const String& def_ext = L""		/* Ĭ<><C4AC><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "txt" */ | |||
|  | 	); | |||
|  | 
 | |||
|  | protected: | |||
|  | 	DWORD attributes_; | |||
|  | 	String file_path_; | |||
|  | 
 | |||
|  | 	static std::list<String> search_paths_; | |||
|  | }; | |||
|  | 
 | |||
|  | 
 | |||
|  | // ·<><C2B7>
 | |||
|  | class Path | |||
|  | { | |||
|  | 	friend class Game; | |||
|  | 
 | |||
|  | public: | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD>Ĭ<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>·<EFBFBD><C2B7>
 | |||
|  | 	static const String& GetDataPath(); | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD>ļ<EFBFBD>Ŀ¼
 | |||
|  | 	static const String& GetTemporaryPath(); | |||
|  | 
 | |||
|  | 	// <20><>ȡ LocalAppData Ŀ¼
 | |||
|  | 	static const String& GetLocalAppDataPath(); | |||
|  | 
 | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
 | |||
|  | 	static const String& GetExeFilePath(); | |||
|  | }; | |||
|  | 
 | |||
|  | } |