| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | #pragma once
 | 
					
						
							|  |  |  |  | #include "emacros.h"
 | 
					
						
							|  |  |  |  | #include "ecommon.h"
 | 
					
						
							|  |  |  |  | #include <vector>
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 11:42:36 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | // Base Classes
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace e2d | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | class EScene; | 
					
						
							|  |  |  |  | class ENode; | 
					
						
							|  |  |  |  | class EObjectManager; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | class EApp | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							|  |  |  |  | 	EApp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	~EApp(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
 | 
					
						
							|  |  |  |  | 	static EApp * get(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Register the window class and call methods for instantiating drawing resources
 | 
					
						
							|  |  |  |  | 	bool init( | 
					
						
							|  |  |  |  | 		e2d::EString title, | 
					
						
							|  |  |  |  | 		e2d::ESize size, | 
					
						
							|  |  |  |  | 		bool bShowConsole = false | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Register the window class and call methods for instantiating drawing resources
 | 
					
						
							|  |  |  |  | 	bool init( | 
					
						
							|  |  |  |  | 		e2d::EString title, | 
					
						
							|  |  |  |  | 		UINT32 width, | 
					
						
							|  |  |  |  | 		UINT32 height, | 
					
						
							|  |  |  |  | 		bool bShowConsole = false | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void run(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
 | 
					
						
							|  |  |  |  | 	void setWindowSize( | 
					
						
							|  |  |  |  | 		int width, | 
					
						
							|  |  |  |  | 		int height | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
 | 
					
						
							|  |  |  |  | 	void setWindowSize( | 
					
						
							|  |  |  |  | 		e2d::ESize size | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setWindowTitle( | 
					
						
							|  |  |  |  | 		e2d::EString title | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
 | 
					
						
							|  |  |  |  | 	e2d::EString getTitle(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
 | 
					
						
							|  |  |  |  | 	e2d::ESize getSize(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
 | 
					
						
							|  |  |  |  | 	UINT32 getWidth(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
 | 
					
						
							|  |  |  |  | 	UINT32 getHeight(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void enterScene( | 
					
						
							|  |  |  |  | 		EScene * scene, | 
					
						
							|  |  |  |  | 		bool save = true | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void backScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void clearScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	EScene * getCurrentScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>еij<D0B5><C4B3><EFBFBD>
 | 
					
						
							|  |  |  |  | 	EScene * getLoadingScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>еij<D0B5><C4B3><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setLoadingScene(EScene * scene); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ AppName
 | 
					
						
							|  |  |  |  | 	e2d::EString getAppName(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD> AppName
 | 
					
						
							|  |  |  |  | 	void setAppName( | 
					
						
							|  |  |  |  | 		e2d::EString appname | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>Ĵ<DEB8><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 	void setBkColor( | 
					
						
							|  |  |  |  | 		EColor::Enum color | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Դ
 | 
					
						
							|  |  |  |  | 	void free(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>رմ<D8B1><D5B4><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void close(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void show(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void quit(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void end(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	// Initialize device-independent resources.
 | 
					
						
							|  |  |  |  | 	HRESULT _createDeviceIndependentResources(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Initialize device-dependent resources.
 | 
					
						
							|  |  |  |  | 	HRESULT _createDeviceResources(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Release device-dependent resource.
 | 
					
						
							|  |  |  |  | 	void _discardDeviceResources(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void _mainLoop(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void _onControl(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Draw content.
 | 
					
						
							|  |  |  |  | 	bool _onRender(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void _enterNextScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ReSize the render target.
 | 
					
						
							|  |  |  |  | 	void _onResize( | 
					
						
							|  |  |  |  | 		UINT width, | 
					
						
							|  |  |  |  | 		UINT height | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// The windows procedure.
 | 
					
						
							|  |  |  |  | 	static LRESULT CALLBACK WndProc( | 
					
						
							|  |  |  |  | 		HWND hWnd, | 
					
						
							|  |  |  |  | 		UINT message, | 
					
						
							|  |  |  |  | 		WPARAM wParam, | 
					
						
							|  |  |  |  | 		LPARAM lParam | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	bool	m_bRunning; | 
					
						
							|  |  |  |  | 	bool	m_bSaveScene; | 
					
						
							|  |  |  |  | 	EString	m_sTitle; | 
					
						
							|  |  |  |  | 	EString	m_sAppName; | 
					
						
							|  |  |  |  | 	EColor::Enum m_ClearColor; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	EScene *	m_pCurrentScene; | 
					
						
							|  |  |  |  | 	EScene *	m_pNextScene; | 
					
						
							|  |  |  |  | 	EScene *	m_pLoadingScene; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | class EScene | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-13 14:34:33 +08:00
										 |  |  |  | 	friend EApp; | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 14:34:33 +08:00
										 |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 	EScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	~EScene(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual void init(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onEnter(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
 | 
					
						
							|  |  |  |  | 	virtual void onExit(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void add( | 
					
						
							|  |  |  |  | 		e2d::ENode * child,  | 
					
						
							|  |  |  |  | 		int zOrder = 0 | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// ɾ<><C9BE><EFBFBD>ӳ<EFBFBD>Ա
 | 
					
						
							|  |  |  |  | 	bool del( | 
					
						
							| 
									
										
										
										
											2017-10-13 11:42:36 +08:00
										 |  |  |  | 		e2d::ENode * child, | 
					
						
							|  |  |  |  | 		bool autoRelease = true | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
 | 
					
						
							|  |  |  |  | 	std::vector<e2d::ENode*> &getChildren(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա
 | 
					
						
							|  |  |  |  | 	void clearAllChildren(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	std::vector<e2d::ENode*> m_vChildren; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2017-10-13 11:42:36 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | 	void _exec(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 11:42:36 +08:00
										 |  |  |  | 	void _onRender(); | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | class EObject | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-13 14:34:33 +08:00
										 |  |  |  | 	friend EObjectManager; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 23:34:13 +08:00
										 |  |  |  | public: | 
					
						
							|  |  |  |  | 	EObject(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	virtual ~EObject(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 	void retain(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 	void release(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void autoRelease(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | private: | 
					
						
							|  |  |  |  | 	int m_nRefCount; | 
					
						
							|  |  |  |  | 	bool m_bManaged; | 
					
						
							|  |  |  |  | 	bool m_bAutoRelease; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } |