mapinfo.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:4k
- #ifndef _ASIDER_TANK_ALPHA3_MAPINFO_H_
- #define _ASIDER_TANK_ALPHA3_MAPINFO_H_
- #include "object.h"
- #include "resinfo.h"
- enum WidthType{ WIDTH_32, WIDTH_16 };
- //-----------------------------------------------------------------------------
- // Classes defined in this header file
- //-----------------------------------------------------------------------------
- class CMapInfo;
- //-----------------------------------------------------------------------------
- // Default values of map file
- //-----------------------------------------------------------------------------
- #define GAME_MAP_FILE_IDENTITY 19801227
- #define GAME_MAP_VER_1_2_0 0x01020000 // map version 1.2.0
- #define DEFAULT_CX_BLOCKS 21
- #define DEFAULT_CY_BLOCKS 21
- #define DEFAULT_BLOCKS 441
- //-----------------------------------------------------------------------------
- // Map file header format, also the structures involved
- //-----------------------------------------------------------------------------
- typedef struct tagFILEHAEDER
- {
- DWORD dwFileID; // file info
- DWORD dwVersion;
- DWORD dwModifiedTime;
- char szAuthor[20];
- char szComment[80];
- DWORD dwDataOffsite; // start address of posbase
- DWORD dwTreasure; // treasure info
- int nTimePersist;
- BOOL bTimeRegular;
- int nInterval;
- int nMaxInter;
- int nMinInter;
- int nUnion; // player info
- int nTeam;
- int nComputer;
- int nWidth; // map info
- int nHeight;
- int nSingleSize;
- int nBlocks;
- int nNumOfLands;
- int iaTotal[10];
- // POINT *posBase; // tanks info
- // TANKINFO *infoTank;
- // BLOCK *pBlocks; // blocks info
- }FILEHEADER, * LPFILEHEADER;
- typedef struct tagTankInfo // for compatibility
- {
- int nUnion;
- int nTeam;
- BOOL bIsPlayer;
- POINT posLT;
- DWORD dwDir;
- int nLife;
- int nSpeed;
- int nPower;
- int nFire;
- DWORD dwEquip;
- DWORD dwReserved[4];
- }TANKINFO, * LPTANKINFO;
- typedef struct tagBLOCK {
- BYTE byObstacle; // land obstacle
- BYTE byClass; // landform kind
- WORD wExParam; // extra data
- }BLOCK, * LPBLOCK;
- //-----------------------------------------------------------------------------
- // Name: class MapInfo
- // Desc: Class to handle all data of the map
- //-----------------------------------------------------------------------------
- class CMapInfo
- {
- friend class ConsoleNet;
- char *m_szFileName;
- bool m_bReversed;
- int m_nBlocks;
- int m_cxBlocks;
- int m_cyBlocks;
- unsigned int m_uiTankNum;
- POINT *m_ptBase;
- BLOCK *m_pBlocks;
- TANKINFO *m_pTankInfo;
- public:
- CMapInfo();
- ~CMapInfo();
- // Status function
- bool IsReversed() { return m_bReversed; }
- // Access functions
- const char *GetMapFileName() { return m_szFileName; }
- void SetReversed( bool flag );
- unsigned int GetObjectNum( DWORD type ) { return m_uiTankNum; }
- // Creation/destruction methods
- bool LoadMap(const char *filename);
- void DestroyMap();
- // Methods
- void ConvertCoord( CObject * pobj );
- void Protect( RECT rt, bool flag, POINT *ppts, int &changed );
- // Methods of operations on map data
- void VerReverseBlock( int x, int y );
- void HorReverseBlock( int x, int y );
- bool VerReverseMap();
- bool HorReverseMap();
- bool CenterRotate180();
- int BlockCounter( DWORD land, CObjBlock *pobb );
- // Resource locator
- bool BlockLocator( int x, int y, RECT *prc, int &level );
- bool ObjectLocator( CObject *pobj, RECT *prc, int &level );
- bool ObjBlockLocator( CObjBlock *poblk, RECT *prc, int &level );
- // Collision test
- void ColRToMobile( RECT &rt, POINT step, CMobileObject **ppmos,
- int num, int except, UINT team, bool checkteam,
- int &hit );
- void ColRToB( POINT <, WidthType wt, POINT step, DWORD block_land,
- DWORD &over_land, DWORD remove_land, POINT *ptChanged,
- int &changed );
- protected:
- void Get4Mask( int left, int top, int *mask );
- void Get4Mask16( int left, int top, int *mask);
- bool ColR2R( RECT &rt_move, RECT rt_stable, POINT step );
- };
- #endif // _ASIDER_TANK_ALPHA3_MAPINFO_H_