📄 tile.h
字号:
//////////////////////////////////////////////////////////////////////////////// FileName : Tile.h// Written By : reiot@ewestsoft.com// Description : //////////////////////////////////////////////////////////////////////////////#ifndef __TILE_H__#define __TILE_H__#include <slist>#include "Types.h"#include "Exception.h"#include "Object.h"#include "Creature.h"#include "Item.h"#include "Obstacle.h"#include "Effect.h"#include "Portal.h"#include "Sector.h"// macro#define FLAG_ZERO(set) (set=0)#define FLAG_SET(set,flag) (set|=(1<<(flag)))#define FLAG_CLEAR(set,flag) (set&=~(1<<(flag)))#define FLAG_ISSET(set,flag) (set&(1<<(flag)))// type redefinitiontypedef WORD BuildingID_t;typedef WORD TerrainID_t;//////////////////////////////////////////////////////////////////////////////// Tile class://////////////////////////////////////////////////////////////////////////////class Packet;class Tile {public: enum TileFlags { TILE_GROUND_BLOCKED = 0 , // 鸥老狼 瘤惑捞 阜躯阑 版快 TILE_AIR_BLOCKED , // 鸥老狼 傍吝捞 阜躯阑 版快 TILE_UNDERGROUND_BLOCKED , // 鸥老狼 瘤窍啊 阜躯阑 版快 TILE_WALKING_CREATURE , // 鸥老狼 瘤惑俊 农府贸啊 乐阑 版快 TILE_FLYING_CREATURE , // 鸥老狼 傍吝俊 农府贸啊 乐阑 版快 TILE_BURROWING_CREATURE , // 鸥老狼 瘤窍俊 农府贸啊 乐阑 版快 TILE_ITEM, // 鸥老 困俊 酒捞袍捞 初咯 乐阑 版快 TILE_OBSTACLE , // 鸥老 困俊 惑怕甫 啊柳 厘局拱捞 初咯 乐阑 版快 TILE_EFFECT, // 鸥老 困俊 付过 按眉啊 乐阑 版快 TILE_BUILDING , // 鸥老 困俊 扒拱捞 乐阑 版快 TILE_PORTAL , // 鸥老 困俊 器呕捞 初咯 乐阑 版快 TILE_TERRAIN // 瓤苞甫 林绰 硅版 鸥老老 版快 };public: Tile(WORD m_Flag = 0, WORD m_Opt = 0) throw(); ~Tile() throw();public: bool addCreature(Creature* pCreature, bool bCheckEffect=true, bool bCheckPortal=true) throw(GameException, DuplicatedException, Error); void deleteCreature(ObjectID_t creatureID) throw(NoSuchElementException, Error); void deleteCreature(Creature::MoveMode mode) throw(NoSuchElementException, Error); Creature* getCreature(ObjectID_t creatureID) throw(NoSuchElementException, Error); Creature* getCreature(Creature::MoveMode mode) throw(NoSuchElementException, Error); bool hasWalkingCreature() const throw() { return FLAG_ISSET(m_wFlags, TILE_WALKING_CREATURE) > 0; } bool hasFlyingCreature() const throw() { return FLAG_ISSET(m_wFlags, TILE_FLYING_CREATURE) > 0; } bool hasBurrowingCreature() const throw() { return FLAG_ISSET(m_wFlags, TILE_BURROWING_CREATURE) > 0; } bool hasCreature(Creature::MoveMode mode) const throw() { return FLAG_ISSET(m_wFlags, mode + TILE_WALKING_CREATURE) > 0; } bool hasCreature() const throw() { return FLAG_ISSET(m_wFlags, TILE_WALKING_CREATURE) || FLAG_ISSET(m_wFlags, TILE_BURROWING_CREATURE) || FLAG_ISSET(m_wFlags, TILE_FLYING_CREATURE) ; }public: void addItem(Item* pItem) throw(DuplicatedException, Error); void deleteItem() throw(NoSuchElementException, Error); Item* getItem() throw(NoSuchElementException, Error); bool hasItem() const throw() { return FLAG_ISSET(m_wFlags, TILE_ITEM) > 0; } public: void addObstacle(Obstacle* pObstacle) throw(DuplicatedException, Error); void deleteObstacle() throw(NoSuchElementException, Error); Obstacle* getObstacle() throw(NoSuchElementException, Error); bool hasObstacle() const throw() { return FLAG_ISSET(m_wFlags, TILE_OBSTACLE) > 0; }public: void addEffect(Effect* pEffect) throw(DuplicatedException, Error); bool canAddEffect() throw(Error); void deleteEffect(ObjectID_t effectID) throw(NoSuchElementException, Error); Effect* getEffect(ObjectID_t effectID) throw(NoSuchElementException, Error); bool hasEffect() const throw() { return FLAG_ISSET(m_wFlags, TILE_EFFECT) > 0; } Effect* getEffect(Effect::EffectClass effectClass) throw(Error);public: void addBuilding(BuildingID_t buildingID) throw(Error); void deleteBuilding() throw(Error); BuildingID_t getBuilding() const throw(Error); bool hasBuilding() const throw() { return FLAG_ISSET(m_wFlags, TILE_BUILDING) > 0; }public: void addPortal(Portal* pPortal) throw(Error); void deletePortal() throw(Error); Portal* getPortal() const throw(Error); bool hasPortal() const throw() { return FLAG_ISSET(m_wFlags, TILE_PORTAL) > 0; }public: void addTerrain(TerrainID_t terrainID) throw(Error); void deleteTerrain() throw(Error); TerrainID_t getTerrain() const throw(Error); bool isTerrain() const throw() { return FLAG_ISSET(m_wFlags, TILE_TERRAIN) > 0; }public: bool isGroundBlocked() const throw() { return FLAG_ISSET(m_wFlags, TILE_GROUND_BLOCKED) > 0; } bool isAirBlocked() const throw() { return FLAG_ISSET(m_wFlags, TILE_AIR_BLOCKED) > 0; } bool isUndergroundBlocked() const throw() { return FLAG_ISSET(m_wFlags, TILE_UNDERGROUND_BLOCKED) > 0; } bool isBlocked(Creature::MoveMode mode) const throw() { return FLAG_ISSET(m_wFlags, TILE_GROUND_BLOCKED + mode) > 0; } void setBlocked(Creature::MoveMode mode) throw() { FLAG_SET(m_wFlags, TILE_GROUND_BLOCKED + mode); } void clearBlocked(Creature::MoveMode mode) throw() { FLAG_CLEAR(m_wFlags, TILE_GROUND_BLOCKED + mode); } bool isFixedGroundBlocked() const throw() { return isGroundBlocked() && !hasWalkingCreature(); }public: void addObject(Object* pObject) throw(DuplicatedException); void deleteObject(ObjectID_t objectID) throw(NoSuchElementException); void deleteObject(ObjectPriority tilePriority) throw(NoSuchElementException); Object* getObject(ObjectID_t objectID) const throw(NoSuchElementException); Object* getObject(ObjectPriority tilePriority) const throw(NoSuchElementException);public: WORD getOption() const throw() { return m_wOption; } void setOption(WORD option) throw() { m_wOption = option; }public: Sector* getSector(void) const { return m_pSector; } void setSector(Sector* pSector) { m_pSector = pSector; }public: const slist<Object*> & getObjectList() const throw() { return m_Objects; } slist<Object*> & getObjectList() throw() { return m_Objects; } string toString() const throw();private: WORD m_wFlags; // 鸥老 加己 敲贰弊 WORD m_wOption; // 可记 敲贰弊, 鸥老 加己 敲贰弊俊 蝶扼辑 促福霸 荤侩等促. slist<Object*> m_Objects; // 坷宏璃飘 器牢磐狼 府胶飘 Sector* m_pSector; // 捞 鸥老捞 加茄 冀磐俊 措茄 器牢磐};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -