202 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| #pragma once
 | |
| #include "ebase.h"
 | |
| 
 | |
| 
 | |
| namespace e2d
 | |
| {
 | |
| 
 | |
| 
 | |
| class CollisionManager;
 | |
| 
 | |
| // 形状
 | |
| class ShapeBase :
 | |
| 	public Object
 | |
| {
 | |
| 	friend CollisionManager;
 | |
| 	friend Node;
 | |
| 
 | |
| public:
 | |
| 	ShapeBase();
 | |
| 
 | |
| 	virtual ~ShapeBase();
 | |
| 
 | |
| 	// 判断两形状的交集关系
 | |
| 	virtual int getRelationWith(
 | |
| 		ShapeBase * pShape
 | |
| 	) const;
 | |
| 
 | |
| 	// 获取父节点
 | |
| 	Node * getParentNode() const;
 | |
| 
 | |
| 	// 启用或关闭该形状
 | |
| 	virtual void setEnable(
 | |
| 		bool bEnable
 | |
| 	);
 | |
| 
 | |
| 	// 设置形状的可见性
 | |
| 	void setVisiable(
 | |
| 		bool bVisiable
 | |
| 	);
 | |
| 
 | |
| 	// 设置绘制颜色
 | |
| 	void setColor(
 | |
| 		UINT32 color
 | |
| 	);
 | |
| 
 | |
| 	// 设置绘制透明度
 | |
| 	void setOpacity(
 | |
| 		double opacity
 | |
| 	);
 | |
| 
 | |
| 	// 设置大小跟随
 | |
| 	void setAutoResize(
 | |
| 		bool bEnable
 | |
| 	);
 | |
| 
 | |
| 	// 获取 ID2D1Geometry 对象
 | |
| 	virtual ID2D1Geometry * getD2dGeometry() const = 0;
 | |
| 
 | |
| protected:
 | |
| 	// 转换形状
 | |
| 	virtual void _transform();
 | |
| 
 | |
| 	// 重设大小
 | |
| 	virtual void _resize() = 0;
 | |
| 
 | |
| 	// 渲染形状
 | |
| 	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;
 | |
| };
 | |
| 
 | |
| 
 | |
| // 矩形
 | |
| class ShapeRectangle :
 | |
| 	public ShapeBase
 | |
| {
 | |
| public:
 | |
| 	// 创建一个默认矩形
 | |
| 	ShapeRectangle();
 | |
| 
 | |
| 	// 根据左上角坐标和宽高创建矩形
 | |
| 	ShapeRectangle(
 | |
| 		double x,
 | |
| 		double y,
 | |
| 		double width,
 | |
| 		double height
 | |
| 	);
 | |
| 
 | |
| 	// 创建一个和节点位置大小相同的矩形
 | |
| 	ShapeRectangle(
 | |
| 		Node * node
 | |
| 	);
 | |
| 
 | |
| 	virtual ~ShapeRectangle();
 | |
| 
 | |
| 	// 修改矩形大小
 | |
| 	void setRect(
 | |
| 		double left,
 | |
| 		double top,
 | |
| 		double right,
 | |
| 		double bottom
 | |
| 	);
 | |
| 
 | |
| 	// 获取 ID2D1Geometry 对象
 | |
| 	virtual ID2D1RectangleGeometry * getD2dGeometry() const override;
 | |
| 
 | |
| protected:
 | |
| 	// 重设大小
 | |
| 	virtual void _resize();
 | |
| 
 | |
| protected:
 | |
| 	ID2D1RectangleGeometry * m_pD2dRectangle;
 | |
| };
 | |
| 
 | |
| 
 | |
| // 圆形
 | |
| class ShapeCircle :
 | |
| 	public ShapeBase
 | |
| {
 | |
| public:
 | |
| 	// 创建一个默认圆形
 | |
| 	ShapeCircle();
 | |
| 
 | |
| 	// 根据圆心和半径创建圆形
 | |
| 	ShapeCircle(
 | |
| 		Point center,
 | |
| 		double radius
 | |
| 	);
 | |
| 
 | |
| 	// 创建一个和节点位置大小相同的圆形
 | |
| 	ShapeCircle(
 | |
| 		Node * node
 | |
| 	);
 | |
| 
 | |
| 	virtual ~ShapeCircle();
 | |
| 
 | |
| 	// 修改圆形大小
 | |
| 	void setCircle(
 | |
| 		Point center,
 | |
| 		double radius
 | |
| 	);
 | |
| 
 | |
| 	// 获取 ID2D1Geometry 对象
 | |
| 	virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
 | |
| 
 | |
| protected:
 | |
| 	// 重设大小
 | |
| 	virtual void _resize();
 | |
| 
 | |
| protected:
 | |
| 	ID2D1EllipseGeometry * m_pD2dCircle;
 | |
| };
 | |
| 
 | |
| 
 | |
| // 椭圆形
 | |
| class ShapeEllipse :
 | |
| 	public ShapeBase
 | |
| {
 | |
| public:
 | |
| 	// 创建一个默认椭圆
 | |
| 	ShapeEllipse();
 | |
| 
 | |
| 	// 根据圆心和半径创建椭圆
 | |
| 	ShapeEllipse(
 | |
| 		Point center,
 | |
| 		double radiusX,
 | |
| 		double radiusY
 | |
| 	);
 | |
| 
 | |
| 	// 创建一个和节点位置大小相同的椭圆
 | |
| 	ShapeEllipse(
 | |
| 		Node * node
 | |
| 	);
 | |
| 
 | |
| 	virtual ~ShapeEllipse();
 | |
| 
 | |
| 	// 修改椭圆大小
 | |
| 	void setEllipse(
 | |
| 		Point center,
 | |
| 		double radiusX,
 | |
| 		double radiusY
 | |
| 	);
 | |
| 
 | |
| 	// 获取 ID2D1Geometry 对象
 | |
| 	virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
 | |
| 
 | |
| protected:
 | |
| 	// 重设大小
 | |
| 	virtual void _resize();
 | |
| 
 | |
| protected:
 | |
| 	ID2D1EllipseGeometry * m_pD2dEllipse;
 | |
| };
 | |
| 
 | |
| } |