Files
mir_server/server/LogicServer/misc/AreaRegion.h

64 lines
2.1 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
class CAreaRegion
{
public:
CAreaRegion();
~CAreaRegion();
/*
* Comments:
* Param INT_PTR uMapWidth:
* Param INT_PTR uMapHeight:
* @Return void:
*/
void setSize(INT_PTR uMapWidth, INT_PTR uMapHeight);
/*
* Comments:
* Param LPPOINT lpPoints: 3
* Param int nNumPoints:
* Param int nAreaIndex: ID1255
* Param LPBYTE lpMapData:
* *
*
* @Return bool: 3ID不在有效范围内
*/
bool addArea(LPPOINT lpPoints, int nNumPoints, int nAreaIndex, LPBYTE lpMapData = NULL);
/*
* Comments:
* @Return PBYTE: BYTE为单位的地图数据使[MapWidth * Y + X]
*/
inline PBYTE getAreaMapData(){ return m_pMapData; }
protected:
/** 定义填充区域时的区域数据结构,仅类内部使用 **/
struct AreaDesc
{
INT_PTR nLeft;
INT_PTR nTop;
INT_PTR nRight;
INT_PTR nBottom;
INT_PTR nWidth;
INT_PTR nHeight;
LPPOINT lpPoints;
LPBYTE lpMapData;
INT_PTR nPointCount;
BYTE btIndex;
};
//计算区域所处最小矩形信息
void calcAreaBounds(IN OUT AreaDesc &area);
//绘制区域边界
void drawAreaOutline(const AreaDesc area);
//填充区域内部
void fillAreaRegion(const AreaDesc area);
//以文字输出区域形状,用于调试
void traceAreaShape(const AreaDesc area);
protected:
INT_PTR m_nMapWdith;
INT_PTR m_nMapHeight;
PBYTE m_pMapData;
DECLARE_OBJECT_COUNTER(CAreaRegion)
};