143 lines
3.0 KiB
C
143 lines
3.0 KiB
C
|
|
#ifndef _GAME_MAP_H_
|
|||
|
|
#define _GAME_MAP_H_
|
|||
|
|
|
|||
|
|
/*************************************************************
|
|||
|
|
* <EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽڱ<EFBFBD>ʾһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ꡣ
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ֵΪ1<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>겻<EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
************************************************************/
|
|||
|
|
|
|||
|
|
//<2F><>ǰ<EFBFBD><C7B0>ͼ<EFBFBD>汾<EFBFBD><E6B1BE>
|
|||
|
|
const unsigned int MapFileVersion_Current = 0x0102;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const unsigned int MAPFLAG_MOVEABLE = 0x8000;
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* <EFBFBD><EFBFBD>ͼ<EFBFBD>ļ<EFBFBD>ͷ<EFBFBD>ṹ
|
|||
|
|
*/
|
|||
|
|
#pragma pack(push, 1)
|
|||
|
|
struct MAPFILE_HEADER_NEW
|
|||
|
|
{
|
|||
|
|
char hdr_[5]; //"map"
|
|||
|
|
int ver_;
|
|||
|
|
unsigned char grid_size_; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>64<36><34><EFBFBD><EFBFBD>
|
|||
|
|
int pxi_width_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>С
|
|||
|
|
int pix_height_;
|
|||
|
|
int width_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|||
|
|
int height_; //<2F><>ͼ<EFBFBD>߶<EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct MAPFILE_HEADER
|
|||
|
|
{
|
|||
|
|
unsigned int version_; //<2F>ļ<EFBFBD><C4BC>汾0x0101
|
|||
|
|
int width_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|||
|
|
int height_; //<2F><>ͼ<EFBFBD>߶<EFBFBD>
|
|||
|
|
int bg_img_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
|||
|
|
unsigned int data_size_; //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6>ֽڳ<D6BD><DAB3><EFBFBD>
|
|||
|
|
unsigned char reseve_[32];
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>Ľṹ
|
|||
|
|
struct MAPGrid
|
|||
|
|
{
|
|||
|
|
unsigned short bg_img_; // <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
|||
|
|
unsigned short ft_img_; // ǰ<><C7B0>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
|||
|
|
unsigned short flag_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
|||
|
|
unsigned char obj_root_; // <20>زķ<D8B2><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
unsigned char reseve_; // ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
unsigned short effect_id_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Чid
|
|||
|
|
unsigned short width_; // <20><>Ч<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
|||
|
|
unsigned short height_; // <20><>Ч<EFBFBD>ĸ߶<C4B8>
|
|||
|
|
} ;
|
|||
|
|
|
|||
|
|
enum GripFlag
|
|||
|
|
{
|
|||
|
|
gfBlock = 0, //<2F>赲
|
|||
|
|
gfCanMove = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
gfThrough = 2, //<><CDB8><EFBFBD><EFBFBD>
|
|||
|
|
gfNofly = 3, //<2F>赲<EFBFBD>Ҳ<EFBFBD><D2B2>ܷ<EFBFBD>Ծ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct MAPGrid_NEW
|
|||
|
|
{
|
|||
|
|
unsigned char flag_; // 0=<3D>赵<EFBFBD><E8B5B5>1=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2=<><CDB8><EFBFBD><EFBFBD>,3=<3D>赲<EFBFBD>Ҳ<EFBFBD><D2B2>ܷ<EFBFBD>Ծ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#pragma pack(pop)
|
|||
|
|
|
|||
|
|
class GameMap
|
|||
|
|
{
|
|||
|
|
private:
|
|||
|
|
static BaseAllocator mapAlloc_;
|
|||
|
|
protected:
|
|||
|
|
unsigned int width_; // <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|||
|
|
unsigned int height_; // <20><>ͼ<EFBFBD>߶<EFBFBD>
|
|||
|
|
int* moveable_index_; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ŀ<EFBFBD><C4BF>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>ʱûʹ<C3BB>õ<EFBFBD>
|
|||
|
|
int moveable_ount_; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
GameMap();
|
|||
|
|
virtual ~GameMap();
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>ص<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> */
|
|||
|
|
bool LoadFromStream(stream::BaseStream& stream, bool newver);
|
|||
|
|
/* <20><><EFBFBD>ļ<EFBFBD><C4BC>м<EFBFBD><D0BC>ص<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> */
|
|||
|
|
bool LoadFromFile(const char* fn, bool newver);
|
|||
|
|
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ĵ<EFBFBD>ͼ */
|
|||
|
|
void initDefault(unsigned int w, unsigned int h);
|
|||
|
|
|
|||
|
|
/* <20><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> */
|
|||
|
|
inline int getWidth()
|
|||
|
|
{
|
|||
|
|
return width_;
|
|||
|
|
}
|
|||
|
|
/* <20><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD>߶<EFBFBD> */
|
|||
|
|
inline int getHeight()
|
|||
|
|
{
|
|||
|
|
return height_;
|
|||
|
|
}
|
|||
|
|
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline int getMoveableCount()
|
|||
|
|
{
|
|||
|
|
return moveable_ount_;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20><>ȡ<EFBFBD><C8A1>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA>Ŀ */
|
|||
|
|
inline int getUnitCount() const
|
|||
|
|
{
|
|||
|
|
return width_ * height_;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline int getPosIndex(unsigned int x, unsigned int y)
|
|||
|
|
{
|
|||
|
|
if (x >= width_ || y >= height_)
|
|||
|
|
return -1;
|
|||
|
|
|
|||
|
|
return y * width_ + x;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* <20>жϵ<D0B6>ͼ<EFBFBD><CDBC>x, y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true<75><65>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD> */
|
|||
|
|
inline bool canMove(unsigned int x, unsigned int y)
|
|||
|
|
{
|
|||
|
|
if (x >= width_ || y >= height_)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
return moveable_index_[y * width_ + x] != -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int getMapPosValue(unsigned int x, unsigned int y)
|
|||
|
|
{
|
|||
|
|
if (x >= width_ || y >= height_)
|
|||
|
|
return -1;
|
|||
|
|
|
|||
|
|
return moveable_index_[y * width_ + x] != -1 ? 0 : -1;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|