| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2018-04-21 21:24:46 +08:00
										 |  |  |  | #include "e2dmacros.h"
 | 
					
						
							|  |  |  |  | #include "e2dcommon.h"
 | 
					
						
							| 
									
										
										
										
											2018-05-22 11:58:45 +08:00
										 |  |  |  | #include "e2dcustom.h"
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 11:42:36 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | // Base Classes
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace e2d | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-19 01:30:07 +08:00
										 |  |  |  | // <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Game | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ϸʵ<CFB7><CAB5>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	static Game * getInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 	static void destroyInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							| 
									
										
										
										
											2018-07-21 22:57:21 +08:00
										 |  |  |  | 	void start(); | 
					
						
							| 
									
										
										
										
											2017-10-17 21:22:25 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 	// <20><>ͣ<EFBFBD><CDA3>Ϸ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	void pause(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	void resume(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	void quit(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	void cleanup(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	bool isPaused(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 17:00:21 +08:00
										 |  |  |  | 	// <20><EFBFBD><DEB8><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setConfig( | 
					
						
							| 
									
										
										
										
											2018-07-07 11:00:41 +08:00
										 |  |  |  | 		Config* config | 
					
						
							| 
									
										
										
										
											2018-07-04 17:00:21 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-07 11:00:41 +08:00
										 |  |  |  | 	Config* getConfig(); | 
					
						
							| 
									
										
										
										
											2018-07-04 17:00:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-22 00:41:24 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7>ʱ<EFBFBD><CAB1>
 | 
					
						
							|  |  |  |  | 	Duration getTotalDuration() const; | 
					
						
							| 
									
										
										
										
											2018-07-21 22:57:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | private: | 
					
						
							|  |  |  |  | 	Game(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	~Game(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	E2D_DISABLE_COPY(Game); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-22 00:41:24 +08:00
										 |  |  |  | 	bool		_ended; | 
					
						
							|  |  |  |  | 	bool		_paused; | 
					
						
							|  |  |  |  | 	Config*		_config; | 
					
						
							|  |  |  |  | 	Time		_start; | 
					
						
							|  |  |  |  | 	Time		_now; | 
					
						
							|  |  |  |  | 	Time		_last; | 
					
						
							| 
									
										
										
										
											2018-07-04 17:00:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 01:49:20 +08:00
										 |  |  |  | 	static Game * _instance; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Window | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | public: | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ
 | 
					
						
							|  |  |  |  | 	enum class Cursor : int | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-05-24 20:37:34 +08:00
										 |  |  |  | 		Normal,		/* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ */ | 
					
						
							|  |  |  |  | 		Hand,		/* <20><>״ָ<D7B4><D6B8> */ | 
					
						
							|  |  |  |  | 		No,			/* <20><>ָֹ<D6B9><D6B8> */ | 
					
						
							|  |  |  |  | 		Wait,		/* ɳ©ָ<C2A9><D6B8> */ | 
					
						
							|  |  |  |  | 		ArrowWait	/* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Сɳ© */ | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 00:35:27 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
 | 
					
						
							| 
									
										
										
										
											2018-07-17 10:34:16 +08:00
										 |  |  |  | 	enum class Popup : int | 
					
						
							| 
									
										
										
										
											2018-07-17 00:35:27 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		Information,	/* <20><>Ϣ */ | 
					
						
							|  |  |  |  | 		Warning,		/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		Error			/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static Window * getInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static void destroyInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>廥<EFBFBD><E5BBA5><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 00:27:14 +08:00
										 |  |  |  | 	bool createMutex( | 
					
						
							|  |  |  |  | 		const String& mutex = L""	/* <20><><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20>Ĵ<DEB8><C4B4><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	void setSize( | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 		int width,			/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		int height			/* <20><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD> */ | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	void setTitle( | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 		const String& title	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ͼ<EFBFBD><CDBC>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	void setIcon( | 
					
						
							| 
									
										
										
										
											2018-05-07 15:48:06 +08:00
										 |  |  |  | 		int iconID | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-07 17:03:59 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	void setCursor( | 
					
						
							| 
									
										
										
										
											2018-05-07 17:03:59 +08:00
										 |  |  |  | 		Cursor cursor | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	String getTitle(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	double getWidth(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	double getHeight(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	Size getSize(); | 
					
						
							| 
									
										
										
										
											2017-11-03 12:51:01 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-17 23:50:02 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	HWND getHWnd(); | 
					
						
							| 
									
										
										
										
											2017-10-17 23:50:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><EFBFBD><F2BFAABB><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 	void setConsoleEnabled( | 
					
						
							|  |  |  |  | 		bool enabled | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>뷨
 | 
					
						
							| 
									
										
										
										
											2018-07-04 17:00:21 +08:00
										 |  |  |  | 	void setTypewritingEnabled( | 
					
						
							|  |  |  |  | 		bool enabled | 
					
						
							| 
									
										
										
										
											2017-10-17 21:22:25 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 10:34:16 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ťʱ<C5A5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ʾ<EFBFBD>û<EFBFBD><C3BB>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ϰ<EFBFBD>ť
 | 
					
						
							| 
									
										
										
										
											2018-07-17 00:35:27 +08:00
										 |  |  |  | 	bool popup( | 
					
						
							| 
									
										
										
										
											2018-07-17 10:34:16 +08:00
										 |  |  |  | 		const String& text,					/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		const String& title,				/* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */ | 
					
						
							|  |  |  |  | 		Popup style = Popup::Information,	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ */ | 
					
						
							|  |  |  |  | 		bool hasCancel = false				/* <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ť */ | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-13 01:33:53 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | 	void poll(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	Window(); | 
					
						
							| 
									
										
										
										
											2018-03-01 00:19:09 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	~Window(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	E2D_DISABLE_COPY(Window); | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 23:39:00 +08:00
										 |  |  |  | 	// ע<>ᴰ<EFBFBD><E1B4B0>
 | 
					
						
							|  |  |  |  | 	HWND __create(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// Win32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:42:00 +08:00
										 |  |  |  | 	static LRESULT CALLBACK WndProc( | 
					
						
							|  |  |  |  | 		HWND hWnd,  | 
					
						
							|  |  |  |  | 		UINT message,  | 
					
						
							|  |  |  |  | 		WPARAM wParam,  | 
					
						
							|  |  |  |  | 		LPARAM lParam | 
					
						
							|  |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							|  |  |  |  | 	HWND	_hWnd; | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | 	MSG		_msg; | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	Size	_size; | 
					
						
							|  |  |  |  | 	String	_title; | 
					
						
							| 
									
										
										
										
											2018-07-03 23:39:00 +08:00
										 |  |  |  | 	int		_iconID; | 
					
						
							| 
									
										
										
										
											2018-07-03 18:42:00 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static Window * _instance; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD>豸
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Input | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-13 14:34:33 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>豸ʵ<E8B1B8><CAB5>
 | 
					
						
							|  |  |  |  | 	static Input * getInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ʵ<E8B1B8><CAB5>
 | 
					
						
							|  |  |  |  | 	static void destroyInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	bool isDown( | 
					
						
							| 
									
										
										
										
											2018-07-16 22:11:27 +08:00
										 |  |  |  | 		KeyCode key | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B1BBB5><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	bool isPress( | 
					
						
							| 
									
										
										
										
											2018-07-16 22:11:27 +08:00
										 |  |  |  | 		KeyCode key | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	bool isRelease( | 
					
						
							| 
									
										
										
										
											2018-07-16 22:11:27 +08:00
										 |  |  |  | 		KeyCode key | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	bool isDown( | 
					
						
							| 
									
										
										
										
											2018-07-16 22:11:27 +08:00
										 |  |  |  | 		MouseCode code | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<C7B7><F1B1BBB5><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	bool isPress( | 
					
						
							| 
									
										
										
										
											2018-07-16 22:11:27 +08:00
										 |  |  |  | 		MouseCode code | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	bool isRelease( | 
					
						
							| 
									
										
										
										
											2018-07-16 22:11:27 +08:00
										 |  |  |  | 		MouseCode code | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-14 18:43:32 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	double getMouseX(); | 
					
						
							| 
									
										
										
										
											2017-10-14 18:43:32 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	double getMouseY(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	Point getMousePos(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	double getMouseDeltaX(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	double getMouseDeltaY(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>ᣨ<EFBFBD><E1A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	double getMouseDeltaZ(); | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | 	// ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸״̬
 | 
					
						
							|  |  |  |  | 	void update(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	Input(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	~Input(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	E2D_DISABLE_COPY(Input); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-17 22:16:56 +08:00
										 |  |  |  | 	IDirectInput8W* _directInput; | 
					
						
							|  |  |  |  | 	IDirectInputDevice8W* _keyboardDevice; | 
					
						
							|  |  |  |  | 	IDirectInputDevice8W* _mouseDevice; | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 	DIMOUSESTATE _mouseState; | 
					
						
							| 
									
										
										
										
											2018-07-17 22:16:56 +08:00
										 |  |  |  | 	DIMOUSESTATE _mouseRecordState; | 
					
						
							|  |  |  |  | 	char _keyBuffer[256]; | 
					
						
							|  |  |  |  | 	char _keyRecordBuffer[256]; | 
					
						
							| 
									
										
										
										
											2018-07-04 15:33:09 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	static Input * _instance; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>Ⱦ<EFBFBD><C8BE>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Renderer | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ⱦ<EFBFBD><C8BE>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 	static Renderer * getInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 	static void destroyInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-22 13:15:57 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ɫ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	Color getBackgroundColor(); | 
					
						
							| 
									
										
										
										
											2018-04-22 13:15:57 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20>ı<DEB8><C4B1><EFBFBD>ɫ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	void setBackgroundColor( | 
					
						
							| 
									
										
										
										
											2018-04-22 13:15:57 +08:00
										 |  |  |  | 		Color color | 
					
						
							| 
									
										
										
										
											2017-10-29 23:48:32 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | 	// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void render(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>
 | 
					
						
							|  |  |  |  | 	TextRenderer * getTextRenderer(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1HwndRenderTarget <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	ID2D1HwndRenderTarget * getRenderTarget(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1SolidColorBrush <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	ID2D1SolidColorBrush * getSolidColorBrush(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1Factory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static ID2D1Factory * getFactory(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ IWICImagingFactory <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static IWICImagingFactory * getImagingFactory(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ IDWriteFactory <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static IDWriteFactory * getWriteFactory(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	// <20><>ȡ FPS <20>ı<EFBFBD><C4B1><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static IDWriteTextFormat * getFpsTextFormat(); | 
					
						
							| 
									
										
										
										
											2018-04-21 23:09:59 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 	// <20><>ȡ Miter <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static ID2D1StrokeStyle * getMiterStrokeStyle(); | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ Bevel <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static ID2D1StrokeStyle * getBevelStrokeStyle(); | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ Round <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	static ID2D1StrokeStyle * getRoundStrokeStyle(); | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	Renderer(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	~Renderer(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	E2D_DISABLE_COPY(Renderer); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	bool __createDeviceResources(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ɾ<><C9BE><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	void __discardDeviceResources(); | 
					
						
							| 
									
										
										
										
											2017-10-14 01:07:34 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 12:32:20 +08:00
										 |  |  |  | 	// <20><>Ⱦ FPS
 | 
					
						
							|  |  |  |  | 	void _renderFps(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-17 12:32:20 +08:00
										 |  |  |  | 	int						_renderTimes; | 
					
						
							|  |  |  |  | 	double					_lastRenderTime; | 
					
						
							|  |  |  |  | 	String					_fpsText; | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 	D2D1_COLOR_F			_clearColor; | 
					
						
							|  |  |  |  | 	ID2D1HwndRenderTarget*	_renderTarget; | 
					
						
							|  |  |  |  | 	ID2D1SolidColorBrush*	_solidBrush; | 
					
						
							|  |  |  |  | 	TextRenderer*			_textRenderer; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	static ID2D1Factory*		_d2dFactory; | 
					
						
							|  |  |  |  | 	static IWICImagingFactory*	_imagingFactory; | 
					
						
							|  |  |  |  | 	static IDWriteFactory*		_writeFactory; | 
					
						
							|  |  |  |  | 	static IDWriteTextFormat*	_textFormat; | 
					
						
							|  |  |  |  | 	static ID2D1StrokeStyle*	_miterStrokeStyle; | 
					
						
							|  |  |  |  | 	static ID2D1StrokeStyle*	_bevelStrokeStyle; | 
					
						
							|  |  |  |  | 	static ID2D1StrokeStyle*	_roundStrokeStyle; | 
					
						
							|  |  |  |  | 	static Renderer *			_instance; | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | class GC | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 	// <20>Զ<EFBFBD><D4B6>ͷ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void autorelease( | 
					
						
							|  |  |  |  | 		Ref* ref | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void autoreleaseArray( | 
					
						
							|  |  |  |  | 		Ref* ref | 
					
						
							|  |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void retain( | 
					
						
							|  |  |  |  | 		Ref* ref | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ͷ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void release( | 
					
						
							|  |  |  |  | 		Ref* ref | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȫ<EFBFBD><C8AB><EFBFBD>ͷŶ<CDB7><C5B6><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 	template <typename Type> | 
					
						
							| 
									
										
										
										
											2018-07-06 00:47:50 +08:00
										 |  |  |  | 	static inline void safeRelease(Type*& p) | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (p != nullptr) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 			GC::release(p); | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 			p = nullptr; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-07 11:03:03 +08:00
										 |  |  |  | 	// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void flush(); | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-07 11:03:03 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 	static void clear(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-06 00:47:50 +08:00
										 |  |  |  | 	GC(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	~GC(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	E2D_DISABLE_COPY(GC); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 	bool _notifyed; | 
					
						
							| 
									
										
										
										
											2018-07-13 01:12:22 +08:00
										 |  |  |  | 	bool _cleanup; | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 	std::map<Ref*, bool> _pool; | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	static GC _instance; | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | } |