⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fieldinfo.h

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -