| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:17:07 +08:00
										 |  |  |  | #include "e2dimpl.h"
 | 
					
						
							| 
									
										
										
										
											2018-09-06 23:26:32 +08:00
										 |  |  |  | #include "e2dobject.h"
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:17:07 +08:00
										 |  |  |  | #include "e2dtransition.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
										 |  |  |  | namespace e2d | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	class Window | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +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> */ | 
					
						
							|  |  |  |  | 			ArrowWait	/* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Сɳ© */ | 
					
						
							|  |  |  |  | 		}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
 | 
					
						
							|  |  |  |  | 		enum class PopupStyle : int | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			Info,		/* <20><>ʾ */ | 
					
						
							|  |  |  |  | 			Warning,	/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 			Error		/* <20><><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	public: | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 		static Window * GetInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 		static void DestroyInstance(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		const String& GetTitle() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		int GetWidth() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
 | 
					
						
							|  |  |  |  | 		int GetHeight() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 		Size GetSize() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> DPI
 | 
					
						
							|  |  |  |  | 		float GetDpi() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
 | 
					
						
							|  |  |  |  | 		HWND GetHWnd(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20>Ĵ<DEB8><C4B4><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 		void SetSize( | 
					
						
							|  |  |  |  | 			int width,			/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 			int height			/* <20><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD> */ | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		void SetTitle( | 
					
						
							|  |  |  |  | 			const String& title	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ͼ<EFBFBD><CDBC>
 | 
					
						
							|  |  |  |  | 		void SetIcon( | 
					
						
							|  |  |  |  | 			int icon_id | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ
 | 
					
						
							|  |  |  |  | 		void SetCursor( | 
					
						
							|  |  |  |  | 			Cursor cursor | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><EFBFBD><F2BFAABB><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
 | 
					
						
							|  |  |  |  | 		void SetConsoleEnabled( | 
					
						
							|  |  |  |  | 			bool enabled | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>뷨
 | 
					
						
							|  |  |  |  | 		void SetTypewritingEnabled( | 
					
						
							|  |  |  |  | 			bool enabled | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 17:24:44 +08:00
										 |  |  |  | 		// <20><><EFBFBD>ⴰ<EFBFBD><E2B4B0><EFBFBD>Ƿ<EFBFBD>Ψһ
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false ˵<><CBB5><EFBFBD><EFBFBD>Ϸ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>Է<EFBFBD>ֹ<EFBFBD>û<EFBFBD>ͬʱ<CDAC><EFBFBD><F2BFAAB6><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		bool CheckUnique(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +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>ť
 | 
					
						
							|  |  |  |  | 		bool Popup( | 
					
						
							|  |  |  |  | 			const String& text,					/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 			const String& title,				/* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */ | 
					
						
							|  |  |  |  | 			PopupStyle style = PopupStyle::Info,/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ */ | 
					
						
							|  |  |  |  | 			bool has_cancel = false				/* <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ť */ | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					
						
							|  |  |  |  | 		void Poll(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	private: | 
					
						
							|  |  |  |  | 		Window(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		~Window(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		E2D_DISABLE_COPY(Window); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD>ݿͻ<DDBF><CDBB><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		Rect Locate( | 
					
						
							|  |  |  |  | 			int width, | 
					
						
							|  |  |  |  | 			int height | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// Win32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		static LRESULT CALLBACK WndProc( | 
					
						
							|  |  |  |  | 			HWND hWnd, | 
					
						
							|  |  |  |  | 			UINT msg, | 
					
						
							|  |  |  |  | 			WPARAM w_param, | 
					
						
							|  |  |  |  | 			LPARAM l_param | 
					
						
							|  |  |  |  | 		); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	private: | 
					
						
							|  |  |  |  | 		HWND	hWnd_; | 
					
						
							|  |  |  |  | 		MSG		msg_; | 
					
						
							|  |  |  |  | 		int		width_; | 
					
						
							|  |  |  |  | 		int		height_; | 
					
						
							|  |  |  |  | 		String	title_; | 
					
						
							|  |  |  |  | 		int		icon_id_; | 
					
						
							|  |  |  |  | 		float	dpi_; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		static Window * instance_; | 
					
						
							| 
									
										
										
										
											2018-05-17 15:22:14 +08:00
										 |  |  |  | 	}; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-17 00:35:27 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	// <20><>Ⱦ<EFBFBD><C8BE>
 | 
					
						
							|  |  |  |  | 	class Renderer | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	public: | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1>Ⱦ<EFBFBD><C8BE>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 		static Renderer * GetInstance(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 		static void DestroyInstance(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 		Color GetBackgroundColor(); | 
					
						
							| 
									
										
										
										
											2018-04-22 13:15:57 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20>ı<DEB8><C4B1><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 		void SetBackgroundColor( | 
					
						
							|  |  |  |  | 			const Color& color | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-10-29 23:48:32 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FPS
 | 
					
						
							|  |  |  |  | 		// Ĭ<>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		void ShowFps( | 
					
						
							|  |  |  |  | 			bool show | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-08-19 15:11:20 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ʼ<EFBFBD><CABC>Ⱦ
 | 
					
						
							|  |  |  |  | 		void BeginDraw(); | 
					
						
							| 
									
										
										
										
											2018-08-28 00:06:10 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ
 | 
					
						
							|  |  |  |  | 		void EndDraw(); | 
					
						
							| 
									
										
										
										
											2018-08-28 00:06:10 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>
 | 
					
						
							|  |  |  |  | 		E2DTextRenderer * GetTextRenderer(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ ID2D1HwndRenderTarget <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		ID2D1HwndRenderTarget * GetRenderTarget(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ ID2D1SolidColorBrush <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		ID2D1SolidColorBrush * GetSolidBrush(); | 
					
						
							| 
									
										
										
										
											2018-08-02 00:27:45 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ ID2D1Factory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		static ID2D1Factory * GetFactory(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ IWICImagingFactory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		static IWICImagingFactory * GetImagingFactory(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ IDWriteFactory <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		static IDWriteFactory * GetWriteFactory(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ Miter <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
 | 
					
						
							|  |  |  |  | 		static ID2D1StrokeStyle * GetMiterStrokeStyle(); | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ Bevel <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
 | 
					
						
							|  |  |  |  | 		static ID2D1StrokeStyle * GetBevelStrokeStyle(); | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ Round <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
 | 
					
						
							|  |  |  |  | 		static ID2D1StrokeStyle * GetRoundStrokeStyle(); | 
					
						
							| 
									
										
										
										
											2018-05-24 17:19:54 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		Renderer(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		~Renderer(); | 
					
						
							| 
									
										
										
										
											2018-08-15 23:30:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		E2D_DISABLE_COPY(Renderer); | 
					
						
							| 
									
										
										
										
											2018-08-15 23:30:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		bool					show_fps_; | 
					
						
							|  |  |  |  | 		int						render_times_; | 
					
						
							|  |  |  |  | 		Time					last_render_time_; | 
					
						
							|  |  |  |  | 		D2D1_COLOR_F			clear_color_; | 
					
						
							|  |  |  |  | 		E2DTextRenderer*		text_renderer_; | 
					
						
							|  |  |  |  | 		IDWriteTextFormat*		fps_text_format_; | 
					
						
							|  |  |  |  | 		IDWriteTextLayout*		fps_text_layout_; | 
					
						
							|  |  |  |  | 		ID2D1SolidColorBrush*	solid_brush_; | 
					
						
							|  |  |  |  | 		ID2D1HwndRenderTarget*	render_target_; | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		static ID2D1Factory*		factory_; | 
					
						
							|  |  |  |  | 		static IWICImagingFactory*	imaging_factory_; | 
					
						
							|  |  |  |  | 		static IDWriteFactory*		write_factory_; | 
					
						
							|  |  |  |  | 		static ID2D1StrokeStyle*	miter_stroke_style_; | 
					
						
							|  |  |  |  | 		static ID2D1StrokeStyle*	bevel_stroke_style_; | 
					
						
							|  |  |  |  | 		static ID2D1StrokeStyle*	round_stroke_style_; | 
					
						
							|  |  |  |  | 		static Renderer *			instance_; | 
					
						
							|  |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>豸
 | 
					
						
							|  |  |  |  | 	class Input | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	public: | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>豸ʵ<E8B1B8><CAB5>
 | 
					
						
							|  |  |  |  | 		static Input * GetInstance(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ʵ<E8B1B8><CAB5>
 | 
					
						
							|  |  |  |  | 		static void DestroyInstance(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		bool IsDown( | 
					
						
							|  |  |  |  | 			KeyCode key | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		bool IsDown( | 
					
						
							|  |  |  |  | 			MouseCode code | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							|  |  |  |  | 		float GetMouseX(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							|  |  |  |  | 		float GetMouseY(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
 | 
					
						
							|  |  |  |  | 		Point GetMousePos(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		float GetMouseDeltaX(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		float GetMouseDeltaY(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +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>
 | 
					
						
							|  |  |  |  | 		float GetMouseDeltaZ(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸״̬
 | 
					
						
							|  |  |  |  | 		void Update(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		Input(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		~Input(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		E2D_DISABLE_COPY(Input); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		IDirectInput8W * direct_input_; | 
					
						
							|  |  |  |  | 		IDirectInputDevice8W*	keyboard_device_; | 
					
						
							|  |  |  |  | 		IDirectInputDevice8W*	mouse_device_; | 
					
						
							|  |  |  |  | 		DIMOUSESTATE			mouse_state_; | 
					
						
							|  |  |  |  | 		char					key_buffer_[256]; | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		static Input * instance_; | 
					
						
							|  |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	// <20><>Ƶ<EFBFBD>豸
 | 
					
						
							|  |  |  |  | 	class Audio | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	public: | 
					
						
							|  |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1>Ƶ<EFBFBD>豸ʵ<E8B1B8><CAB5>
 | 
					
						
							|  |  |  |  | 		static Audio * GetInstance(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 		static void DestroyInstance(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ XAudio2 ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		IXAudio2 * GetXAudio2(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ MasteringVoice ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		IXAudio2MasteringVoice* GetMasteringVoice(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		Audio(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		virtual ~Audio(); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		E2D_DISABLE_COPY(Audio); | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		IXAudio2 * x_audio2_; | 
					
						
							|  |  |  |  | 		IXAudio2MasteringVoice*	mastering_voice_; | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		static Audio * instance_; | 
					
						
							|  |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2018-09-02 14:30:48 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	// <20><>Ϸ
 | 
					
						
							|  |  |  |  | 	class Game | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	public: | 
					
						
							|  |  |  |  | 		// <20><>ȡ Game ʵ<><CAB5>
 | 
					
						
							|  |  |  |  | 		static Game * GetInstance(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 		static void DestroyInstance(); | 
					
						
							| 
									
										
										
										
											2018-08-15 23:30:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							|  |  |  |  | 		void Start(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ͣ<EFBFBD><CDA3>Ϸ
 | 
					
						
							|  |  |  |  | 		void Pause(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							|  |  |  |  | 		void Resume(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
 | 
					
						
							|  |  |  |  | 		void Quit(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
 | 
					
						
							|  |  |  |  | 		bool IsPaused(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ
 | 
					
						
							|  |  |  |  | 		void EnterScene( | 
					
						
							|  |  |  |  | 			Scene * scene			/* <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */ | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ
 | 
					
						
							|  |  |  |  | 		void EnterScene( | 
					
						
							|  |  |  |  | 			Transition * transition	/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		Scene * GetCurrentScene(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		bool IsTransitioning() const; | 
					
						
							| 
									
										
										
										
											2018-08-15 23:30:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><><EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		void UpdateScene(); | 
					
						
							| 
									
										
										
										
											2018-08-15 23:30:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		void DrawScene(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	protected: | 
					
						
							|  |  |  |  | 		Game(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		~Game(); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		E2D_DISABLE_COPY(Game); | 
					
						
							| 
									
										
										
										
											2018-08-15 00:06:03 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	private: | 
					
						
							|  |  |  |  | 		bool			quit_; | 
					
						
							|  |  |  |  | 		bool			paused_; | 
					
						
							|  |  |  |  | 		Scene*			curr_scene_; | 
					
						
							|  |  |  |  | 		Scene*			next_scene_; | 
					
						
							|  |  |  |  | 		Transition*		transition_; | 
					
						
							| 
									
										
										
										
											2018-09-04 22:42:34 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		static Game * instance_; | 
					
						
							|  |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	class GC | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	public: | 
					
						
							|  |  |  |  | 		// <20><>ȡ GC ʵ<><CAB5>
 | 
					
						
							|  |  |  |  | 		static GC * GetInstance(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20>Զ<EFBFBD><D4B6>ͷ<EFBFBD>
 | 
					
						
							|  |  |  |  | 		void AutoRelease( | 
					
						
							|  |  |  |  | 			Ref* ref | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// <20><>ȫ<EFBFBD><C8AB><EFBFBD>ͷŶ<CDB7><C5B6><EFBFBD>
 | 
					
						
							|  |  |  |  | 		void SafeRelease( | 
					
						
							|  |  |  |  | 			Ref* ref | 
					
						
							|  |  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-07-07 01:43:41 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
 | 
					
						
							|  |  |  |  | 		void Flush(); | 
					
						
							| 
									
										
										
										
											2018-07-05 22:05:23 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	private: | 
					
						
							|  |  |  |  | 		GC(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		~GC(); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 		E2D_DISABLE_COPY(GC); | 
					
						
							| 
									
										
										
										
											2018-07-03 18:16:26 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | 	private: | 
					
						
							|  |  |  |  | 		bool notifyed_; | 
					
						
							|  |  |  |  | 		bool cleanup_; | 
					
						
							|  |  |  |  | 		std::set<Ref*> pool_; | 
					
						
							|  |  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2018-05-19 01:10:37 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 13:38:30 +08:00
										 |  |  |  | } |