#pragma once #include "ebase.h" namespace e2d { class ENode : public EObject { public: ENode(); ENode( EString name ); virtual ~ENode(); // 节点是否显示 virtual bool isVisiable() const; // 获取节点绘图顺序 virtual int getOrder() const; // 获取节点横坐标 virtual int getX() const; // 获取节点纵坐标 virtual int getY() const; // 获取节点坐标 virtual EPoint getPos() const; // 获取节点宽度 virtual UINT32 getWidth() const; // 获取节点高度 virtual UINT32 getHeight() const; // 获取节点大小 virtual ESize getSize() const; // 获取节点所在的矩形 virtual ERect getRect() const; // 获取父节点 virtual ENode * getParent() const; // 获取节点所在场景 virtual EScene * getParentScene() const; // 获取所有子节点 virtual std::vector &getChildren(); // 获取子节点数量 virtual size_t getChildrenCount() const; // 根据名字获取子节点 virtual ENode * getChild( EString name ) const; // 根据名字获取子节点 static ENode * getChild( EString name, const std::vector &children ); // 设置节点是否显示 virtual void setVisiable( bool value ); // 设置节点名称 virtual void setName( EString name ); // 设置节点横坐标 virtual void setX( int x ); // 设置节点纵坐标 virtual void setY( int y ); // 设置节点坐标 virtual void setPos( int x, int y ); // 设置节点坐标 virtual void setPos( EPoint p ); // 移动节点 virtual void move( int x, int y ); // 移动节点 virtual void move( EVector v ); // 设置节点宽度 virtual void setWidth( UINT32 width ); // 设置节点高度 virtual void setHeight( UINT32 height ); // 设置节点大小 virtual void setSize( UINT32 width, UINT32 height ); // 设置节点大小 virtual void setSize( ESize size ); // 设置节点所在的矩形 virtual void setRect( int x1, int y1, int x2, int y2 ); // 设置节点所在的矩形 virtual void setRect( EPoint leftTop, EPoint rightBottom ); // 设置节点所在的矩形 virtual void setRect( ERect rect ); // 设置节点绘图顺序 virtual void setOrder( int order ); // 设置节点所在场景 virtual void setParentScene( EScene * scene ); // 设置父节点 virtual void setParent( ENode* parent ); // 添加子节点 virtual void addChild( ENode * child, int order = 0 ); // 从父节点移除 virtual void removeFromParent( bool release = false ); // 移除子节点 virtual void removeChild( ENode * child, bool release = false ); // 移除子节点 virtual void removeChild( EString childName, bool release = false ); // 访问节点 virtual void callOn(); protected: // 渲染节点 virtual void _onRender(); // 节点状态转换 virtual void _onTransfrom(); // 子节点排序 void _sortChildren(); // 节点状态转换 void _transfrom(); protected: EString m_sName; size_t m_nHashName; int m_nOrder; bool m_bVisiable; bool m_bSortNeeded; bool m_bTransformNeeded; ERect m_Rect; EPoint m_Pos; EScene * m_pParentScene; ENode * m_pParent; std::vector m_vChildren; }; class ERectangle : public ENode { protected: virtual void _onRender() override; virtual void _onTransfrom() override; }; }