| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | #pragma once
 | 
					
						
							|  |  |  |  | #include "ebase.h"
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace e2d | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 18:48:21 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-01 00:04:33 +08:00
										 |  |  |  | class CollisionManager; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><>״
 | 
					
						
							|  |  |  |  | class ShapeBase : | 
					
						
							|  |  |  |  | 	public Object | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	friend CollisionManager; | 
					
						
							|  |  |  |  | 	friend Node; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | public: | 
					
						
							|  |  |  |  | 	ShapeBase(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	virtual ~ShapeBase(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ϵ
 | 
					
						
							|  |  |  |  | 	virtual Relation getRelationWith( | 
					
						
							|  |  |  |  | 		ShapeBase * pShape | 
					
						
							|  |  |  |  | 	) const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڵ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	Node * getParentNode() const; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>û<EFBFBD><C3BB>رո<D8B1><D5B8><EFBFBD>״
 | 
					
						
							|  |  |  |  | 	virtual void setEnable( | 
					
						
							|  |  |  |  | 		bool bEnable | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>Ŀɼ<C4BF><C9BC><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setVisiable( | 
					
						
							|  |  |  |  | 		bool bVisiable | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ɫ
 | 
					
						
							|  |  |  |  | 	void setColor( | 
					
						
							|  |  |  |  | 		UINT32 color | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setOpacity( | 
					
						
							|  |  |  |  | 		double opacity | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	void setAutoResize( | 
					
						
							|  |  |  |  | 		bool bEnable | 
					
						
							|  |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual ID2D1Geometry * getD2dGeometry() const = 0; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	// ת<><D7AA><EFBFBD><EFBFBD>״
 | 
					
						
							|  |  |  |  | 	virtual void _transform(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 	virtual void _resize() = 0; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><>Ⱦ<EFBFBD><C8BE>״
 | 
					
						
							|  |  |  |  | 	virtual void _render(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							|  |  |  |  | 	bool	m_bEnable; | 
					
						
							|  |  |  |  | 	bool	m_bIsVisiable; | 
					
						
							|  |  |  |  | 	bool	m_bAutoResize; | 
					
						
							|  |  |  |  | 	UINT32	m_nColor; | 
					
						
							|  |  |  |  | 	float	m_fOpacity; | 
					
						
							|  |  |  |  | 	Node *	m_pParentNode; | 
					
						
							|  |  |  |  | 	ID2D1TransformedGeometry * m_pTransformedShape; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | // <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | class ShapeRectangle : | 
					
						
							| 
									
										
										
										
											2018-04-01 00:04:33 +08:00
										 |  |  |  | 	public ShapeBase | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD>Ͼ<EFBFBD><CFBE><EFBFBD>
 | 
					
						
							|  |  |  |  | 	ShapeRectangle(); | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	ShapeRectangle( | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 		double x, | 
					
						
							|  |  |  |  | 		double y, | 
					
						
							|  |  |  |  | 		double width, | 
					
						
							|  |  |  |  | 		double height | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͽڵ<CDBD>λ<EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1>ͬ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	ShapeRectangle( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Node * node | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	virtual ~ShapeRectangle(); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20>ľ<DEB8><C4BE>δ<EFBFBD>С
 | 
					
						
							|  |  |  |  | 	void setRect( | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 		double left, | 
					
						
							|  |  |  |  | 		double top, | 
					
						
							|  |  |  |  | 		double right, | 
					
						
							|  |  |  |  | 		double bottom | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual ID2D1RectangleGeometry * getD2dGeometry() const override; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2018-03-07 20:14:58 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 	virtual void _resize(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | protected: | 
					
						
							|  |  |  |  | 	ID2D1RectangleGeometry * m_pD2dRectangle; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | // Բ<><D4B2>
 | 
					
						
							|  |  |  |  | class ShapeCircle : | 
					
						
							| 
									
										
										
										
											2018-04-01 00:04:33 +08:00
										 |  |  |  | 	public ShapeBase | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD><C4AC>Բ<EFBFBD><D4B2>
 | 
					
						
							|  |  |  |  | 	ShapeCircle(); | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ĺͰ뾶<CDB0><EBBEB6><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	ShapeCircle( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Point center, | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 		double radius | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͽڵ<CDBD>λ<EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1>ͬ<EFBFBD><CDAC>Բ<EFBFBD><D4B2>
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	ShapeCircle( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Node * node | 
					
						
							| 
									
										
										
										
											2017-10-29 23:48:32 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	virtual ~ShapeCircle(); | 
					
						
							| 
									
										
										
										
											2017-10-29 23:48:32 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><EFBFBD>Բ<EFBFBD>δ<EFBFBD>С
 | 
					
						
							|  |  |  |  | 	void setCircle( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Point center, | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 		double radius | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual ID2D1EllipseGeometry * getD2dGeometry() const override; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2018-03-07 20:14:58 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 	virtual void _resize(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | protected: | 
					
						
							|  |  |  |  | 	ID2D1EllipseGeometry * m_pD2dCircle; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | // <20><>Բ<EFBFBD><D4B2>
 | 
					
						
							|  |  |  |  | class ShapeEllipse : | 
					
						
							| 
									
										
										
										
											2018-04-01 00:04:33 +08:00
										 |  |  |  | 	public ShapeBase | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>Բ
 | 
					
						
							|  |  |  |  | 	ShapeEllipse(); | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ĺͰ뾶<CDB0><EBBEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	ShapeEllipse( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Point center, | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 		double radiusX, | 
					
						
							|  |  |  |  | 		double radiusY | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͽڵ<CDBD>λ<EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Բ
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	ShapeEllipse( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Node * node | 
					
						
							| 
									
										
										
										
											2017-10-29 23:48:32 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	virtual ~ShapeEllipse(); | 
					
						
							| 
									
										
										
										
											2018-03-30 01:41:29 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><EFBFBD><DEB8><EFBFBD>Բ<EFBFBD><D4B2>С
 | 
					
						
							|  |  |  |  | 	void setEllipse( | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | 		Point center, | 
					
						
							| 
									
										
										
										
											2018-02-27 21:07:43 +08:00
										 |  |  |  | 		double radiusX, | 
					
						
							|  |  |  |  | 		double radiusY | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | 	); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-31 11:59:51 +08:00
										 |  |  |  | 	// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	virtual ID2D1EllipseGeometry * getD2dGeometry() const override; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2018-03-07 20:14:58 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					
						
							|  |  |  |  | 	virtual void _resize(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-26 17:17:30 +08:00
										 |  |  |  | protected: | 
					
						
							|  |  |  |  | 	ID2D1EllipseGeometry * m_pD2dEllipse; | 
					
						
							|  |  |  |  | }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } |