| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2018-04-21 21:24:46 +08:00
										 |  |  |  | #include "e2dmacros.h"
 | 
					
						
							|  |  |  |  | #include "e2dcommon.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-02-07 16:37:12 +08:00
										 |  |  |  | class Game | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 	static bool init( | 
					
						
							| 
									
										
										
										
											2018-05-14 00:57:16 +08:00
										 |  |  |  | 		const String& name = L"",		/* <20><>ϷӢ<CFB7><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		const String& mutexName = L""	/* <20><><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							| 
									
										
										
										
											2018-04-21 00:46:26 +08:00
										 |  |  |  | 	static int start( | 
					
						
							| 
									
										
										
										
											2018-05-14 00:57:16 +08:00
										 |  |  |  | 		bool autoRelease = true			/* <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */ | 
					
						
							| 
									
										
										
										
											2018-04-21 00:46:26 +08:00
										 |  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2017-10-17 21:22:25 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 	// <20><>ͣ<EFBFBD><CDA3>Ϸ
 | 
					
						
							|  |  |  |  | 	static void pause(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							|  |  |  |  | 	static void resume(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							|  |  |  |  | 	static void quit(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>Դ
 | 
					
						
							| 
									
										
										
										
											2018-04-19 17:18:44 +08:00
										 |  |  |  | 	static void destroy(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʱ
 | 
					
						
							|  |  |  |  | 	static void reset(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
 | 
					
						
							|  |  |  |  | 	static bool isPaused(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static String getName(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | // <20><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Window | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend Game; | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | public: | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ
 | 
					
						
							|  |  |  |  | 	enum class Cursor : int | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		NORMAL,		/* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ */ | 
					
						
							|  |  |  |  | 		HAND,		/* <20><>״ָ<D7B4><D6B8> */ | 
					
						
							|  |  |  |  | 		NO,			/* <20><>ָֹ<D6B9><D6B8> */ | 
					
						
							|  |  |  |  | 		WAIT,		/* ɳ©ָ<C2A9><D6B8> */ | 
					
						
							|  |  |  |  | 		ARROW_WAIT	/* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Сɳ© */ | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
 | 
					
						
							|  |  |  |  | 	static void setSize( | 
					
						
							| 
									
										
										
										
											2018-05-07 15:48:06 +08:00
										 |  |  |  | 		int width,			/* <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> */ | 
					
						
							|  |  |  |  | 		int height			/* <20><><EFBFBD>ڸ߶<DAB8> */ | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void setTitle( | 
					
						
							| 
									
										
										
										
											2018-05-07 15:48:06 +08:00
										 |  |  |  | 		const String& title	/* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */ | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ͼ<EFBFBD><CDBC>
 | 
					
						
							|  |  |  |  | 	static 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>ʽ
 | 
					
						
							|  |  |  |  | 	static void setCursor( | 
					
						
							|  |  |  |  | 		Cursor cursor | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	static String getTitle(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 	static double getWidth(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
 | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 	static double getHeight(); | 
					
						
							| 
									
										
										
										
											2017-10-20 00:59:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-03 12:51:01 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	static 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>
 | 
					
						
							|  |  |  |  | 	static HWND getHWnd(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 	static void showConsole( | 
					
						
							| 
									
										
										
										
											2018-05-03 22:21:01 +08:00
										 |  |  |  | 		bool show | 
					
						
							| 
									
										
										
										
											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>뷨
 | 
					
						
							|  |  |  |  | 	static void setTypewritingEnable( | 
					
						
							| 
									
										
										
										
											2018-05-07 15:48:06 +08:00
										 |  |  |  | 		bool enable | 
					
						
							| 
									
										
										
										
											2017-10-17 21:22:25 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-05-14 00:57:16 +08:00
										 |  |  |  | 	static void info( | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  |  | 		const String& text,					/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		const String& title = L"Prompt"		/* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */ | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洰<EFBFBD><E6B4B0>
 | 
					
						
							|  |  |  |  | 	static void warning( | 
					
						
							|  |  |  |  | 		const String& text,					/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		const String& title = L"Warning"	/* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */ | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void error( | 
					
						
							|  |  |  |  | 		const String& text,					/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		const String& title = L"Error"		/* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */ | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							|  |  |  |  | 	// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-04-13 00:39:27 +08:00
										 |  |  |  | 	static bool __init(); | 
					
						
							| 
									
										
										
										
											2018-03-01 00:19:09 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void __uninit(); | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 	static void __poll(); | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// Win32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); | 
					
						
							|  |  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸʱ<CFB7><CAB1>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Time | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend Game; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-04-24 13:28:21 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>һ֡<D2BB>뵱ǰ֡<C7B0><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩
 | 
					
						
							|  |  |  |  | 	static double getDeltaTime(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>һ֡<D2BB>뵱ǰ֡<C7B0><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩
 | 
					
						
							| 
									
										
										
										
											2018-04-24 13:28:21 +08:00
										 |  |  |  | 	static unsigned int getDeltaTimeMilliseconds(); | 
					
						
							| 
									
										
										
										
											2017-12-08 19:50:59 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 13:28:21 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>룩
 | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 	static double getTotalTime(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-24 13:28:21 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩
 | 
					
						
							|  |  |  |  | 	static unsigned int getTotalTimeMilliseconds(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							|  |  |  |  | 	// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-01 22:07:44 +08:00
										 |  |  |  | 	static bool __init(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-04 21:24:27 +08:00
										 |  |  |  | 	// <20>Ƿ<EFBFBD><C7B7>ﵽ<EFBFBD><EFB5BD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | 
					
						
							|  |  |  |  | 	static bool __isReady(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD>µ<EFBFBD>ǰʱ<C7B0><CAB1>
 | 
					
						
							|  |  |  |  | 	static void __updateNow(); | 
					
						
							| 
									
										
										
										
											2017-12-08 15:37:52 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 	static void __updateLast(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-10 18:18:02 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 	static void __reset(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void __sleep(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | // <20><><EFBFBD>Ƽ<EFBFBD><C6BC>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Input | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend Game; | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | public: | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							| 
									
										
										
										
											2018-05-18 23:56:36 +08:00
										 |  |  |  | 	enum class Mouse : int | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		LEFT,		/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		RIGHT,		/* <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> */ | 
					
						
							|  |  |  |  | 		MIDDLE		/* <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD> */ | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-18 23:56:36 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	// <20><><EFBFBD>̼<EFBFBD>ֵ
 | 
					
						
							| 
									
										
										
										
											2018-05-18 23:56:36 +08:00
										 |  |  |  | 	enum class Key : int | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		UP = 0xC8, | 
					
						
							|  |  |  |  | 		LEFT = 0xCB, | 
					
						
							|  |  |  |  | 		RIGHT = 0xCD, | 
					
						
							|  |  |  |  | 		DOWN = 0xD0, | 
					
						
							|  |  |  |  | 		ENTER = 0x1C, | 
					
						
							|  |  |  |  | 		SPACE = 0x39, | 
					
						
							|  |  |  |  | 		ESC = 0x01, | 
					
						
							|  |  |  |  | 		BACK = 0x0E, | 
					
						
							|  |  |  |  | 		TAB = 0x0F, | 
					
						
							|  |  |  |  | 		PAUSE = 0xC5, | 
					
						
							|  |  |  |  | 		Q = 0x10, | 
					
						
							|  |  |  |  | 		W = 0x11, | 
					
						
							|  |  |  |  | 		E = 0x12, | 
					
						
							|  |  |  |  | 		R = 0x13, | 
					
						
							|  |  |  |  | 		T = 0x14, | 
					
						
							|  |  |  |  | 		Y = 0x15, | 
					
						
							|  |  |  |  | 		U = 0x16, | 
					
						
							|  |  |  |  | 		I = 0x17, | 
					
						
							|  |  |  |  | 		O = 0x18, | 
					
						
							|  |  |  |  | 		P = 0x19, | 
					
						
							|  |  |  |  | 		A = 0x1E, | 
					
						
							|  |  |  |  | 		S = 0x1F, | 
					
						
							|  |  |  |  | 		D = 0x20, | 
					
						
							|  |  |  |  | 		F = 0x21, | 
					
						
							|  |  |  |  | 		G = 0x22, | 
					
						
							|  |  |  |  | 		H = 0x23, | 
					
						
							|  |  |  |  | 		J = 0x24, | 
					
						
							|  |  |  |  | 		K = 0x25, | 
					
						
							|  |  |  |  | 		L = 0x26, | 
					
						
							|  |  |  |  | 		Z = 0x2C, | 
					
						
							|  |  |  |  | 		X = 0x2D, | 
					
						
							|  |  |  |  | 		C = 0x2E, | 
					
						
							|  |  |  |  | 		V = 0x2F, | 
					
						
							|  |  |  |  | 		B = 0x30, | 
					
						
							|  |  |  |  | 		N = 0x31, | 
					
						
							|  |  |  |  | 		M = 0x32, | 
					
						
							|  |  |  |  | 		NUM1 = 0x02, | 
					
						
							|  |  |  |  | 		NUM2 = 0x03, | 
					
						
							|  |  |  |  | 		NUM3 = 0x04, | 
					
						
							|  |  |  |  | 		NUM4 = 0x05, | 
					
						
							|  |  |  |  | 		NUM5 = 0x06, | 
					
						
							|  |  |  |  | 		NUM6 = 0x07, | 
					
						
							|  |  |  |  | 		NUM7 = 0x08, | 
					
						
							|  |  |  |  | 		NUM8 = 0x09, | 
					
						
							|  |  |  |  | 		NUM9 = 0x0A, | 
					
						
							|  |  |  |  | 		NUM0 = 0x0B, | 
					
						
							|  |  |  |  | 		NUMPAD7 = 0x47, | 
					
						
							|  |  |  |  | 		NUMPAD8 = 0x48, | 
					
						
							|  |  |  |  | 		NUMPAD9 = 0x49, | 
					
						
							|  |  |  |  | 		NUMPAD4 = 0x4B, | 
					
						
							|  |  |  |  | 		NUMPAD5 = 0x4C, | 
					
						
							|  |  |  |  | 		NUMPAD6 = 0x4D, | 
					
						
							|  |  |  |  | 		NUMPAD1 = 0x4F, | 
					
						
							|  |  |  |  | 		NUMPAD2 = 0x50, | 
					
						
							|  |  |  |  | 		NUMPAD3 = 0x51, | 
					
						
							|  |  |  |  | 		NUMPAD0 = 0x52 | 
					
						
							|  |  |  |  | 	}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 14:34:33 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											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-05-18 23:56:36 +08:00
										 |  |  |  | 	static bool isDown( | 
					
						
							|  |  |  |  | 		Key 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-05-18 23:56:36 +08:00
										 |  |  |  | 	static bool isPress( | 
					
						
							|  |  |  |  | 		Key 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-05-18 23:56:36 +08:00
										 |  |  |  | 	static bool isRelease( | 
					
						
							|  |  |  |  | 		Key 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-05-18 23:56:36 +08:00
										 |  |  |  | 	static bool isDown( | 
					
						
							|  |  |  |  | 		Mouse 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-05-18 23:56:36 +08:00
										 |  |  |  | 	static bool isPress( | 
					
						
							|  |  |  |  | 		Mouse 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-05-18 23:56:36 +08:00
										 |  |  |  | 	static bool isRelease( | 
					
						
							|  |  |  |  | 		Mouse 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-02-27 21:07:43 +08:00
										 |  |  |  | 	static 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-02-27 21:07:43 +08:00
										 |  |  |  | 	static 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-02-07 16:37:12 +08:00
										 |  |  |  | 	static 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-02-27 21:07:43 +08:00
										 |  |  |  | 	static 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-02-27 21:07:43 +08:00
										 |  |  |  | 	static 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-02-27 21:07:43 +08:00
										 |  |  |  | 	static double getMouseDeltaZ(); | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							|  |  |  |  | 	// <20><>ʼ<EFBFBD><CABC> DirectInput <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
 | 
					
						
							| 
									
										
										
										
											2018-02-01 22:07:44 +08:00
										 |  |  |  | 	static bool __init(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-11 23:56:40 +08:00
										 |  |  |  | 	// ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 	static void __update(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ˢ<><CBA2><EFBFBD>豸״̬
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	static void __updateDeviceState(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ж<><D0B6> DirectInput
 | 
					
						
							|  |  |  |  | 	static void __uninit(); | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>Ⱦ<EFBFBD><C8BE>
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | class Renderer | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 	friend Game; | 
					
						
							|  |  |  |  | 	friend Window; | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-04-22 13:15:57 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 	static Color getBackgroundColor(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20>ı<DEB8><C4B1><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 	static void setBackgroundColor( | 
					
						
							| 
									
										
										
										
											2018-04-22 13:15:57 +08:00
										 |  |  |  | 		Color color | 
					
						
							| 
									
										
										
										
											2017-10-29 23:48:32 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-17 11:41:33 +08:00
										 |  |  |  | 	// <20><>ʾ FPS
 | 
					
						
							|  |  |  |  | 	static void showFps( | 
					
						
							|  |  |  |  | 		bool show = true | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 23:09:59 +08:00
										 |  |  |  | 	// <20><>ȡϵͳ DPI <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static float getDpiScaleX(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡϵͳ DPI <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static float getDpiScaleY(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// <20><>ȡ ID2D1Factory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static ID2D1Factory * getID2D1Factory(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1HwndRenderTarget <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static ID2D1HwndRenderTarget * getRenderTarget(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1SolidColorBrush <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static ID2D1SolidColorBrush * getSolidColorBrush(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ IWICImagingFactory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static IWICImagingFactory * getIWICImagingFactory(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ IDWriteFactory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static IDWriteFactory * getIDWriteFactory(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 23:09:59 +08:00
										 |  |  |  | 	// <20><>ȡ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>
 | 
					
						
							|  |  |  |  | 	static CustomTextRenderer * getCustomTextRenderer(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | private: | 
					
						
							|  |  |  |  | 	// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void __render(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><DEB9><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	static bool __createDeviceIndependentResources(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	static bool __createDeviceResources(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ɾ<><C9BE><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	static void __discardDeviceResources(); | 
					
						
							| 
									
										
										
										
											2017-10-14 01:07:34 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	static void __discardResources(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
 | 
					
						
							|  |  |  |  | class GC | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	friend Game; | 
					
						
							|  |  |  |  | 	friend Object; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | public: | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>Ķ<EFBFBD><C4B6><EFBFBD>
 | 
					
						
							|  |  |  |  | 	template <typename Type, typename... Args> | 
					
						
							|  |  |  |  | 	static inline Type * create(Args&&... args) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		auto newObj = new (std::nothrow) Type(std::forward<Args>(args)...); | 
					
						
							|  |  |  |  | 		if (newObj) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			newObj->autorelease(); | 
					
						
							|  |  |  |  | 			return newObj; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		return nullptr; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	template <typename Type> | 
					
						
							|  |  |  |  | 	static inline void retain(Type*& p) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (p != nullptr) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			p->retain(); | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ͷŶ<CDB7><C5B6><EFBFBD>
 | 
					
						
							|  |  |  |  | 	template <typename Type> | 
					
						
							|  |  |  |  | 	static inline void release(Type*& p) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (p != nullptr) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			p->release(); | 
					
						
							|  |  |  |  | 			p = nullptr; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ֪ͨ GC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void notify(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void flush(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GC
 | 
					
						
							|  |  |  |  | 	static void __add( | 
					
						
							|  |  |  |  | 		Object * pObject | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD> GC
 | 
					
						
							|  |  |  |  | 	static void __update(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
 | 
					
						
							|  |  |  |  | 	static void __clear(); | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | } |