/** @file MapTeleporterManager.h
@brief
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:
* 作 者:zhangsongwei
* 完成日期:2008-3-27
*
* 取代版本:
* 作 者:
* 完成日期:
*/
#ifndef MAP_TELEPORTER_MANAGER_H
#define MAP_TELEPORTER_MANAGER_H
#include "../../../Base/aceall.h"
#include
/**
* @class CMapTeleporter
*
* @brief 地图上切换点信息
*
*/
struct MuxPoint
{
MuxPoint() : nPosX(0), nPosY(0) {}
MuxPoint( int nX, int nY ) : nPosX(nX), nPosY(nY) {};
int nPosX;
int nPosY;
};
class CMapTeleporter
{
friend class CMapTeleporterManager;
enum
{
IN_OFFSET = 0, // 入口区域
INVALD_OFFSET = 1, // 无效区域
OUT_OFFSET = 2 // 出口区域
};
private:
/// 构造
CMapTeleporter(unsigned int uiID, unsigned short usMapID, const MuxPoint &leftTopPoint, const MuxPoint &rightBottomPoint, unsigned int uiLinkID);
/// 析构
~CMapTeleporter(void);
public:
/// 地图上某点是否在该切换点有效范围内?
bool IsValidPoint(int iPosX, int iPosY);
/// 切换点周围的有效点集合
void GetValidPoint(int &iPosX, int &iPosY);
public:
/// 获取ID
unsigned int ID(void);
/// 自身地图ID
unsigned short MapID(void);
/// 连接地图ID
unsigned short LinkMapID(void);
/// 目标切换点ID
unsigned int LinkID(void);
private:
/// 切换点唯一ID
unsigned int m_uiID;
/// 地图编号
unsigned short m_usMapID;
/// 左上
MuxPoint m_leftTopPoint;
/// 右下
MuxPoint m_rightBottomPoint;
/// 目标切换点ID
unsigned int m_uiLinkID;
};
/**
* @class CMapTeleporterManager
*
* @brief 管理所有地图上的切换点信息
*
*/
class CMapTeleporterManager
{
friend class ACE_Singleton;
private:
/// 构造
CMapTeleporterManager(void);
/// 析构
~CMapTeleporterManager(void);
public:
/// 初始化
bool Init(const char * pszMapTeleporterFile);
/// 释放
void Clear(void);
/// 获取跳转点(该跳转点同时覆盖两点)
CMapTeleporter * GetMapTelePorter(unsigned short usMapID, int iPosX, int iPosY, int iPosX2, int iPosY2);
/// 获取跳转点(根据mapId获取(posx,posy)最近的跳转点)
CMapTeleporter * GetMapTelePorter(unsigned short usMapID, int iPosX, int iPosY);
/// 获取跳转点(根据teleporterID)
CMapTeleporter * GetMapTelePorter(unsigned int uiTeleporterID);
private:
/// 切换点列表
std::vector m_MapTeleporters;
};
typedef ACE_Singleton CMapTeleManagerSingle;
#endif/*MAP_TELEPORTER_MANAGER_H*/