📄 fieldinfo.h
字号:
#ifndef __FILED_INFO_H__
#define __FILED_INFO_H__
#pragma once
//#include "MapDefine.h"
#include <Linkedlist.h>
#include <SolarHashTable.h>
#include <Struct.h>
#include <vector>
//#include <ProgramCommon/WzArchive.h>
//#include <3DEngine/Common/BoundingVolume.h>
//#include <TypeDefine.h>
#include <3DEngine/3DTerrain/WorldBase.h>
using namespace util;
class CWorldBase;
struct WzVector;
class ViewPortManager;
class MAPOBJECT_INFO
{
public:
MAPOBJECT_INFO(){}
~MAPOBJECT_INFO(){}
DWORD dwMapObjectID;
WzID wzId;
DWORD dwAttribute;
WzVector wvPos;
WzVector wzRot;
WzVector wzScale;
WzBoundingVolume wzBV;
};
class SectorInfo
{
enum
{
MAX_NEIGHBOR_SECTOR_NUM = 8,
};
public:
SectorInfo( DWORD index );
~SectorInfo();
inline DWORD GetSectorIndex() { return m_dwSectorIndex; }
VOID AddNeighborSectorInfo( SectorInfo * pSectorInfo );
inline CLinkedlist<SectorInfo *> & GetNeighborSectorInfoList() { return m_NeighborSectorInfo; }
private:
DWORD m_dwSectorIndex;
CLinkedlist<SectorInfo *> m_NeighborSectorInfo;
};
class FieldInfo
{
enum
{
_MAX_MAPOBJECT_INFO_NUM = 100,
};
public:
FieldInfo();
~FieldInfo();
// 阿 Field付促 龋免登绢具 窍绰 窃荐
INT Init();
VOID Release( INT Index );
VOID Create( const sFIELDINFO * pInfoIn ); //, ViewPortManager *pViewPortManager );
VOID Destroy();
BOOL Load();
VOID EstablishSectorInfo( WORD wSectorSize, BOOL bViewport );
//get,set
CODETYPE GetFieldCode() { return m_pFieldInfo->FieldCode; }
DWORD GetSectorIndexFor( WzVector* pwzVec );
VOID GetSectorIndexFor( WzVector * pwzVec, DWORD & dwXIndexOut, DWORD & dwYIndexOut );
inline DWORD GetSectorSize() { return m_dwSectorSize; }
inline SectorInfo* GetSectorInfo( DWORD dwIndex ) { return m_ppSectorInfo[dwIndex]; }
inline CWorldBase* GetWorldBase() { return m_pWorldBase; }
inline DWORD GetTotalSectorNum() { return m_dwTotalSectorNum; }
inline DWORD GetSectorXNum() { return m_dwSectorXNum; }
inline DWORD GetSectorYNum() { return m_dwSectorYNum; }
inline VOID SetFieldInfo( const sFIELDINFO * pInfoIn ){ m_pFieldInfo = pInfoIn; }
inline const sFIELDINFO * GetFieldInfo() { return m_pFieldInfo; }
BOOL CheckMapVersion( DWORD dwCheckSum );
VOID SetStartingTileIndex();
// DWORD GetRandomStartingTileIndex();
WzSpecialArea * GetAreaInfo( WzID AreaID ) { return m_pWorldBase->GetSpecialArea( AreaID ); }
WzSpecialArea * GetAreaInfoByIndex( INT index ) { return m_pWorldBase->GetSpecialAreaByIndex(index); }
util::SolarHashTable<MAPOBJECT_INFO *> *GetMapObjectInfoHashTable() { return m_pMapObjectInfoHashTable; }
BOOL GetViewPort() { return m_bViewport; }
template <class AreaOperator>
VOID ForeachArea( AreaOperator & op )
{
int num = m_pWorldBase->GetNumberOfSpecialArea();
for( int i = 0 ; i < num ; ++i )
{
WzSpecialArea * pArea = m_pWorldBase->GetSpecialAreaByIndex(i);
op(pArea);
}
}
BOOL IsValidCoordinates( WzVector* pwzVec );
private:
//VOID _loadAreaInfo( CWzArchive & archive );
VOID _loadMapObjectInfo( CWzArchive & archive );
//VOID _unloadAreaInfo();
VOID _unloadMapObjectInfo();
//WORD m_wFieldID;
BOOL m_bViewport; // 轰器飘 贸府甫 窍绰 甘牢瘤
WzVector m_wvStartingVector;
const sFIELDINFO * m_pFieldInfo;
DWORD m_dwSectorSize; // 窜困 冀磐狼 农扁(傈力炼扒 : 沥荤阿屈)
DWORD m_dwSectorXNum; // 鞘靛甫 备己窍绰 X谅钎惑狼 冀磐 肮荐
DWORD m_dwSectorYNum; // 鞘靛甫 备己窍绰 Y谅钎惑狼 冀磐 肮荐
DWORD m_dwTotalSectorNum; // 醚 冀磐 肮荐(m_dwSectorXNum * m_dwSectorYNum)
// 冀磐 牢郸胶甫 拌魂窍扁 困茄 函荐
int m_iShiftMinX; // 甘惑狼 弥家 X谅钎狼 例措蔼
int m_iShiftMinY; // 甘惑狼 弥家 Y谅钎狼 例措蔼
int m_iShiftMaxX; // 甘惑狼 弥措 X谅钎狼 例措蔼
int m_iShiftMaxY; // 甘惑狼 弥措 Y谅钎狼 例措蔼
//char m_szFileName[MAX_PATH];
CWorldBase * m_pWorldBase;
SectorInfo ** m_ppSectorInfo;
// MAP颇老狼 康开 沥焊
//util::SolarHashTable<AREA_INFO *> * m_pAreaInfoHashTable;
util::SolarHashTable<MAPOBJECT_INFO *> * m_pMapObjectInfoHashTable;
std::vector<DWORD> m_StartTiles;
ViewPortManager *m_pViewPortManager;
};
class MapInfo
{
friend class Map;
friend class MapInfoLoader;
enum { _MAX_FIELD_IN_MAP_NUM = 10, };
public:
MapInfo();
~MapInfo();
CODETYPE GetMapCode() { return m_pMapInfo->MapCode; }
inline VOID SetMapInfo( const sMAPINFO * pInfoIn ) { m_pMapInfo = pInfoIn; }
const sMAPINFO * GetMapInfo() { return m_pMapInfo; }
VOID AddFieldInfo( FieldInfo * pFieldInfo );
FieldInfo* GetFieldInfo( CODETYPE FieldCode ) { return m_FieldInfoHashTable.GetData( FieldCode ); }
util::SolarHashTable<FieldInfo *> * GetFieldInfoHashTable() { return &m_FieldInfoHashTable; }
protected:
VOID setFirst() { m_FieldInfoHashTable.SetFirst(); }
FieldInfo * getNext() { return m_FieldInfoHashTable.GetNext(); }
private:
const sMAPINFO * m_pMapInfo;
util::SolarHashTable<FieldInfo *> m_FieldInfoHashTable;
};
#endif // __FILED_INFO_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -