Refactoring : project files
This commit is contained in:
		
							parent
							
								
									65ba8e96d2
								
							
						
					
					
						commit
						42ac308278
					
				
							
								
								
									
										234
									
								
								core/e2devent.h
								
								
								
								
							
							
						
						
									
										234
									
								
								core/e2devent.h
								
								
								
								
							|  | @ -5,135 +5,135 @@ namespace e2d | |||
| { | ||||
| 
 | ||||
| 
 | ||||
| // 按键消息
 | ||||
| class KeyEvent | ||||
| { | ||||
| public: | ||||
| 	// 按键消息类型
 | ||||
| 	enum class Type : int | ||||
| 	// 按键消息
 | ||||
| 	class KeyEvent | ||||
| 	{ | ||||
| 		Down = 0x0100,	// 按下
 | ||||
| 		Up				// 抬起
 | ||||
| 	public: | ||||
| 		// 按键消息类型
 | ||||
| 		enum class Type : int | ||||
| 		{ | ||||
| 			Down = 0x0100,	// 按下
 | ||||
| 			Up				// 抬起
 | ||||
| 		}; | ||||
| 
 | ||||
| 	public: | ||||
| 		explicit KeyEvent( | ||||
| 			HWND hWnd, | ||||
| 			UINT message, | ||||
| 			WPARAM w_param, | ||||
| 			LPARAM l_param | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取按键键值
 | ||||
| 		KeyCode GetCode() const; | ||||
| 
 | ||||
| 		// 获取按键次数
 | ||||
| 		int GetCount() const; | ||||
| 
 | ||||
| 		// 获取事件类型
 | ||||
| 		KeyEvent::Type GetType() const; | ||||
| 
 | ||||
| 		// VK 键值转换
 | ||||
| 		static KeyCode ToKeyCode( | ||||
| 			WPARAM w_param | ||||
| 		); | ||||
| 
 | ||||
| 	protected: | ||||
| 		int				count_; | ||||
| 		KeyCode			code_; | ||||
| 		KeyEvent::Type	type_; | ||||
| 	}; | ||||
| 
 | ||||
| public: | ||||
| 	explicit KeyEvent( | ||||
| 		HWND hWnd, | ||||
| 		UINT message, | ||||
| 		WPARAM w_param, | ||||
| 		LPARAM l_param | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取按键键值
 | ||||
| 	KeyCode GetCode() const; | ||||
| 
 | ||||
| 	// 获取按键次数
 | ||||
| 	int GetCount() const; | ||||
| 
 | ||||
| 	// 获取事件类型
 | ||||
| 	KeyEvent::Type GetType() const; | ||||
| 
 | ||||
| 	// VK 键值转换
 | ||||
| 	static KeyCode ToKeyCode( | ||||
| 		WPARAM w_param | ||||
| 	); | ||||
| 
 | ||||
| protected: | ||||
| 	int				count_; | ||||
| 	KeyCode			code_; | ||||
| 	KeyEvent::Type	type_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 鼠标消息
 | ||||
| class MouseEvent | ||||
| { | ||||
| public: | ||||
| 	// 鼠标消息类型
 | ||||
| 	enum class Type : int | ||||
| 	// 鼠标消息
 | ||||
| 	class MouseEvent | ||||
| 	{ | ||||
| 		Move = 0x0200,		// 鼠标移动
 | ||||
| 		LeftDown,			// 鼠标左键按下
 | ||||
| 		LeftUp,				// 鼠标左键抬起
 | ||||
| 		LeftDoubleClick,	// 鼠标左键双击
 | ||||
| 		RightDown,			// 鼠标右键按下
 | ||||
| 		RightUp,			// 鼠标右键抬起
 | ||||
| 		RightDoubleClick,	// 鼠标右键双击
 | ||||
| 		MiddleDown,			// 鼠标中键按下
 | ||||
| 		MiddleUp,			// 鼠标中键抬起
 | ||||
| 		MiddleDoubleClick,	// 鼠标中键双击
 | ||||
| 		Wheel				// 滑动滚轮
 | ||||
| 	public: | ||||
| 		// 鼠标消息类型
 | ||||
| 		enum class Type : int | ||||
| 		{ | ||||
| 			Move = 0x0200,		// 鼠标移动
 | ||||
| 			LeftDown,			// 鼠标左键按下
 | ||||
| 			LeftUp,				// 鼠标左键抬起
 | ||||
| 			LeftDoubleClick,	// 鼠标左键双击
 | ||||
| 			RightDown,			// 鼠标右键按下
 | ||||
| 			RightUp,			// 鼠标右键抬起
 | ||||
| 			RightDoubleClick,	// 鼠标右键双击
 | ||||
| 			MiddleDown,			// 鼠标中键按下
 | ||||
| 			MiddleUp,			// 鼠标中键抬起
 | ||||
| 			MiddleDoubleClick,	// 鼠标中键双击
 | ||||
| 			Wheel				// 滑动滚轮
 | ||||
| 		}; | ||||
| 
 | ||||
| 	public: | ||||
| 		explicit MouseEvent( | ||||
| 			HWND hWnd, | ||||
| 			UINT message, | ||||
| 			WPARAM w_param, | ||||
| 			LPARAM l_param, | ||||
| 			float dpi | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取鼠标横坐标
 | ||||
| 		float GetX() const; | ||||
| 
 | ||||
| 		// 获取鼠标纵坐标
 | ||||
| 		float GetY() const; | ||||
| 
 | ||||
| 		// 获取鼠标坐标
 | ||||
| 		Point GetPos() const; | ||||
| 
 | ||||
| 		// 获取事件类型
 | ||||
| 		MouseEvent::Type GetType() const; | ||||
| 
 | ||||
| 		float GetWheelDelta() const; | ||||
| 
 | ||||
| 		// 鼠标左键是否按下
 | ||||
| 		bool IsLButtonDown() const; | ||||
| 
 | ||||
| 		// 鼠标右键是否按下
 | ||||
| 		bool IsRButtonDown() const; | ||||
| 
 | ||||
| 		// 鼠标中键是否按下
 | ||||
| 		bool IsMButtonDown() const; | ||||
| 
 | ||||
| 		// Shift 键是否按下
 | ||||
| 		bool IsShiftDown() const; | ||||
| 
 | ||||
| 		// Ctrl 键是否按下
 | ||||
| 		bool IsCtrlDown() const; | ||||
| 
 | ||||
| 	protected: | ||||
| 		UINT	message_; | ||||
| 		WPARAM	w_param_; | ||||
| 		LPARAM	l_param_; | ||||
| 		Point	pos_; | ||||
| 		MouseEvent::Type type_; | ||||
| 	}; | ||||
| 
 | ||||
| public: | ||||
| 	explicit MouseEvent( | ||||
| 		HWND hWnd, | ||||
| 		UINT message, | ||||
| 		WPARAM w_param, | ||||
| 		LPARAM l_param, | ||||
| 		float dpi | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取鼠标横坐标
 | ||||
| 	float GetX() const; | ||||
| 	// 碰撞事件
 | ||||
| 	class Collision | ||||
| 	{ | ||||
| 	public: | ||||
| 		Collision(); | ||||
| 
 | ||||
| 	// 获取鼠标纵坐标
 | ||||
| 	float GetY() const; | ||||
| 		explicit Collision( | ||||
| 			Node* node, | ||||
| 			Collider::Relation relation | ||||
| 		); | ||||
| 
 | ||||
| 	// 获取鼠标坐标
 | ||||
| 	Point GetPos() const; | ||||
| 		~Collision(); | ||||
| 
 | ||||
| 	// 获取事件类型
 | ||||
| 	MouseEvent::Type GetType() const; | ||||
| 		// 获取发生碰撞节点
 | ||||
| 		Node* GetNode() const; | ||||
| 
 | ||||
| 	float GetWheelDelta() const; | ||||
| 		// 获取交集关系
 | ||||
| 		Collider::Relation GetRelation() const; | ||||
| 
 | ||||
| 	// 鼠标左键是否按下
 | ||||
| 	bool IsLButtonDown() const; | ||||
| 
 | ||||
| 	// 鼠标右键是否按下
 | ||||
| 	bool IsRButtonDown() const; | ||||
| 
 | ||||
| 	// 鼠标中键是否按下
 | ||||
| 	bool IsMButtonDown() const; | ||||
| 
 | ||||
| 	// Shift 键是否按下
 | ||||
| 	bool IsShiftDown() const; | ||||
| 
 | ||||
| 	// Ctrl 键是否按下
 | ||||
| 	bool IsCtrlDown() const; | ||||
| 
 | ||||
| protected: | ||||
| 	UINT	message_; | ||||
| 	WPARAM	w_param_; | ||||
| 	LPARAM	l_param_; | ||||
| 	Point	pos_; | ||||
| 	MouseEvent::Type type_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 碰撞事件
 | ||||
| class Collision | ||||
| { | ||||
| public: | ||||
| 	Collision(); | ||||
| 
 | ||||
| 	explicit Collision( | ||||
| 		Node* node, | ||||
| 		Collider::Relation relation | ||||
| 	); | ||||
| 
 | ||||
| 	~Collision(); | ||||
| 
 | ||||
| 	// 获取发生碰撞节点
 | ||||
| 	Node* GetNode() const; | ||||
| 
 | ||||
| 	// 获取交集关系
 | ||||
| 	Collider::Relation GetRelation() const; | ||||
| 
 | ||||
| protected: | ||||
| 	Node * node_; | ||||
| 	Collider::Relation relation_; | ||||
| }; | ||||
| 	protected: | ||||
| 		Node * node_; | ||||
| 		Collider::Relation relation_; | ||||
| 	}; | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										360
									
								
								core/e2dimpl.h
								
								
								
								
							
							
						
						
									
										360
									
								
								core/e2dimpl.h
								
								
								
								
							|  | @ -5,191 +5,191 @@ namespace e2d | |||
| { | ||||
| 
 | ||||
| 
 | ||||
| class Music; | ||||
| 	class Music; | ||||
| 
 | ||||
| // 音源回调
 | ||||
| class VoiceCallback  | ||||
| 	: public IXAudio2VoiceCallback | ||||
| { | ||||
| public: | ||||
| 	VoiceCallback(); | ||||
| 
 | ||||
| 	~VoiceCallback(); | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) {} | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) {} | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnStreamEnd) (THIS); | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) {} | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext); | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext); | ||||
| 
 | ||||
| 	STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {} | ||||
| 
 | ||||
| 	STDMETHOD_(void, SetCallbackOnStreamEnd) (THIS_ const Function& func); | ||||
| 
 | ||||
| 	STDMETHOD_(void, SetCallbackOnLoopEnd) (THIS_ const Function& func); | ||||
| 
 | ||||
| protected: | ||||
| 	Function loop_end_callback_; | ||||
| 	Function stream_end_callback_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 文字渲染器
 | ||||
| class E2DTextRenderer  | ||||
| 	: public IDWriteTextRenderer | ||||
| { | ||||
| private: | ||||
| 	E2DTextRenderer(); | ||||
| 
 | ||||
| 	~E2DTextRenderer(); | ||||
| 
 | ||||
| public: | ||||
| 	static HRESULT Create( | ||||
| 		E2DTextRenderer** ppTextRenderer, | ||||
| 		ID2D1Factory* pD2DFactory, | ||||
| 		ID2D1HwndRenderTarget* pRT, | ||||
| 		ID2D1SolidColorBrush* pBrush | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD_(void, SetTextStyle)( | ||||
| 		CONST D2D1_COLOR_F &fillColor, | ||||
| 		BOOL outline, | ||||
| 		CONST D2D1_COLOR_F &outline_color, | ||||
| 		FLOAT outline_width, | ||||
| 		D2D1_LINE_JOIN outlineJoin | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(DrawGlyphRun)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		FLOAT baselineOriginX, | ||||
| 		FLOAT baselineOriginY, | ||||
| 		DWRITE_MEASURING_MODE measuringMode, | ||||
| 		__in DWRITE_GLYPH_RUN const* glyphRun, | ||||
| 		__in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription, | ||||
| 		IUnknown* clientDrawingEffect | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(DrawUnderline)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		FLOAT baselineOriginX, | ||||
| 		FLOAT baselineOriginY, | ||||
| 		__in DWRITE_UNDERLINE const* underline, | ||||
| 		IUnknown* clientDrawingEffect | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(DrawStrikethrough)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		FLOAT baselineOriginX, | ||||
| 		FLOAT baselineOriginY, | ||||
| 		__in DWRITE_STRIKETHROUGH const* strikethrough, | ||||
| 		IUnknown* clientDrawingEffect | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(DrawInlineObject)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		FLOAT originX, | ||||
| 		FLOAT originY, | ||||
| 		IDWriteInlineObject* inlineObject, | ||||
| 		BOOL IsSideways, | ||||
| 		BOOL IsRightToLeft, | ||||
| 		IUnknown* clientDrawingEffect | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(IsPixelSnappingDisabled)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		__out BOOL* isDisabled | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(GetCurrentTransform)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		__out DWRITE_MATRIX* transform | ||||
| 	); | ||||
| 
 | ||||
| 	STDMETHOD(GetPixelsPerDip)( | ||||
| 		__maybenull void* clientDrawingContext, | ||||
| 		__out FLOAT* pixelsPerDip | ||||
| 	); | ||||
| 
 | ||||
| public: | ||||
| 	unsigned long STDMETHODCALLTYPE AddRef(); | ||||
| 	unsigned long STDMETHODCALLTYPE Release(); | ||||
| 	HRESULT STDMETHODCALLTYPE QueryInterface( | ||||
| 		IID const& riid, | ||||
| 		void** ppvObject | ||||
| 	); | ||||
| 
 | ||||
| private: | ||||
| 	unsigned long cRefCount_; | ||||
| 	D2D1_COLOR_F sFillColor_; | ||||
| 	D2D1_COLOR_F sOutlineColor_; | ||||
| 	FLOAT fOutlineWidth; | ||||
| 	BOOL bShowOutline_; | ||||
| 	ID2D1Factory* pD2DFactory_; | ||||
| 	ID2D1HwndRenderTarget* pRT_; | ||||
| 	ID2D1SolidColorBrush* pBrush_; | ||||
| 	ID2D1StrokeStyle * pCurrStrokeStyle_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 异常
 | ||||
| class Exception | ||||
| { | ||||
| public: | ||||
| 	Exception() E2D_NOEXCEPT; | ||||
| 
 | ||||
| 	explicit Exception(const char * message) E2D_NOEXCEPT; | ||||
| 
 | ||||
| 	Exception(Exception const& other) E2D_NOEXCEPT; | ||||
| 
 | ||||
| 	virtual ~Exception() E2D_NOEXCEPT; | ||||
| 
 | ||||
| 	Exception& operator=(Exception const& other) E2D_NOEXCEPT; | ||||
| 
 | ||||
| 	// 获取异常信息
 | ||||
| 	virtual const char * GetMsg() const; | ||||
| 
 | ||||
| private: | ||||
| 	const char * message_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 系统异常
 | ||||
| class SystemException | ||||
| 	: public Exception | ||||
| { | ||||
| public: | ||||
| 	SystemException() E2D_NOEXCEPT; | ||||
| 
 | ||||
| 	explicit SystemException(const char * message) E2D_NOEXCEPT; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| template<class Interface> | ||||
| inline void SafeRelease(Interface*& p) | ||||
| { | ||||
| 	if (p != nullptr) | ||||
| 	// 音源回调
 | ||||
| 	class VoiceCallback | ||||
| 		: public IXAudio2VoiceCallback | ||||
| 	{ | ||||
| 		p->Release(); | ||||
| 		p = nullptr; | ||||
| 	} | ||||
| } | ||||
| 	public: | ||||
| 		VoiceCallback(); | ||||
| 
 | ||||
| 		~VoiceCallback(); | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) {} | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) {} | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnStreamEnd) (THIS); | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) {} | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext); | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext); | ||||
| 
 | ||||
| 		STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {} | ||||
| 
 | ||||
| 		STDMETHOD_(void, SetCallbackOnStreamEnd) (THIS_ const Function& func); | ||||
| 
 | ||||
| 		STDMETHOD_(void, SetCallbackOnLoopEnd) (THIS_ const Function& func); | ||||
| 
 | ||||
| 	protected: | ||||
| 		Function loop_end_callback_; | ||||
| 		Function stream_end_callback_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| inline void ThrowIfFailed(HRESULT hr) | ||||
| { | ||||
| 	if (FAILED(hr)) | ||||
| 	// 文字渲染器
 | ||||
| 	class E2DTextRenderer | ||||
| 		: public IDWriteTextRenderer | ||||
| 	{ | ||||
| 		// 在此处设置断点以捕获 D2D API 异常.
 | ||||
| 		static char s_str[64] = {}; | ||||
| 		sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast<unsigned int>(hr)); | ||||
| 		throw SystemException(s_str); | ||||
| 	private: | ||||
| 		E2DTextRenderer(); | ||||
| 
 | ||||
| 		~E2DTextRenderer(); | ||||
| 
 | ||||
| 	public: | ||||
| 		static HRESULT Create( | ||||
| 			E2DTextRenderer** ppTextRenderer, | ||||
| 			ID2D1Factory* pD2DFactory, | ||||
| 			ID2D1HwndRenderTarget* pRT, | ||||
| 			ID2D1SolidColorBrush* pBrush | ||||
| 		); | ||||
| 
 | ||||
| 		STDMETHOD_(void, SetTextStyle)( | ||||
| 			CONST D2D1_COLOR_F &fillColor, | ||||
| 			BOOL outline, | ||||
| 			CONST D2D1_COLOR_F &outline_color, | ||||
| 			FLOAT outline_width, | ||||
| 			D2D1_LINE_JOIN outlineJoin | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(DrawGlyphRun)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			FLOAT baselineOriginX, | ||||
| 			FLOAT baselineOriginY, | ||||
| 			DWRITE_MEASURING_MODE measuringMode, | ||||
| 			__in DWRITE_GLYPH_RUN const* glyphRun, | ||||
| 			__in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription, | ||||
| 			IUnknown* clientDrawingEffect | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(DrawUnderline)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			FLOAT baselineOriginX, | ||||
| 			FLOAT baselineOriginY, | ||||
| 			__in DWRITE_UNDERLINE const* underline, | ||||
| 			IUnknown* clientDrawingEffect | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(DrawStrikethrough)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			FLOAT baselineOriginX, | ||||
| 			FLOAT baselineOriginY, | ||||
| 			__in DWRITE_STRIKETHROUGH const* strikethrough, | ||||
| 			IUnknown* clientDrawingEffect | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(DrawInlineObject)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			FLOAT originX, | ||||
| 			FLOAT originY, | ||||
| 			IDWriteInlineObject* inlineObject, | ||||
| 			BOOL IsSideways, | ||||
| 			BOOL IsRightToLeft, | ||||
| 			IUnknown* clientDrawingEffect | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(IsPixelSnappingDisabled)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			__out BOOL* isDisabled | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(GetCurrentTransform)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			__out DWRITE_MATRIX* transform | ||||
| 			); | ||||
| 
 | ||||
| 		STDMETHOD(GetPixelsPerDip)( | ||||
| 			__maybenull void* clientDrawingContext, | ||||
| 			__out FLOAT* pixelsPerDip | ||||
| 			); | ||||
| 
 | ||||
| 	public: | ||||
| 		unsigned long STDMETHODCALLTYPE AddRef(); | ||||
| 		unsigned long STDMETHODCALLTYPE Release(); | ||||
| 		HRESULT STDMETHODCALLTYPE QueryInterface( | ||||
| 			IID const& riid, | ||||
| 			void** ppvObject | ||||
| 		); | ||||
| 
 | ||||
| 	private: | ||||
| 		unsigned long cRefCount_; | ||||
| 		D2D1_COLOR_F sFillColor_; | ||||
| 		D2D1_COLOR_F sOutlineColor_; | ||||
| 		FLOAT fOutlineWidth; | ||||
| 		BOOL bShowOutline_; | ||||
| 		ID2D1Factory* pD2DFactory_; | ||||
| 		ID2D1HwndRenderTarget* pRT_; | ||||
| 		ID2D1SolidColorBrush* pBrush_; | ||||
| 		ID2D1StrokeStyle * pCurrStrokeStyle_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| 	// 异常
 | ||||
| 	class Exception | ||||
| 	{ | ||||
| 	public: | ||||
| 		Exception() E2D_NOEXCEPT; | ||||
| 
 | ||||
| 		explicit Exception(const char * message) E2D_NOEXCEPT; | ||||
| 
 | ||||
| 		Exception(Exception const& other) E2D_NOEXCEPT; | ||||
| 
 | ||||
| 		virtual ~Exception() E2D_NOEXCEPT; | ||||
| 
 | ||||
| 		Exception& operator=(Exception const& other) E2D_NOEXCEPT; | ||||
| 
 | ||||
| 		// 获取异常信息
 | ||||
| 		virtual const char * GetMsg() const; | ||||
| 
 | ||||
| 	private: | ||||
| 		const char * message_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| 	// 系统异常
 | ||||
| 	class SystemException | ||||
| 		: public Exception | ||||
| 	{ | ||||
| 	public: | ||||
| 		SystemException() E2D_NOEXCEPT; | ||||
| 
 | ||||
| 		explicit SystemException(const char * message) E2D_NOEXCEPT; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| 	template<class Interface> | ||||
| 	inline void SafeRelease(Interface*& p) | ||||
| 	{ | ||||
| 		if (p != nullptr) | ||||
| 		{ | ||||
| 			p->Release(); | ||||
| 			p = nullptr; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	inline void ThrowIfFailed(HRESULT hr) | ||||
| 	{ | ||||
| 		if (FAILED(hr)) | ||||
| 		{ | ||||
| 			// 在此处设置断点以捕获 D2D API 异常.
 | ||||
| 			static char s_str[64] = {}; | ||||
| 			sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast<unsigned int>(hr)); | ||||
| 			throw SystemException(s_str); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  | @ -6,74 +6,74 @@ namespace e2d | |||
| { | ||||
| 
 | ||||
| 
 | ||||
| class Node; | ||||
| 	class Node; | ||||
| 
 | ||||
| 
 | ||||
| // 碰撞体管理器
 | ||||
| class CollisionManager | ||||
| { | ||||
| 	friend class Node; | ||||
| 	friend class Collider; | ||||
| 	// 碰撞体管理器
 | ||||
| 	class CollisionManager | ||||
| 	{ | ||||
| 		friend class Node; | ||||
| 		friend class Collider; | ||||
| 
 | ||||
| public: | ||||
| 	// 获取碰撞体管理器实例
 | ||||
| 	static CollisionManager * GetInstance(); | ||||
| 	public: | ||||
| 		// 获取碰撞体管理器实例
 | ||||
| 		static CollisionManager * GetInstance(); | ||||
| 
 | ||||
| 	// 打开或关闭碰撞监听
 | ||||
| 	// 默认:关闭
 | ||||
| 	void SetCollisionEnabled( | ||||
| 		bool enabled | ||||
| 	); | ||||
| 		// 打开或关闭碰撞监听
 | ||||
| 		// 默认:关闭
 | ||||
| 		void SetCollisionEnabled( | ||||
| 			bool enabled | ||||
| 		); | ||||
| 
 | ||||
| 	// 添加可互相碰撞物体的名称
 | ||||
| 	void AddName( | ||||
| 		const String& name1, | ||||
| 		const String& name2 | ||||
| 	); | ||||
| 		// 添加可互相碰撞物体的名称
 | ||||
| 		void AddName( | ||||
| 			const String& name1, | ||||
| 			const String& name2 | ||||
| 		); | ||||
| 
 | ||||
| 	// 添加可互相碰撞物体的名称
 | ||||
| 	void AddName( | ||||
| 		const std::vector<std::pair<String, String>>& names | ||||
| 	); | ||||
| 		// 添加可互相碰撞物体的名称
 | ||||
| 		void AddName( | ||||
| 			const std::vector<std::pair<String, String>>& names | ||||
| 		); | ||||
| 
 | ||||
| 	// 判断两个物体是否是可碰撞的
 | ||||
| 	bool IsCollidable( | ||||
| 		Node * node1, | ||||
| 		Node * node2 | ||||
| 	); | ||||
| 		// 判断两个物体是否是可碰撞的
 | ||||
| 		bool IsCollidable( | ||||
| 			Node * node1, | ||||
| 			Node * node2 | ||||
| 		); | ||||
| 
 | ||||
| 	// 判断两个物体是否是可碰撞的
 | ||||
| 	bool IsCollidable( | ||||
| 		const String& name1, | ||||
| 		const String& name2 | ||||
| 	); | ||||
| 		// 判断两个物体是否是可碰撞的
 | ||||
| 		bool IsCollidable( | ||||
| 			const String& name1, | ||||
| 			const String& name2 | ||||
| 		); | ||||
| 
 | ||||
| private: | ||||
| 	CollisionManager(); | ||||
| 	private: | ||||
| 		CollisionManager(); | ||||
| 
 | ||||
| 	~CollisionManager(); | ||||
| 		~CollisionManager(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(CollisionManager); | ||||
| 		E2D_DISABLE_COPY(CollisionManager); | ||||
| 
 | ||||
| 	// 添加碰撞体
 | ||||
| 	void AddCollider( | ||||
| 		Collider* collider | ||||
| 	); | ||||
| 		// 添加碰撞体
 | ||||
| 		void AddCollider( | ||||
| 			Collider* collider | ||||
| 		); | ||||
| 
 | ||||
| 	// 移除碰撞体
 | ||||
| 	void RemoveCollider( | ||||
| 		Collider* collider | ||||
| 	); | ||||
| 		// 移除碰撞体
 | ||||
| 		void RemoveCollider( | ||||
| 			Collider* collider | ||||
| 		); | ||||
| 
 | ||||
| 	// 更新碰撞体
 | ||||
| 	void UpdateCollider( | ||||
| 		Collider* collider | ||||
| 	); | ||||
| 		// 更新碰撞体
 | ||||
| 		void UpdateCollider( | ||||
| 			Collider* collider | ||||
| 		); | ||||
| 
 | ||||
| private: | ||||
| 	bool collision_enabled_; | ||||
| 	std::vector<Collider*> colliders_; | ||||
| 	std::set<std::pair<size_t, size_t>> collision_list_; | ||||
| }; | ||||
| 	private: | ||||
| 		bool collision_enabled_; | ||||
| 		std::vector<Collider*> colliders_; | ||||
| 		std::set<std::pair<size_t, size_t>> collision_list_; | ||||
| 	}; | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										684
									
								
								core/e2dmodule.h
								
								
								
								
							
							
						
						
									
										684
									
								
								core/e2dmodule.h
								
								
								
								
							|  | @ -8,406 +8,406 @@ namespace e2d | |||
| { | ||||
| 
 | ||||
| 
 | ||||
| // 窗体
 | ||||
| class Window | ||||
| { | ||||
| public: | ||||
| 	// 鼠标指针样式
 | ||||
| 	enum class Cursor : int | ||||
| 	// 窗体
 | ||||
| 	class Window | ||||
| 	{ | ||||
| 		Normal,		/* 默认指针样式 */ | ||||
| 		Hand,		/* 手状指针 */ | ||||
| 		No,			/* 禁止指针 */ | ||||
| 		Wait,		/* 沙漏指针 */ | ||||
| 		ArrowWait	/* 默认指针和小沙漏 */ | ||||
| 	public: | ||||
| 		// 鼠标指针样式
 | ||||
| 		enum class Cursor : int | ||||
| 		{ | ||||
| 			Normal,		/* 默认指针样式 */ | ||||
| 			Hand,		/* 手状指针 */ | ||||
| 			No,			/* 禁止指针 */ | ||||
| 			Wait,		/* 沙漏指针 */ | ||||
| 			ArrowWait	/* 默认指针和小沙漏 */ | ||||
| 		}; | ||||
| 
 | ||||
| 		// 弹窗样式
 | ||||
| 		enum class PopupStyle : int | ||||
| 		{ | ||||
| 			Info,		/* 提示 */ | ||||
| 			Warning,	/* 警告 */ | ||||
| 			Error		/* 错误 */ | ||||
| 		}; | ||||
| 
 | ||||
| 	public: | ||||
| 		// 获取窗体实例
 | ||||
| 		static Window * GetInstance(); | ||||
| 
 | ||||
| 		// 销毁窗体实例
 | ||||
| 		static void DestroyInstance(); | ||||
| 
 | ||||
| 		// 创建窗体互斥体
 | ||||
| 		bool CheckMutex( | ||||
| 			const String& mutex = L""	/* 进程互斥体名称 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取窗体标题
 | ||||
| 		const String& GetTitle() const; | ||||
| 
 | ||||
| 		// 获取窗体宽度
 | ||||
| 		int GetWidth() const; | ||||
| 
 | ||||
| 		// 获取窗体高度
 | ||||
| 		int GetHeight() const; | ||||
| 
 | ||||
| 		// 获取窗体大小
 | ||||
| 		Size GetSize() const; | ||||
| 
 | ||||
| 		// 获取窗口 DPI
 | ||||
| 		float GetDpi() const; | ||||
| 
 | ||||
| 		// 获取窗口句柄
 | ||||
| 		HWND GetHWnd(); | ||||
| 
 | ||||
| 		// 修改窗体大小
 | ||||
| 		void SetSize( | ||||
| 			int width,			/* 窗体宽度 */ | ||||
| 			int height			/* 窗体高度 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 设置窗体标题
 | ||||
| 		void SetTitle( | ||||
| 			const String& title	/* 窗体标题 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 设置窗体图标
 | ||||
| 		void SetIcon( | ||||
| 			int icon_id | ||||
| 		); | ||||
| 
 | ||||
| 		// 设置鼠标指针样式
 | ||||
| 		void SetCursor( | ||||
| 			Cursor cursor | ||||
| 		); | ||||
| 
 | ||||
| 		// 打开或隐藏控制台
 | ||||
| 		void SetConsoleEnabled( | ||||
| 			bool enabled | ||||
| 		); | ||||
| 
 | ||||
| 		// 是否允许响应输入法
 | ||||
| 		void SetTypewritingEnabled( | ||||
| 			bool enabled | ||||
| 		); | ||||
| 
 | ||||
| 		// 弹出窗口
 | ||||
| 		// 返回值:当窗口包含取消按钮时,返回值表示用户是否点击确认按钮
 | ||||
| 		bool Popup( | ||||
| 			const String& text,					/* 窗口内容 */ | ||||
| 			const String& title,				/* 窗口标题 */ | ||||
| 			PopupStyle style = PopupStyle::Info,/* 弹窗样式 */ | ||||
| 			bool has_cancel = false				/* 包含取消按钮 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 处理窗体消息
 | ||||
| 		void Poll(); | ||||
| 
 | ||||
| 	private: | ||||
| 		Window(); | ||||
| 
 | ||||
| 		~Window(); | ||||
| 
 | ||||
| 		E2D_DISABLE_COPY(Window); | ||||
| 
 | ||||
| 		// 根据客户区大小定位窗口
 | ||||
| 		Rect Locate( | ||||
| 			int width, | ||||
| 			int height | ||||
| 		); | ||||
| 
 | ||||
| 		// Win32 窗口消息回调程序
 | ||||
| 		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_; | ||||
| 	}; | ||||
| 
 | ||||
| 	// 弹窗样式
 | ||||
| 	enum class PopupStyle : int | ||||
| 
 | ||||
| 	// 渲染器
 | ||||
| 	class Renderer | ||||
| 	{ | ||||
| 		Info,		/* 提示 */ | ||||
| 		Warning,	/* 警告 */ | ||||
| 		Error		/* 错误 */ | ||||
| 	public: | ||||
| 		// 获取渲染器实例
 | ||||
| 		static Renderer * GetInstance(); | ||||
| 
 | ||||
| 		// 销毁实例
 | ||||
| 		static void DestroyInstance(); | ||||
| 
 | ||||
| 		// 获取背景色
 | ||||
| 		Color GetBackgroundColor(); | ||||
| 
 | ||||
| 		// 修改背景色
 | ||||
| 		void SetBackgroundColor( | ||||
| 			const Color& color | ||||
| 		); | ||||
| 
 | ||||
| 		// 显示或隐藏 FPS
 | ||||
| 		// 默认:隐藏
 | ||||
| 		void ShowFps( | ||||
| 			bool show | ||||
| 		); | ||||
| 
 | ||||
| 		// 开始渲染
 | ||||
| 		void BeginDraw(); | ||||
| 
 | ||||
| 		// 结束渲染
 | ||||
| 		void EndDraw(); | ||||
| 
 | ||||
| 		// 获取文字渲染器
 | ||||
| 		E2DTextRenderer * GetTextRenderer(); | ||||
| 
 | ||||
| 		// 获取 ID2D1HwndRenderTarget 对象
 | ||||
| 		ID2D1HwndRenderTarget * GetRenderTarget(); | ||||
| 
 | ||||
| 		// 获取 ID2D1SolidColorBrush 对象
 | ||||
| 		ID2D1SolidColorBrush * GetSolidBrush(); | ||||
| 
 | ||||
| 		// 获取 ID2D1Factory 对象
 | ||||
| 		static ID2D1Factory * GetFactory(); | ||||
| 
 | ||||
| 		// 获取 IWICImagingFactory 对象
 | ||||
| 		static IWICImagingFactory * GetImagingFactory(); | ||||
| 
 | ||||
| 		// 获取 IDWriteFactory 对象
 | ||||
| 		static IDWriteFactory * GetWriteFactory(); | ||||
| 
 | ||||
| 		// 获取 Miter 样式的 ID2D1StrokeStyle
 | ||||
| 		static ID2D1StrokeStyle * GetMiterStrokeStyle(); | ||||
| 
 | ||||
| 		// 获取 Bevel 样式的 ID2D1StrokeStyle
 | ||||
| 		static ID2D1StrokeStyle * GetBevelStrokeStyle(); | ||||
| 
 | ||||
| 		// 获取 Round 样式的 ID2D1StrokeStyle
 | ||||
| 		static ID2D1StrokeStyle * GetRoundStrokeStyle(); | ||||
| 
 | ||||
| 	protected: | ||||
| 		Renderer(); | ||||
| 
 | ||||
| 		~Renderer(); | ||||
| 
 | ||||
| 		E2D_DISABLE_COPY(Renderer); | ||||
| 
 | ||||
| 	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_; | ||||
| 
 | ||||
| 		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_; | ||||
| 	}; | ||||
| 
 | ||||
| public: | ||||
| 	// 获取窗体实例
 | ||||
| 	static Window * GetInstance(); | ||||
| 
 | ||||
| 	// 销毁窗体实例
 | ||||
| 	static void DestroyInstance(); | ||||
| 
 | ||||
| 	// 创建窗体互斥体
 | ||||
| 	bool CheckMutex( | ||||
| 		const String& mutex = L""	/* 进程互斥体名称 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取窗体标题
 | ||||
| 	const String& GetTitle() const; | ||||
| 
 | ||||
| 	// 获取窗体宽度
 | ||||
| 	int GetWidth() const; | ||||
| 
 | ||||
| 	// 获取窗体高度
 | ||||
| 	int GetHeight() const; | ||||
| 
 | ||||
| 	// 获取窗体大小
 | ||||
| 	Size GetSize() const; | ||||
| 
 | ||||
| 	// 获取窗口 DPI
 | ||||
| 	float GetDpi() const; | ||||
| 
 | ||||
| 	// 获取窗口句柄
 | ||||
| 	HWND GetHWnd(); | ||||
| 
 | ||||
| 	// 修改窗体大小
 | ||||
| 	void SetSize( | ||||
| 		int width,			/* 窗体宽度 */ | ||||
| 		int height			/* 窗体高度 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 设置窗体标题
 | ||||
| 	void SetTitle( | ||||
| 		const String& title	/* 窗体标题 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 设置窗体图标
 | ||||
| 	void SetIcon( | ||||
| 		int icon_id | ||||
| 	); | ||||
| 
 | ||||
| 	// 设置鼠标指针样式
 | ||||
| 	void SetCursor( | ||||
| 		Cursor cursor | ||||
| 	); | ||||
| 
 | ||||
| 	// 打开或隐藏控制台
 | ||||
| 	void SetConsoleEnabled( | ||||
| 		bool enabled | ||||
| 	); | ||||
| 
 | ||||
| 	// 是否允许响应输入法
 | ||||
| 	void SetTypewritingEnabled( | ||||
| 		bool enabled | ||||
| 	); | ||||
| 
 | ||||
| 	// 弹出窗口
 | ||||
| 	// 返回值:当窗口包含取消按钮时,返回值表示用户是否点击确认按钮
 | ||||
| 	bool Popup( | ||||
| 		const String& text,					/* 窗口内容 */ | ||||
| 		const String& title,				/* 窗口标题 */ | ||||
| 		PopupStyle style = PopupStyle::Info,/* 弹窗样式 */ | ||||
| 		bool has_cancel = false				/* 包含取消按钮 */ | ||||
| 	); | ||||
| 	// 输入设备
 | ||||
| 	class Input | ||||
| 	{ | ||||
| 	public: | ||||
| 		// 获取输入设备实例
 | ||||
| 		static Input * GetInstance(); | ||||
| 
 | ||||
| 	// 处理窗体消息
 | ||||
| 	void Poll(); | ||||
| 		// 销毁输入设备实例
 | ||||
| 		static void DestroyInstance(); | ||||
| 
 | ||||
| private: | ||||
| 	Window(); | ||||
| 		// 检测键盘某按键是否正被按下
 | ||||
| 		bool IsDown( | ||||
| 			KeyCode key | ||||
| 		); | ||||
| 
 | ||||
| 	~Window(); | ||||
| 		// 检测鼠标按键是否正被按下
 | ||||
| 		bool IsDown( | ||||
| 			MouseCode code | ||||
| 		); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Window); | ||||
| 
 | ||||
| 	// 根据客户区大小定位窗口
 | ||||
| 	Rect Locate( | ||||
| 		int width, | ||||
| 		int height | ||||
| 	); | ||||
| 
 | ||||
| 	// Win32 窗口消息回调程序
 | ||||
| 	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_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 渲染器
 | ||||
| class Renderer | ||||
| { | ||||
| public: | ||||
| 	// 获取渲染器实例
 | ||||
| 	static Renderer * GetInstance(); | ||||
| 
 | ||||
| 	// 销毁实例
 | ||||
| 	static void DestroyInstance(); | ||||
| 
 | ||||
| 	// 获取背景色
 | ||||
| 	Color GetBackgroundColor(); | ||||
| 
 | ||||
| 	// 修改背景色
 | ||||
| 	void SetBackgroundColor( | ||||
| 		const Color& color | ||||
| 	); | ||||
| 
 | ||||
| 	// 显示或隐藏 FPS
 | ||||
| 	// 默认:隐藏
 | ||||
| 	void ShowFps( | ||||
| 		bool show | ||||
| 	); | ||||
| 
 | ||||
| 	// 开始渲染
 | ||||
| 	void BeginDraw(); | ||||
| 
 | ||||
| 	// 结束渲染
 | ||||
| 	void EndDraw(); | ||||
| 
 | ||||
| 	// 获取文字渲染器
 | ||||
| 	E2DTextRenderer * GetTextRenderer(); | ||||
| 		// 获得鼠标X轴坐标值
 | ||||
| 		float GetMouseX(); | ||||
| 
 | ||||
| 	// 获取 ID2D1HwndRenderTarget 对象
 | ||||
| 	ID2D1HwndRenderTarget * GetRenderTarget(); | ||||
| 		// 获得鼠标Y轴坐标值
 | ||||
| 		float GetMouseY(); | ||||
| 
 | ||||
| 	// 获取 ID2D1SolidColorBrush 对象
 | ||||
| 	ID2D1SolidColorBrush * GetSolidBrush(); | ||||
| 		// 获得鼠标坐标值
 | ||||
| 		Point GetMousePos(); | ||||
| 
 | ||||
| 	// 获取 ID2D1Factory 对象
 | ||||
| 	static ID2D1Factory * GetFactory(); | ||||
| 		// 获得鼠标X轴坐标增量
 | ||||
| 		float GetMouseDeltaX(); | ||||
| 
 | ||||
| 	// 获取 IWICImagingFactory 对象
 | ||||
| 	static IWICImagingFactory * GetImagingFactory(); | ||||
| 		// 获得鼠标Y轴坐标增量
 | ||||
| 		float GetMouseDeltaY(); | ||||
| 
 | ||||
| 	// 获取 IDWriteFactory 对象
 | ||||
| 	static IDWriteFactory * GetWriteFactory(); | ||||
| 		// 获得鼠标Z轴(鼠标滚轮)坐标增量
 | ||||
| 		float GetMouseDeltaZ(); | ||||
| 
 | ||||
| 	// 获取 Miter 样式的 ID2D1StrokeStyle
 | ||||
| 	static ID2D1StrokeStyle * GetMiterStrokeStyle(); | ||||
| 		// 刷新输入设备状态
 | ||||
| 		void Update(); | ||||
| 
 | ||||
| 	// 获取 Bevel 样式的 ID2D1StrokeStyle
 | ||||
| 	static ID2D1StrokeStyle * GetBevelStrokeStyle(); | ||||
| 	protected: | ||||
| 		Input(); | ||||
| 
 | ||||
| 	// 获取 Round 样式的 ID2D1StrokeStyle
 | ||||
| 	static ID2D1StrokeStyle * GetRoundStrokeStyle(); | ||||
| 		~Input(); | ||||
| 
 | ||||
| protected: | ||||
| 	Renderer(); | ||||
| 		E2D_DISABLE_COPY(Input); | ||||
| 
 | ||||
| 	~Renderer(); | ||||
| 	protected: | ||||
| 		IDirectInput8W * direct_input_; | ||||
| 		IDirectInputDevice8W*	keyboard_device_; | ||||
| 		IDirectInputDevice8W*	mouse_device_; | ||||
| 		DIMOUSESTATE			mouse_state_; | ||||
| 		char					key_buffer_[256]; | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Renderer); | ||||
| 		static Input * instance_; | ||||
| 	}; | ||||
| 
 | ||||
| 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_; | ||||
| 
 | ||||
| 	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_; | ||||
| }; | ||||
| 	// 音频设备
 | ||||
| 	class Audio | ||||
| 	{ | ||||
| 	public: | ||||
| 		// 获取音频设备实例
 | ||||
| 		static Audio * GetInstance(); | ||||
| 
 | ||||
| 		// 销毁实例
 | ||||
| 		static void DestroyInstance(); | ||||
| 
 | ||||
| // 输入设备
 | ||||
| class Input | ||||
| { | ||||
| public: | ||||
| 	// 获取输入设备实例
 | ||||
| 	static Input * GetInstance(); | ||||
| 		// 获取 XAudio2 实例对象
 | ||||
| 		IXAudio2 * GetXAudio2(); | ||||
| 
 | ||||
| 	// 销毁输入设备实例
 | ||||
| 	static void DestroyInstance(); | ||||
| 		// 获取 MasteringVoice 实例对象
 | ||||
| 		IXAudio2MasteringVoice* GetMasteringVoice(); | ||||
| 
 | ||||
| 	// 检测键盘某按键是否正被按下
 | ||||
| 	bool IsDown( | ||||
| 		KeyCode key | ||||
| 	); | ||||
| 	protected: | ||||
| 		Audio(); | ||||
| 
 | ||||
| 	// 检测鼠标按键是否正被按下
 | ||||
| 	bool IsDown( | ||||
| 		MouseCode code | ||||
| 	); | ||||
| 		virtual ~Audio(); | ||||
| 
 | ||||
| 	// 获得鼠标X轴坐标值
 | ||||
| 	float GetMouseX(); | ||||
| 		E2D_DISABLE_COPY(Audio); | ||||
| 
 | ||||
| 	// 获得鼠标Y轴坐标值
 | ||||
| 	float GetMouseY(); | ||||
| 	protected: | ||||
| 		IXAudio2 * x_audio2_; | ||||
| 		IXAudio2MasteringVoice*	mastering_voice_; | ||||
| 
 | ||||
| 	// 获得鼠标坐标值
 | ||||
| 	Point GetMousePos(); | ||||
| 		static Audio * instance_; | ||||
| 	}; | ||||
| 
 | ||||
| 	// 获得鼠标X轴坐标增量
 | ||||
| 	float GetMouseDeltaX(); | ||||
| 
 | ||||
| 	// 获得鼠标Y轴坐标增量
 | ||||
| 	float GetMouseDeltaY(); | ||||
| 	// 游戏
 | ||||
| 	class Game | ||||
| 	{ | ||||
| 	public: | ||||
| 		// 获取 Game 实例
 | ||||
| 		static Game * GetInstance(); | ||||
| 
 | ||||
| 	// 获得鼠标Z轴(鼠标滚轮)坐标增量
 | ||||
| 	float GetMouseDeltaZ(); | ||||
| 		// 销毁实例
 | ||||
| 		static void DestroyInstance(); | ||||
| 
 | ||||
| 	// 刷新输入设备状态
 | ||||
| 	void Update(); | ||||
| 		// 启动游戏
 | ||||
| 		void Start(); | ||||
| 
 | ||||
| protected: | ||||
| 	Input(); | ||||
| 		// 暂停游戏
 | ||||
| 		void Pause(); | ||||
| 
 | ||||
| 	~Input(); | ||||
| 		// 继续游戏
 | ||||
| 		void Resume(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Input); | ||||
| 		// 结束游戏
 | ||||
| 		void Quit(); | ||||
| 
 | ||||
| protected: | ||||
| 	IDirectInput8W *		direct_input_; | ||||
| 	IDirectInputDevice8W*	keyboard_device_; | ||||
| 	IDirectInputDevice8W*	mouse_device_; | ||||
| 	DIMOUSESTATE			mouse_state_; | ||||
| 	char					key_buffer_[256]; | ||||
| 		// 游戏是否暂停
 | ||||
| 		bool IsPaused(); | ||||
| 
 | ||||
| 	static Input * instance_; | ||||
| }; | ||||
| 		// 场景入栈
 | ||||
| 		void EnterScene( | ||||
| 			Scene * scene			/* 下一个场景的指针 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 场景入栈
 | ||||
| 		void EnterScene( | ||||
| 			Transition * transition	/* 场景动画 */ | ||||
| 		); | ||||
| 
 | ||||
| // 音频设备
 | ||||
| class Audio | ||||
| { | ||||
| public: | ||||
| 	// 获取音频设备实例
 | ||||
| 	static Audio * GetInstance(); | ||||
| 		// 获取当前场景
 | ||||
| 		Scene * GetCurrentScene(); | ||||
| 
 | ||||
| 	// 销毁实例
 | ||||
| 	static void DestroyInstance(); | ||||
| 		// 是否正在进行场景动画
 | ||||
| 		bool IsTransitioning() const; | ||||
| 
 | ||||
| 	// 获取 XAudio2 实例对象
 | ||||
| 	IXAudio2 * GetXAudio2(); | ||||
| 		// 更新场景内容
 | ||||
| 		void UpdateScene(); | ||||
| 
 | ||||
| 	// 获取 MasteringVoice 实例对象
 | ||||
| 	IXAudio2MasteringVoice* GetMasteringVoice(); | ||||
| 		// 渲染场景画面
 | ||||
| 		void DrawScene(); | ||||
| 
 | ||||
| protected: | ||||
| 	Audio(); | ||||
| 	protected: | ||||
| 		Game(); | ||||
| 
 | ||||
| 	virtual ~Audio(); | ||||
| 		~Game(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Audio); | ||||
| 		E2D_DISABLE_COPY(Game); | ||||
| 
 | ||||
| protected: | ||||
| 	IXAudio2 *				x_audio2_; | ||||
| 	IXAudio2MasteringVoice*	mastering_voice_; | ||||
| 	private: | ||||
| 		bool			quit_; | ||||
| 		bool			paused_; | ||||
| 		Scene*			curr_scene_; | ||||
| 		Scene*			next_scene_; | ||||
| 		Transition*		transition_; | ||||
| 
 | ||||
| 	static Audio * instance_; | ||||
| }; | ||||
| 		static Game * instance_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 游戏
 | ||||
| class Game | ||||
| { | ||||
| public: | ||||
| 	// 获取 Game 实例
 | ||||
| 	static Game * GetInstance(); | ||||
| 	// 垃圾回收池
 | ||||
| 	class GC | ||||
| 	{ | ||||
| 	public: | ||||
| 		// 获取 GC 实例
 | ||||
| 		static GC * GetInstance(); | ||||
| 
 | ||||
| 	// 销毁实例
 | ||||
| 	static void DestroyInstance(); | ||||
| 		// 自动释放
 | ||||
| 		void AutoRelease( | ||||
| 			Ref* ref | ||||
| 		); | ||||
| 
 | ||||
| 	// 启动游戏
 | ||||
| 	void Start(); | ||||
| 		// 安全地释放对象
 | ||||
| 		void SafeRelease( | ||||
| 			Ref* ref | ||||
| 		); | ||||
| 
 | ||||
| 	// 暂停游戏
 | ||||
| 	void Pause(); | ||||
| 		// 刷新内存池
 | ||||
| 		void Flush(); | ||||
| 
 | ||||
| 	// 继续游戏
 | ||||
| 	void Resume(); | ||||
| 	private: | ||||
| 		GC(); | ||||
| 
 | ||||
| 	// 结束游戏
 | ||||
| 	void Quit(); | ||||
| 		~GC(); | ||||
| 
 | ||||
| 	// 游戏是否暂停
 | ||||
| 	bool IsPaused(); | ||||
| 		E2D_DISABLE_COPY(GC); | ||||
| 
 | ||||
| 	// 场景入栈
 | ||||
| 	void EnterScene( | ||||
| 		Scene * scene			/* 下一个场景的指针 */ | ||||
| 	); | ||||
| 	private: | ||||
| 		bool notifyed_; | ||||
| 		bool cleanup_; | ||||
| 		std::set<Ref*> pool_; | ||||
| 	}; | ||||
| 
 | ||||
| 	// 场景入栈
 | ||||
| 	void EnterScene( | ||||
| 		Transition * transition	/* 场景动画 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取当前场景
 | ||||
| 	Scene * GetCurrentScene(); | ||||
| 
 | ||||
| 	// 是否正在进行场景动画
 | ||||
| 	bool IsTransitioning() const; | ||||
| 
 | ||||
| 	// 更新场景内容
 | ||||
| 	void UpdateScene(); | ||||
| 
 | ||||
| 	// 渲染场景画面
 | ||||
| 	void DrawScene(); | ||||
| 
 | ||||
| protected: | ||||
| 	Game(); | ||||
| 
 | ||||
| 	~Game(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Game); | ||||
| 
 | ||||
| private: | ||||
| 	bool			quit_; | ||||
| 	bool			paused_; | ||||
| 	Scene*			curr_scene_; | ||||
| 	Scene*			next_scene_; | ||||
| 	Transition*		transition_; | ||||
| 
 | ||||
| 	static Game * instance_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 垃圾回收池
 | ||||
| class GC | ||||
| { | ||||
| public: | ||||
| 	// 获取 GC 实例
 | ||||
| 	static GC * GetInstance(); | ||||
| 
 | ||||
| 	// 自动释放
 | ||||
| 	void AutoRelease( | ||||
| 		Ref* ref | ||||
| 	); | ||||
| 
 | ||||
| 	// 安全地释放对象
 | ||||
| 	void SafeRelease( | ||||
| 		Ref* ref | ||||
| 	); | ||||
| 
 | ||||
| 	// 刷新内存池
 | ||||
| 	void Flush(); | ||||
| 
 | ||||
| private: | ||||
| 	GC(); | ||||
| 
 | ||||
| 	~GC(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(GC); | ||||
| 
 | ||||
| private: | ||||
| 	bool notifyed_; | ||||
| 	bool cleanup_; | ||||
| 	std::set<Ref*> pool_; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
| } | ||||
|  |  | |||
							
								
								
									
										876
									
								
								core/e2dtool.h
								
								
								
								
							
							
						
						
									
										876
									
								
								core/e2dtool.h
								
								
								
								
							|  | @ -6,505 +6,505 @@ namespace e2d | |||
| { | ||||
| 
 | ||||
| 
 | ||||
| // 随机数产生器
 | ||||
| class Random | ||||
| { | ||||
| public: | ||||
| 	// 取得范围内的一个整型随机数
 | ||||
| 	template<typename T> | ||||
| 	static inline T Range(T min, T max)  | ||||
| 	{  | ||||
| 		return e2d::Random::RandomInt(min, max);  | ||||
| 	} | ||||
| 
 | ||||
| 	// 取得范围内的一个浮点数随机数
 | ||||
| 	static inline float Range(float min, float max)  | ||||
| 	{  | ||||
| 		return e2d::Random::RandomReal(min, max);  | ||||
| 	} | ||||
| 
 | ||||
| 	// 取得范围内的一个浮点数随机数
 | ||||
| 	static inline double Range(double min, double max) | ||||
| 	{  | ||||
| 		return e2d::Random::RandomReal(min, max);  | ||||
| 	} | ||||
| 
 | ||||
| private: | ||||
| 	template<typename T> | ||||
| 	static T RandomInt(T min, T max) | ||||
| 	// 随机数产生器
 | ||||
| 	class Random | ||||
| 	{ | ||||
| 		std::uniform_int_distribution<T> dist(min, max); | ||||
| 		return dist(Random::GetEngine()); | ||||
| 	} | ||||
| 	public: | ||||
| 		// 取得范围内的一个整型随机数
 | ||||
| 		template<typename T> | ||||
| 		static inline T Range(T min, T max) | ||||
| 		{ | ||||
| 			return e2d::Random::RandomInt(min, max); | ||||
| 		} | ||||
| 
 | ||||
| 	template<typename T> | ||||
| 	static T RandomReal(T min, T max) | ||||
| 		// 取得范围内的一个浮点数随机数
 | ||||
| 		static inline float Range(float min, float max) | ||||
| 		{ | ||||
| 			return e2d::Random::RandomReal(min, max); | ||||
| 		} | ||||
| 
 | ||||
| 		// 取得范围内的一个浮点数随机数
 | ||||
| 		static inline double Range(double min, double max) | ||||
| 		{ | ||||
| 			return e2d::Random::RandomReal(min, max); | ||||
| 		} | ||||
| 
 | ||||
| 	private: | ||||
| 		template<typename T> | ||||
| 		static T RandomInt(T min, T max) | ||||
| 		{ | ||||
| 			std::uniform_int_distribution<T> dist(min, max); | ||||
| 			return dist(Random::GetEngine()); | ||||
| 		} | ||||
| 
 | ||||
| 		template<typename T> | ||||
| 		static T RandomReal(T min, T max) | ||||
| 		{ | ||||
| 			std::uniform_real_distribution<T> dist(min, max); | ||||
| 			return dist(Random::GetEngine()); | ||||
| 		} | ||||
| 
 | ||||
| 		// 获取随机数产生器
 | ||||
| 		static std::default_random_engine &GetEngine(); | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| 	// 音乐
 | ||||
| 	class Music : | ||||
| 		public Ref | ||||
| 	{ | ||||
| 		std::uniform_real_distribution<T> dist(min, max); | ||||
| 		return dist(Random::GetEngine()); | ||||
| 	} | ||||
| 
 | ||||
| 	// 获取随机数产生器
 | ||||
| 	static std::default_random_engine &GetEngine(); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 音乐
 | ||||
| class Music : | ||||
| 	public Ref | ||||
| { | ||||
| 	friend class VoiceCallback; | ||||
| 
 | ||||
| public: | ||||
| 	Music(); | ||||
| 
 | ||||
| 	explicit Music( | ||||
| 		const e2d::String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	explicit Music( | ||||
| 		const Resource& res		/* 音乐资源 */ | ||||
| 	); | ||||
| 
 | ||||
| 	virtual ~Music(); | ||||
| 
 | ||||
| 	// 打开音乐文件
 | ||||
| 	bool Open( | ||||
| 		const e2d::String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 打开音乐资源
 | ||||
| 	bool Open( | ||||
| 		const Resource& res | ||||
| 	); | ||||
| 
 | ||||
| 	// 播放
 | ||||
| 	bool Play( | ||||
| 		int loopCount = 0 | ||||
| 	); | ||||
| 
 | ||||
| 	// 暂停
 | ||||
| 	void Pause(); | ||||
| 
 | ||||
| 	// 继续
 | ||||
| 	void Resume(); | ||||
| 
 | ||||
| 	// 停止
 | ||||
| 	void Stop(); | ||||
| 
 | ||||
| 	// 关闭并回收资源
 | ||||
| 	void Close(); | ||||
| 
 | ||||
| 	// 是否正在播放
 | ||||
| 	bool IsPlaying() const; | ||||
| 
 | ||||
| 	// 设置音量
 | ||||
| 	bool SetVolume( | ||||
| 		float volume | ||||
| 	); | ||||
| 
 | ||||
| 	// 设置播放结束时的执行函数
 | ||||
| 	void SetCallbackOnEnd( | ||||
| 		const Function& func | ||||
| 	); | ||||
| 
 | ||||
| 	// 设置循环播放中每一次播放结束时的执行函数
 | ||||
| 	void SetCallbackOnLoopEnd( | ||||
| 		const Function& func | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取 IXAudio2SourceVoice 对象
 | ||||
| 	IXAudio2SourceVoice * GetSourceVoice() const; | ||||
| 
 | ||||
| protected: | ||||
| 	bool _readMMIO(); | ||||
| 
 | ||||
| 	bool _resetFile(); | ||||
| 
 | ||||
| 	bool _read( | ||||
| 		BYTE* buffer, | ||||
| 		DWORD size_to_read | ||||
| 	); | ||||
| 
 | ||||
| 	bool _findMediaFileCch( | ||||
| 		wchar_t* dest_path, | ||||
| 		int cch_dest, | ||||
| 		const wchar_t * file_name | ||||
| 	); | ||||
| 
 | ||||
| protected: | ||||
| 	bool					opened_; | ||||
| 	DWORD					size_; | ||||
| 	CHAR*					buffer_; | ||||
| 	BYTE*					wave_data_; | ||||
| 	HMMIO					hmmio_; | ||||
| 	MMCKINFO				ck_; | ||||
| 	MMCKINFO				ck_riff_; | ||||
| 	WAVEFORMATEX*			wfx_; | ||||
| 	VoiceCallback			callback_; | ||||
| 	IXAudio2SourceVoice*	voice_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // 音乐播放器
 | ||||
| class Player | ||||
| { | ||||
| public: | ||||
| 	// 获取播放器实例
 | ||||
| 	static Player * GetInstance(); | ||||
| 
 | ||||
| 	// 销毁实例
 | ||||
| 	static void DestroyInstance(); | ||||
| 
 | ||||
| 	// 预加载音乐资源
 | ||||
| 	bool Preload( | ||||
| 		const String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 播放音乐
 | ||||
| 	bool Play( | ||||
| 		const String& file_path,	/* 音乐文件路径 */ | ||||
| 		int loop_count = 0		/* 重复播放次数,设置 -1 为循环播放 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 暂停音乐
 | ||||
| 	void Pause( | ||||
| 		const String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 继续播放音乐
 | ||||
| 	void Resume( | ||||
| 		const String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 停止音乐
 | ||||
| 	void Stop( | ||||
| 		const String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取音乐播放状态
 | ||||
| 	bool IsPlaying( | ||||
| 		const String& file_path	/* 音乐文件路径 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 预加载音乐资源
 | ||||
| 	bool Preload( | ||||
| 		const Resource& res		/* 音乐资源 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 播放音乐
 | ||||
| 	bool Play( | ||||
| 		const Resource& res,	/* 音乐资源 */ | ||||
| 		int loop_count = 0		/* 重复播放次数,设置 -1 为循环播放 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 暂停音乐
 | ||||
| 	void Pause( | ||||
| 		const Resource& res		/* 音乐资源 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 继续播放音乐
 | ||||
| 	void Resume( | ||||
| 		const Resource& res		/* 音乐资源 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 停止音乐
 | ||||
| 	void Stop( | ||||
| 		const Resource& res		/* 音乐资源 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取音乐播放状态
 | ||||
| 	bool IsPlaying( | ||||
| 		const Resource& res		/* 音乐资源 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取音量
 | ||||
| 	float GetVolume(); | ||||
| 
 | ||||
| 	// 设置音量
 | ||||
| 	void SetVolume( | ||||
| 		float volume	/* 音量范围为 -224 ~ 224,0 是静音,1 是正常音量 */ | ||||
| 	); | ||||
| 
 | ||||
| 	// 暂停所有音乐
 | ||||
| 	void PauseAll(); | ||||
| 
 | ||||
| 	// 继续播放所有音乐
 | ||||
| 	void ResumeAll(); | ||||
| 
 | ||||
| 	// 停止所有音乐
 | ||||
| 	void StopAll(); | ||||
| 
 | ||||
| 	// 清空音乐缓存
 | ||||
| 	void ClearCache(); | ||||
| 
 | ||||
| protected: | ||||
| 	Player(); | ||||
| 
 | ||||
| 	~Player(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Player); | ||||
| 
 | ||||
| protected: | ||||
| 	float volume_; | ||||
| 	std::map<size_t, Music*> musics_; | ||||
| 
 | ||||
| 	static Player * instance_; | ||||
| }; | ||||
| 		friend class VoiceCallback; | ||||
| 
 | ||||
| 	public: | ||||
| 		Music(); | ||||
| 
 | ||||
| 		explicit Music( | ||||
| 			const e2d::String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		explicit Music( | ||||
| 			const Resource& res		/* 音乐资源 */ | ||||
| 		); | ||||
| 
 | ||||
| 		virtual ~Music(); | ||||
| 
 | ||||
| 		// 打开音乐文件
 | ||||
| 		bool Open( | ||||
| 			const e2d::String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 打开音乐资源
 | ||||
| 		bool Open( | ||||
| 			const Resource& res | ||||
| 		); | ||||
| 
 | ||||
| 		// 播放
 | ||||
| 		bool Play( | ||||
| 			int loopCount = 0 | ||||
| 		); | ||||
| 
 | ||||
| 		// 暂停
 | ||||
| 		void Pause(); | ||||
| 
 | ||||
| 		// 继续
 | ||||
| 		void Resume(); | ||||
| 
 | ||||
| 		// 停止
 | ||||
| 		void Stop(); | ||||
| 
 | ||||
| 		// 关闭并回收资源
 | ||||
| 		void Close(); | ||||
| 
 | ||||
| 		// 是否正在播放
 | ||||
| 		bool IsPlaying() const; | ||||
| 
 | ||||
| 		// 设置音量
 | ||||
| 		bool SetVolume( | ||||
| 			float volume | ||||
| 		); | ||||
| 
 | ||||
| 		// 设置播放结束时的执行函数
 | ||||
| 		void SetCallbackOnEnd( | ||||
| 			const Function& func | ||||
| 		); | ||||
| 
 | ||||
| 		// 设置循环播放中每一次播放结束时的执行函数
 | ||||
| 		void SetCallbackOnLoopEnd( | ||||
| 			const Function& func | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取 IXAudio2SourceVoice 对象
 | ||||
| 		IXAudio2SourceVoice * GetSourceVoice() const; | ||||
| 
 | ||||
| 	protected: | ||||
| 		bool _readMMIO(); | ||||
| 
 | ||||
| 		bool _resetFile(); | ||||
| 
 | ||||
| 		bool _read( | ||||
| 			BYTE* buffer, | ||||
| 			DWORD size_to_read | ||||
| 		); | ||||
| 
 | ||||
| 		bool _findMediaFileCch( | ||||
| 			wchar_t* dest_path, | ||||
| 			int cch_dest, | ||||
| 			const wchar_t * file_name | ||||
| 		); | ||||
| 
 | ||||
| 	protected: | ||||
| 		bool					opened_; | ||||
| 		DWORD					size_; | ||||
| 		CHAR*					buffer_; | ||||
| 		BYTE*					wave_data_; | ||||
| 		HMMIO					hmmio_; | ||||
| 		MMCKINFO				ck_; | ||||
| 		MMCKINFO				ck_riff_; | ||||
| 		WAVEFORMATEX*			wfx_; | ||||
| 		VoiceCallback			callback_; | ||||
| 		IXAudio2SourceVoice*	voice_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| 	// 音乐播放器
 | ||||
| 	class Player | ||||
| 	{ | ||||
| 	public: | ||||
| 		// 获取播放器实例
 | ||||
| 		static Player * GetInstance(); | ||||
| 
 | ||||
| 		// 销毁实例
 | ||||
| 		static void DestroyInstance(); | ||||
| 
 | ||||
| 		// 预加载音乐资源
 | ||||
| 		bool Preload( | ||||
| 			const String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 播放音乐
 | ||||
| 		bool Play( | ||||
| 			const String& file_path,	/* 音乐文件路径 */ | ||||
| 			int loop_count = 0		/* 重复播放次数,设置 -1 为循环播放 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 暂停音乐
 | ||||
| 		void Pause( | ||||
| 			const String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 继续播放音乐
 | ||||
| 		void Resume( | ||||
| 			const String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 停止音乐
 | ||||
| 		void Stop( | ||||
| 			const String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取音乐播放状态
 | ||||
| 		bool IsPlaying( | ||||
| 			const String& file_path	/* 音乐文件路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 预加载音乐资源
 | ||||
| 		bool Preload( | ||||
| 			const Resource& res		/* 音乐资源 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 播放音乐
 | ||||
| 		bool Play( | ||||
| 			const Resource& res,	/* 音乐资源 */ | ||||
| 			int loop_count = 0		/* 重复播放次数,设置 -1 为循环播放 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 暂停音乐
 | ||||
| 		void Pause( | ||||
| 			const Resource& res		/* 音乐资源 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 继续播放音乐
 | ||||
| 		void Resume( | ||||
| 			const Resource& res		/* 音乐资源 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 停止音乐
 | ||||
| 		void Stop( | ||||
| 			const Resource& res		/* 音乐资源 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取音乐播放状态
 | ||||
| 		bool IsPlaying( | ||||
| 			const Resource& res		/* 音乐资源 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取音量
 | ||||
| 		float GetVolume(); | ||||
| 
 | ||||
| 		// 设置音量
 | ||||
| 		void SetVolume( | ||||
| 			float volume	/* 音量范围为 -224 ~ 224,0 是静音,1 是正常音量 */ | ||||
| 		); | ||||
| 
 | ||||
| 		// 暂停所有音乐
 | ||||
| 		void PauseAll(); | ||||
| 
 | ||||
| 		// 继续播放所有音乐
 | ||||
| 		void ResumeAll(); | ||||
| 
 | ||||
| 		// 停止所有音乐
 | ||||
| 		void StopAll(); | ||||
| 
 | ||||
| 		// 清空音乐缓存
 | ||||
| 		void ClearCache(); | ||||
| 
 | ||||
| 	protected: | ||||
| 		Player(); | ||||
| 
 | ||||
| 		~Player(); | ||||
| 
 | ||||
| 		E2D_DISABLE_COPY(Player); | ||||
| 
 | ||||
| 	protected: | ||||
| 		float volume_; | ||||
| 		std::map<size_t, Music*> musics_; | ||||
| 
 | ||||
| 		static Player * instance_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| class Timer; | ||||
| 	class Timer; | ||||
| 
 | ||||
| // 定时任务
 | ||||
| class Task : | ||||
| 	public Ref | ||||
| { | ||||
| 	friend class Timer; | ||||
| 	// 定时任务
 | ||||
| 	class Task : | ||||
| 		public Ref | ||||
| 	{ | ||||
| 		friend class Timer; | ||||
| 
 | ||||
| public: | ||||
| 	explicit Task( | ||||
| 		const Function& func,		/* 执行函数 */ | ||||
| 		const String& name = L""	/* 任务名称 */ | ||||
| 	); | ||||
| 	public: | ||||
| 		explicit Task( | ||||
| 			const Function& func,		/* 执行函数 */ | ||||
| 			const String& name = L""	/* 任务名称 */ | ||||
| 		); | ||||
| 
 | ||||
| 	explicit Task( | ||||
| 		const Function& func,		/* 执行函数 */ | ||||
| 		float delay,				/* 时间间隔(秒) */ | ||||
| 		int times = -1,				/* 执行次数(设 -1 为永久执行) */ | ||||
| 		const String& name = L""	/* 任务名称 */ | ||||
| 	); | ||||
| 		explicit Task( | ||||
| 			const Function& func,		/* 执行函数 */ | ||||
| 			float delay,				/* 时间间隔(秒) */ | ||||
| 			int times = -1,				/* 执行次数(设 -1 为永久执行) */ | ||||
| 			const String& name = L""	/* 任务名称 */ | ||||
| 		); | ||||
| 
 | ||||
| 	// 启动任务
 | ||||
| 	void Start(); | ||||
| 		// 启动任务
 | ||||
| 		void Start(); | ||||
| 
 | ||||
| 	// 停止任务
 | ||||
| 	void Stop(); | ||||
| 		// 停止任务
 | ||||
| 		void Stop(); | ||||
| 
 | ||||
| 	// 任务是否正在执行
 | ||||
| 	bool IsRunning() const; | ||||
| 		// 任务是否正在执行
 | ||||
| 		bool IsRunning() const; | ||||
| 
 | ||||
| 	// 获取任务名称
 | ||||
| 	const String& GetName() const; | ||||
| 		// 获取任务名称
 | ||||
| 		const String& GetName() const; | ||||
| 
 | ||||
| protected: | ||||
| 	// 执行任务
 | ||||
| 	void Update(); | ||||
| 	protected: | ||||
| 		// 执行任务
 | ||||
| 		void Update(); | ||||
| 
 | ||||
| 	// 任务是否就绪
 | ||||
| 	bool IsReady() const; | ||||
| 		// 任务是否就绪
 | ||||
| 		bool IsReady() const; | ||||
| 
 | ||||
| protected: | ||||
| 	bool		running_; | ||||
| 	bool		stopped_; | ||||
| 	int			run_times_; | ||||
| 	int			total_times_; | ||||
| 	String		name_; | ||||
| 	Duration	delay_; | ||||
| 	Time		last_time_; | ||||
| 	Function	callback_; | ||||
| }; | ||||
| 	protected: | ||||
| 		bool		running_; | ||||
| 		bool		stopped_; | ||||
| 		int			run_times_; | ||||
| 		int			total_times_; | ||||
| 		String		name_; | ||||
| 		Duration	delay_; | ||||
| 		Time		last_time_; | ||||
| 		Function	callback_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 定时器
 | ||||
| class Timer | ||||
| { | ||||
| public: | ||||
| 	// 获取定时器实例
 | ||||
| 	static Timer * GetInstance(); | ||||
| 	// 定时器
 | ||||
| 	class Timer | ||||
| 	{ | ||||
| 	public: | ||||
| 		// 获取定时器实例
 | ||||
| 		static Timer * GetInstance(); | ||||
| 
 | ||||
| 	// 添加任务
 | ||||
| 	void AddTask( | ||||
| 		Task * task | ||||
| 	); | ||||
| 		// 添加任务
 | ||||
| 		void AddTask( | ||||
| 			Task * task | ||||
| 		); | ||||
| 
 | ||||
| 	// 启动任务
 | ||||
| 	void StartTasks( | ||||
| 		const String& task_name | ||||
| 	); | ||||
| 		// 启动任务
 | ||||
| 		void StartTasks( | ||||
| 			const String& task_name | ||||
| 		); | ||||
| 
 | ||||
| 	// 停止任务
 | ||||
| 	void StopTasks( | ||||
| 		const String& task_name | ||||
| 	); | ||||
| 		// 停止任务
 | ||||
| 		void StopTasks( | ||||
| 			const String& task_name | ||||
| 		); | ||||
| 
 | ||||
| 	// 移除任务
 | ||||
| 	void RemoveTasks( | ||||
| 		const String& task_name | ||||
| 	); | ||||
| 		// 移除任务
 | ||||
| 		void RemoveTasks( | ||||
| 			const String& task_name | ||||
| 		); | ||||
| 
 | ||||
| 	// 启动所有任务
 | ||||
| 	void StartAllTasks(); | ||||
| 		// 启动所有任务
 | ||||
| 		void StartAllTasks(); | ||||
| 
 | ||||
| 	// 停止所有任务
 | ||||
| 	void StopAllTasks(); | ||||
| 		// 停止所有任务
 | ||||
| 		void StopAllTasks(); | ||||
| 
 | ||||
| 	// 移除所有任务
 | ||||
| 	void RemoveAllTasks(); | ||||
| 		// 移除所有任务
 | ||||
| 		void RemoveAllTasks(); | ||||
| 
 | ||||
| 	// 更新定时器
 | ||||
| 	void Update(); | ||||
| 		// 更新定时器
 | ||||
| 		void Update(); | ||||
| 
 | ||||
| 	// 刷新所有任务计时
 | ||||
| 	void UpdateTime(); | ||||
| 		// 刷新所有任务计时
 | ||||
| 		void UpdateTime(); | ||||
| 
 | ||||
| private: | ||||
| 	Timer(); | ||||
| 	private: | ||||
| 		Timer(); | ||||
| 
 | ||||
| 	~Timer(); | ||||
| 		~Timer(); | ||||
| 
 | ||||
| 	E2D_DISABLE_COPY(Timer); | ||||
| 		E2D_DISABLE_COPY(Timer); | ||||
| 
 | ||||
| private: | ||||
| 	std::vector<Task*> tasks_; | ||||
| }; | ||||
| 	private: | ||||
| 		std::vector<Task*> tasks_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 数据管理工具
 | ||||
| class Data | ||||
| { | ||||
| public: | ||||
| 	Data( | ||||
| 		const String& key,					/* 键值 */ | ||||
| 		const String& field = L"Defalut"	/* 字段名称 */ | ||||
| 	); | ||||
| 	// 数据管理工具
 | ||||
| 	class Data | ||||
| 	{ | ||||
| 	public: | ||||
| 		Data( | ||||
| 			const String& key,					/* 键值 */ | ||||
| 			const String& field = L"Defalut"	/* 字段名称 */ | ||||
| 		); | ||||
| 
 | ||||
| 	// 该数据是否存在
 | ||||
| 	bool Exists() const; | ||||
| 		// 该数据是否存在
 | ||||
| 		bool Exists() const; | ||||
| 
 | ||||
| 	// 保存 int 类型的值
 | ||||
| 	bool SaveInt( | ||||
| 		int value | ||||
| 	); | ||||
| 		// 保存 int 类型的值
 | ||||
| 		bool SaveInt( | ||||
| 			int value | ||||
| 		); | ||||
| 
 | ||||
| 	// 保存 float 类型的值
 | ||||
| 	bool SaveFloat( | ||||
| 		float value | ||||
| 	); | ||||
| 
 | ||||
| 	// 保存 double 类型的值
 | ||||
| 	bool SaveDouble( | ||||
| 		double value | ||||
| 	); | ||||
| 
 | ||||
| 	// 保存 bool 类型的值
 | ||||
| 	bool SaveBool( | ||||
| 		bool value | ||||
| 	); | ||||
| 
 | ||||
| 	// 保存 String 类型的值
 | ||||
| 	bool SaveString( | ||||
| 		const String& value | ||||
| 	); | ||||
| 
 | ||||
| 	// 获取 int 类型的值
 | ||||
| 	int GetInt() const; | ||||
| 		// 保存 float 类型的值
 | ||||
| 		bool SaveFloat( | ||||
| 			float value | ||||
| 		); | ||||
| 
 | ||||
| 		// 保存 double 类型的值
 | ||||
| 		bool SaveDouble( | ||||
| 			double value | ||||
| 		); | ||||
| 
 | ||||
| 		// 保存 bool 类型的值
 | ||||
| 		bool SaveBool( | ||||
| 			bool value | ||||
| 		); | ||||
| 
 | ||||
| 		// 保存 String 类型的值
 | ||||
| 		bool SaveString( | ||||
| 			const String& value | ||||
| 		); | ||||
| 
 | ||||
| 		// 获取 int 类型的值
 | ||||
| 		int GetInt() const; | ||||
| 
 | ||||
| 	// 获取 float 类型的值
 | ||||
| 	float GetFloat() const; | ||||
| 		// 获取 float 类型的值
 | ||||
| 		float GetFloat() const; | ||||
| 
 | ||||
| 	// 获取 double 类型的值
 | ||||
| 	double GetDouble() const; | ||||
| 		// 获取 double 类型的值
 | ||||
| 		double GetDouble() const; | ||||
| 
 | ||||
| 	// 获取 bool 类型的值
 | ||||
| 	bool GetBool() const; | ||||
| 		// 获取 bool 类型的值
 | ||||
| 		bool GetBool() const; | ||||
| 
 | ||||
| 	// 获取 字符串 类型的值
 | ||||
| 	String GetString(); | ||||
| 		// 获取 字符串 类型的值
 | ||||
| 		String GetString(); | ||||
| 
 | ||||
| protected: | ||||
| 	String key_; | ||||
| 	String field_; | ||||
| 	const String& data_path_; | ||||
| }; | ||||
| 	protected: | ||||
| 		String key_; | ||||
| 		String field_; | ||||
| 		const String& data_path_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 文件
 | ||||
| class File | ||||
| { | ||||
| public: | ||||
| 	File(); | ||||
| 	// 文件
 | ||||
| 	class File | ||||
| 	{ | ||||
| 	public: | ||||
| 		File(); | ||||
| 
 | ||||
| 	File( | ||||
| 		const String& file_name | ||||
| 	); | ||||
| 		File( | ||||
| 			const String& file_name | ||||
| 		); | ||||
| 
 | ||||
| 	virtual ~File(); | ||||
| 		virtual ~File(); | ||||
| 
 | ||||
| 	// 打开文件
 | ||||
| 	bool Open( | ||||
| 		const String& file_name | ||||
| 	); | ||||
| 		// 打开文件
 | ||||
| 		bool Open( | ||||
| 			const String& file_name | ||||
| 		); | ||||
| 
 | ||||
| 	// 文件或文件夹是否存在
 | ||||
| 	bool Exists() const; | ||||
| 		// 文件或文件夹是否存在
 | ||||
| 		bool Exists() const; | ||||
| 
 | ||||
| 	// 是否是文件夹
 | ||||
| 	bool IsFolder() const; | ||||
| 		// 是否是文件夹
 | ||||
| 		bool IsFolder() const; | ||||
| 
 | ||||
| 	// 删除文件
 | ||||
| 	bool Delete(); | ||||
| 		// 删除文件
 | ||||
| 		bool Delete(); | ||||
| 
 | ||||
| 	// 获取文件路径
 | ||||
| 	const String& GetPath() const; | ||||
| 		// 获取文件路径
 | ||||
| 		const String& GetPath() const; | ||||
| 
 | ||||
| 	// 获取文件扩展名
 | ||||
| 	String GetExtension() const; | ||||
| 		// 获取文件扩展名
 | ||||
| 		String GetExtension() const; | ||||
| 
 | ||||
| 	// 释放资源到临时文件目录
 | ||||
| 	static File Extract( | ||||
| 		int resource_name,				/* 资源名称 */ | ||||
| 		const String& resource_type,	/* 资源类型 */ | ||||
| 		const String& dest_file_name	/* 目标文件名 */ | ||||
| 	); | ||||
| 		// 释放资源到临时文件目录
 | ||||
| 		static File Extract( | ||||
| 			int resource_name,				/* 资源名称 */ | ||||
| 			const String& resource_type,	/* 资源类型 */ | ||||
| 			const String& dest_file_name	/* 目标文件名 */ | ||||
| 		); | ||||
| 
 | ||||
| 	// 添加文件搜索路径
 | ||||
| 	static void AddSearchPath( | ||||
| 		const String& path | ||||
| 	); | ||||
| 
 | ||||
| 	// 创建文件夹
 | ||||
| 	static bool CreateFolder( | ||||
| 		const String& dir_path	/* 文件夹路径 */ | ||||
| 	); | ||||
| 		// 添加文件搜索路径
 | ||||
| 		static void AddSearchPath( | ||||
| 			const String& path | ||||
| 		); | ||||
| 
 | ||||
| 		// 创建文件夹
 | ||||
| 		static bool CreateFolder( | ||||
| 			const String& dir_path	/* 文件夹路径 */ | ||||
| 		); | ||||
| 
 | ||||
| 	// 弹出打开文件对话框
 | ||||
| 	static File ShowOpenDialog( | ||||
| 		const String& title = L"打开",	/* 对话框标题 */ | ||||
| 		const String& filter = L""		/* 筛选扩展名,例如 "*.jpg;*.jpeg" */ | ||||
| 	); | ||||
| 		// 弹出打开文件对话框
 | ||||
| 		static File ShowOpenDialog( | ||||
| 			const String& title = L"打开",	/* 对话框标题 */ | ||||
| 			const String& filter = L""		/* 筛选扩展名,例如 "*.jpg;*.jpeg" */ | ||||
| 		); | ||||
| 
 | ||||
| 	// 弹出保存文件对话框
 | ||||
| 	static File ShowSaveDialog( | ||||
| 		const String& title = L"保存",	/* 对话框标题 */ | ||||
| 		const String& def_file = L"",	/* 默认保存的文件名 */ | ||||
| 		const String& def_ext = L""		/* 默认追加的扩展名,例如 "txt" */ | ||||
| 	); | ||||
| 		// 弹出保存文件对话框
 | ||||
| 		static File ShowSaveDialog( | ||||
| 			const String& title = L"保存",	/* 对话框标题 */ | ||||
| 			const String& def_file = L"",	/* 默认保存的文件名 */ | ||||
| 			const String& def_ext = L""		/* 默认追加的扩展名,例如 "txt" */ | ||||
| 		); | ||||
| 
 | ||||
| protected: | ||||
| 	DWORD attributes_; | ||||
| 	String file_path_; | ||||
| 	protected: | ||||
| 		DWORD attributes_; | ||||
| 		String file_path_; | ||||
| 
 | ||||
| 	static std::list<String> search_paths_; | ||||
| }; | ||||
| 		static std::list<String> search_paths_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 路径
 | ||||
| class Path | ||||
| { | ||||
| 	friend class Game; | ||||
| 	// 路径
 | ||||
| 	class Path | ||||
| 	{ | ||||
| 		friend class Game; | ||||
| 
 | ||||
| public: | ||||
| 	// 获取数据的默认保存路径
 | ||||
| 	static const String& GetDataPath(); | ||||
| 	public: | ||||
| 		// 获取数据的默认保存路径
 | ||||
| 		static const String& GetDataPath(); | ||||
| 
 | ||||
| 	// 获取临时文件目录
 | ||||
| 	static const String& GetTemporaryPath(); | ||||
| 		// 获取临时文件目录
 | ||||
| 		static const String& GetTemporaryPath(); | ||||
| 
 | ||||
| 	// 获取 LocalAppData 目录
 | ||||
| 	static const String& GetLocalAppDataPath(); | ||||
| 		// 获取 LocalAppData 目录
 | ||||
| 		static const String& GetLocalAppDataPath(); | ||||
| 
 | ||||
| 	// 获取当前程序的运行路径
 | ||||
| 	static const String& GetExeFilePath(); | ||||
| }; | ||||
| 		// 获取当前程序的运行路径
 | ||||
| 		static const String& GetExeFilePath(); | ||||
| 	}; | ||||
| 
 | ||||
| } | ||||
|  | @ -5,145 +5,145 @@ namespace e2d | |||
| { | ||||
| 
 | ||||
| 
 | ||||
| class Game; | ||||
| class Scene; | ||||
| 	class Game; | ||||
| 	class Scene; | ||||
| 
 | ||||
| // 场景过渡
 | ||||
| class Transition : | ||||
| 	public Ref | ||||
| { | ||||
| 	friend class Game; | ||||
| 	// 场景过渡
 | ||||
| 	class Transition : | ||||
| 		public Ref | ||||
| 	{ | ||||
| 		friend class Game; | ||||
| 
 | ||||
| public: | ||||
| 	explicit Transition( | ||||
| 		Scene* scene, | ||||
| 		float duration | ||||
| 	); | ||||
| 	public: | ||||
| 		explicit Transition( | ||||
| 			Scene* scene, | ||||
| 			float duration | ||||
| 		); | ||||
| 
 | ||||
| 	virtual ~Transition(); | ||||
| 		virtual ~Transition(); | ||||
| 
 | ||||
| 	// 场景过渡动画是否结束
 | ||||
| 	bool IsDone(); | ||||
| 		// 场景过渡动画是否结束
 | ||||
| 		bool IsDone(); | ||||
| 
 | ||||
| protected: | ||||
| 	// 初始化场景过渡动画
 | ||||
| 	virtual bool Init( | ||||
| 		Game * game, | ||||
| 		Scene * prev | ||||
| 	); | ||||
| 	protected: | ||||
| 		// 初始化场景过渡动画
 | ||||
| 		virtual bool Init( | ||||
| 			Game * game, | ||||
| 			Scene * prev | ||||
| 		); | ||||
| 
 | ||||
| 	// 更新场景过渡动画
 | ||||
| 	virtual void Update(); | ||||
| 		// 更新场景过渡动画
 | ||||
| 		virtual void Update(); | ||||
| 
 | ||||
| 	// 渲染场景过渡动画
 | ||||
| 	virtual void Draw(); | ||||
| 		// 渲染场景过渡动画
 | ||||
| 		virtual void Draw(); | ||||
| 
 | ||||
| 	// 停止场景过渡动画
 | ||||
| 	virtual void Stop(); | ||||
| 		// 停止场景过渡动画
 | ||||
| 		virtual void Stop(); | ||||
| 
 | ||||
| 	// 重置场景过渡动画
 | ||||
| 	virtual void Reset() { }; | ||||
| 		// 重置场景过渡动画
 | ||||
| 		virtual void Reset() { }; | ||||
| 
 | ||||
| protected: | ||||
| 	bool	done_; | ||||
| 	float	duration_; | ||||
| 	float	delta_; | ||||
| 	Time	started_; | ||||
| 	Scene*	out_scene_; | ||||
| 	Scene*	in_scene_; | ||||
| 	ID2D1Layer * out_layer_; | ||||
| 	ID2D1Layer * in_layer_; | ||||
| 	D2D1_LAYER_PARAMETERS out_layer_param_; | ||||
| 	D2D1_LAYER_PARAMETERS in_layer_param_; | ||||
| }; | ||||
| 	protected: | ||||
| 		bool	done_; | ||||
| 		float	duration_; | ||||
| 		float	delta_; | ||||
| 		Time	started_; | ||||
| 		Scene*	out_scene_; | ||||
| 		Scene*	in_scene_; | ||||
| 		ID2D1Layer * out_layer_; | ||||
| 		ID2D1Layer * in_layer_; | ||||
| 		D2D1_LAYER_PARAMETERS out_layer_param_; | ||||
| 		D2D1_LAYER_PARAMETERS in_layer_param_; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 淡入淡出过渡
 | ||||
| class FadeTransition : | ||||
| 	public Transition | ||||
| { | ||||
| public: | ||||
| 	explicit FadeTransition( | ||||
| 		Scene* scene,		/* 切换的场景 */ | ||||
| 		float duration		/* 动画持续时长 */ | ||||
| 	); | ||||
| 	// 淡入淡出过渡
 | ||||
| 	class FadeTransition : | ||||
| 		public Transition | ||||
| 	{ | ||||
| 	public: | ||||
| 		explicit FadeTransition( | ||||
| 			Scene* scene,		/* 切换的场景 */ | ||||
| 			float duration		/* 动画持续时长 */ | ||||
| 		); | ||||
| 
 | ||||
| protected: | ||||
| 	// 更新动画
 | ||||
| 	virtual void Update() override; | ||||
| 	protected: | ||||
| 		// 更新动画
 | ||||
| 		virtual void Update() override; | ||||
| 
 | ||||
| 	virtual bool Init( | ||||
| 		Game * game, | ||||
| 		Scene * prev | ||||
| 	) override; | ||||
| }; | ||||
| 		virtual bool Init( | ||||
| 			Game * game, | ||||
| 			Scene * prev | ||||
| 		) override; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 渐变过渡
 | ||||
| class EmergeTransition : | ||||
| 	public Transition | ||||
| { | ||||
| public: | ||||
| 	explicit EmergeTransition( | ||||
| 		Scene* scene,		/* 切换的场景 */ | ||||
| 		float duration		/* 浮现动画持续时长 */ | ||||
| 	); | ||||
| 	// 渐变过渡
 | ||||
| 	class EmergeTransition : | ||||
| 		public Transition | ||||
| 	{ | ||||
| 	public: | ||||
| 		explicit EmergeTransition( | ||||
| 			Scene* scene,		/* 切换的场景 */ | ||||
| 			float duration		/* 浮现动画持续时长 */ | ||||
| 		); | ||||
| 
 | ||||
| protected: | ||||
| 	virtual void Update() override; | ||||
| 	protected: | ||||
| 		virtual void Update() override; | ||||
| 
 | ||||
| 	virtual bool Init( | ||||
| 		Game * game, | ||||
| 		Scene * prev | ||||
| 	) override; | ||||
| }; | ||||
| 		virtual bool Init( | ||||
| 			Game * game, | ||||
| 			Scene * prev | ||||
| 		) override; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 盒状过渡
 | ||||
| class BoxTransition : | ||||
| 	public Transition | ||||
| { | ||||
| public: | ||||
| 	explicit BoxTransition( | ||||
| 		Scene* scene,		/* 切换的场景 */ | ||||
| 		float duration		/* 动画持续时长 */ | ||||
| 	); | ||||
| 	// 盒状过渡
 | ||||
| 	class BoxTransition : | ||||
| 		public Transition | ||||
| 	{ | ||||
| 	public: | ||||
| 		explicit BoxTransition( | ||||
| 			Scene* scene,		/* 切换的场景 */ | ||||
| 			float duration		/* 动画持续时长 */ | ||||
| 		); | ||||
| 
 | ||||
| protected: | ||||
| 	virtual void Update() override; | ||||
| 	protected: | ||||
| 		virtual void Update() override; | ||||
| 
 | ||||
| 	virtual bool Init( | ||||
| 		Game * game, | ||||
| 		Scene * prev | ||||
| 	) override; | ||||
| }; | ||||
| 		virtual bool Init( | ||||
| 			Game * game, | ||||
| 			Scene * prev | ||||
| 		) override; | ||||
| 	}; | ||||
| 
 | ||||
| 
 | ||||
| // 移入过渡
 | ||||
| class MoveTransition : | ||||
| 	public Transition | ||||
| { | ||||
| public: | ||||
| 	explicit MoveTransition( | ||||
| 		Scene* scene,							/* 切换的场景 */ | ||||
| 		float moveDuration,						/* 场景移动动画持续时长 */ | ||||
| 		Direction direction = Direction::Left	/* 场景移动方向 */ | ||||
| 	); | ||||
| 	// 移入过渡
 | ||||
| 	class MoveTransition : | ||||
| 		public Transition | ||||
| 	{ | ||||
| 	public: | ||||
| 		explicit MoveTransition( | ||||
| 			Scene* scene,							/* 切换的场景 */ | ||||
| 			float moveDuration,						/* 场景移动动画持续时长 */ | ||||
| 			Direction direction = Direction::Left	/* 场景移动方向 */ | ||||
| 		); | ||||
| 
 | ||||
| protected: | ||||
| 	virtual void Update() override; | ||||
| 	protected: | ||||
| 		virtual void Update() override; | ||||
| 
 | ||||
| 	virtual bool Init( | ||||
| 		Game * game, | ||||
| 		Scene * prev | ||||
| 	) override; | ||||
| 		virtual bool Init( | ||||
| 			Game * game, | ||||
| 			Scene * prev | ||||
| 		) override; | ||||
| 
 | ||||
| 	virtual void Reset() override; | ||||
| 		virtual void Reset() override; | ||||
| 
 | ||||
| protected: | ||||
| 	Direction	direction_; | ||||
| 	Point		pos_delta_; | ||||
| 	Point		start_pos_; | ||||
| }; | ||||
| 	protected: | ||||
| 		Direction	direction_; | ||||
| 		Point		pos_delta_; | ||||
| 		Point		start_pos_; | ||||
| 	}; | ||||
| 
 | ||||
| } | ||||
|  | @ -19,16 +19,17 @@ | |||
|     </ProjectConfiguration> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\..\core\e2dnode.h" /> | ||||
|     <ClInclude Include="..\..\core\easy2d.h" /> | ||||
|     <ClInclude Include="..\..\core\e2daction.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcommon.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcomponent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2devent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dimpl.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmodule.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmacros.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmanager.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtool.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtransition.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  | @ -80,14 +81,14 @@ | |||
|     <ClCompile Include="..\..\core\Event\KeyEvent.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Event\MouseEvent.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Manager\CollisionManager.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Button.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Canvas.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Scene.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Menu.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Node.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Sprite.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Text.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\ToggleButton.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Component\Button.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Component\ToggleButton.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Component\Menu.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Tool\Data.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Tool\File.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Tool\Music.cpp" /> | ||||
|  |  | |||
|  | @ -32,15 +32,16 @@ | |||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\..\core\easy2d.h" /> | ||||
|     <ClInclude Include="..\..\core\e2daction.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcommon.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmacros.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmanager.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtransition.h" /> | ||||
|     <ClInclude Include="..\..\core\e2devent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmodule.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcomponent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dimpl.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dnode.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtool.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\..\core\Action\Action.cpp"> | ||||
|  | @ -154,12 +155,6 @@ | |||
|     <ClCompile Include="..\..\core\Custom\VoiceCallback.cpp"> | ||||
|       <Filter>Custom</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\Button.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\Menu.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\Node.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|  | @ -169,9 +164,6 @@ | |||
|     <ClCompile Include="..\..\core\Node\Text.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\ToggleButton.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Tool\Data.cpp"> | ||||
|       <Filter>Tool</Filter> | ||||
|     </ClCompile> | ||||
|  | @ -244,5 +236,14 @@ | |||
|     <ClCompile Include="..\..\core\Action\Callback.cpp"> | ||||
|       <Filter>Action</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Component\Button.cpp"> | ||||
|       <Filter>Component</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Component\Menu.cpp"> | ||||
|       <Filter>Component</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Component\ToggleButton.cpp"> | ||||
|       <Filter>Component</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
|  | @ -163,16 +163,17 @@ | |||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\..\core\e2dnode.h" /> | ||||
|     <ClInclude Include="..\..\core\easy2d.h" /> | ||||
|     <ClInclude Include="..\..\core\e2daction.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcommon.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcomponent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2devent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dimpl.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmodule.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmacros.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmanager.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtool.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtransition.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  | @ -224,14 +225,14 @@ | |||
|     <ClCompile Include="..\..\core\Event\KeyEvent.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Event\MouseEvent.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Manager\CollisionManager.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Button.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Canvas.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Scene.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Menu.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Node.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Sprite.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\Text.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Node\ToggleButton.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Component\Button.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Component\ToggleButton.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Component\Menu.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Tool\Data.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Tool\File.cpp" /> | ||||
|     <ClCompile Include="..\..\core\Tool\Music.cpp" /> | ||||
|  |  | |||
|  | @ -32,15 +32,16 @@ | |||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\..\core\easy2d.h" /> | ||||
|     <ClInclude Include="..\..\core\e2daction.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcommon.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmacros.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmanager.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtransition.h" /> | ||||
|     <ClInclude Include="..\..\core\e2devent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dmodule.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dcomponent.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dimpl.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dnode.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dtool.h" /> | ||||
|     <ClInclude Include="..\..\core\e2dutil.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\..\core\Action\Action.cpp"> | ||||
|  | @ -154,12 +155,6 @@ | |||
|     <ClCompile Include="..\..\core\Custom\VoiceCallback.cpp"> | ||||
|       <Filter>Custom</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\Button.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\Menu.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\Node.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|  | @ -169,9 +164,6 @@ | |||
|     <ClCompile Include="..\..\core\Node\Text.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Node\ToggleButton.cpp"> | ||||
|       <Filter>Node</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Tool\Data.cpp"> | ||||
|       <Filter>Tool</Filter> | ||||
|     </ClCompile> | ||||
|  | @ -244,5 +236,14 @@ | |||
|     <ClCompile Include="..\..\core\Action\Callback.cpp"> | ||||
|       <Filter>Action</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Component\Button.cpp"> | ||||
|       <Filter>Component</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Component\Menu.cpp"> | ||||
|       <Filter>Component</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\..\core\Component\ToggleButton.cpp"> | ||||
|       <Filter>Component</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
		Loading…
	
		Reference in New Issue