📄 tile.cpp
字号:
addObject(pEffect); // 咯扁辑 泅犁 鸥老俊 加茄 农府贸唱 酒捞袍俊霸 瓤苞甫 固模促. // pEffect->affectTile(); FLAG_SET(m_wFlags , TILE_EFFECT); __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 ID甫 啊柳 付过 瓤苞甫 鸥老俊辑 昏力茄促. // 悼矫俊 泅犁 鸥老狼 农府贸唱 酒捞袍俊霸 何咯等 付过 瓤苞 开矫// 昏力秦具 茄促.// 付过 瓤苞甫 昏力且 锭, 促弗 付过捞 巢酒乐促搁 TILE_EFFECT // 敲贰弊甫 掺瘤 臼酒具 茄促!// 弥利拳且 鞘夸己捞 乐促.. (search - unaffect - flag clear甫 茄锅俊..)//////////////////////////////////////////////////////////////void Tile::deleteEffect (ObjectID_t effectID) throw (NoSuchElementException , Error){ __BEGIN_TRY Assert(hasEffect()); // 付过 瓤苞啊 窍唱 捞惑老 荐 乐栏骨肺, deleteObject(OBJECT_PRIORITY_EFFECT) 阑 荤侩且 荐 绝促. deleteObject(effectID); // 泅犁 鸥老俊 固模 康氢阑 葛滴 朝赴促. 溜 农府贸客 酒捞袍俊 何咯等 // 付过 瓤苞甫 汗备秦具 茄促. // effect->unaffectTile(); // 促弗 付过捞 绝促搁 敲贰弊甫 馋促. /* try { getObject(OBJECT_PRIORITY_EFFECT); } catch (NoSuchElementException) { // 付过捞 绝栏骨肺 馋促. FLAG_CLEAR(m_wFlags , TILE_EFFECT); } */ // NoSuch力芭. by sigi. 2002.5.2 if (getObject(OBJECT_PRIORITY_EFFECT)==NULL) { FLAG_CLEAR(m_wFlags , TILE_EFFECT); } __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 ID甫 啊柳 付过 瓤苞甫 府畔茄促.//////////////////////////////////////////////////////////////Effect* Tile::getEffect (ObjectID_t effectID) throw (NoSuchElementException , Error){ __BEGIN_TRY if (hasEffect() == false) return NULL; return (Effect*)getObject(effectID); __END_CATCH}//////////////////////////////////////////////////////////////// EffectClass甫 啊柳 付过 瓤苞甫 府畔茄促.//////////////////////////////////////////////////////////////Effect* Tile::getEffect (Effect::EffectClass effectClass) throw (Error){ __BEGIN_TRY if (hasEffect()) { for (slist<Object*>::const_iterator itr = m_Objects.begin() ; itr != m_Objects.end() ; itr ++) { Effect* pEffect = NULL; if ((*itr)->getObjectClass() == Object::OBJECT_CLASS_EFFECT) { if (effectClass == ((Effect*)(*itr))->getEffectClass()) { // 弊繁 id 甫 啊柳 按眉甫 惯斑茄 版快 pEffect = dynamic_cast<Effect*>(*itr); return pEffect; } } } } return NULL; __END_CATCH}//////////////////////////////////////////////////////////////// 泅犁 鸥老阑 扒拱肺 汲沥茄促. //////////////////////////////////////////////////////////////void Tile::addBuilding (BuildingID_t buildingID) throw (Error){ __BEGIN_TRY Assert(! hasWalkingCreature()); Assert(! hasFlyingCreature()); Assert(! hasBurrowingCreature()); Assert(! hasEffect()); Assert(! hasObstacle()); Assert(! hasItem()); Assert(! hasBuilding()); Assert(! hasPortal()); Assert(! isTerrain()); FLAG_SET(m_wFlags , TILE_BUILDING); m_wOption = buildingID; __END_CATCH}//////////////////////////////////////////////////////////////// 泅犁 鸥老俊辑 扒拱阑 昏力茄促. 绢瞒乔 窍唱捞骨肺 漂喊洒 瘤沥且 鞘夸绰 绝促.//////////////////////////////////////////////////////////////void Tile::deleteBuilding () throw (Error){ __BEGIN_TRY Assert(hasBuilding()); FLAG_CLEAR(m_wFlags , TILE_BUILDING); m_wOption = 0; __END_CATCH}//////////////////////////////////////////////////////////////// 泅犁 鸥老俊 秦寸窍绰 扒拱 酒捞叼甫 府畔茄促.//////////////////////////////////////////////////////////////BuildingID_t Tile::getBuilding () const throw (Error){ __BEGIN_TRY Assert(hasBuilding()); return m_wOption; __END_CATCH}//////////////////////////////////////////////////////////////// 器呕阑 鸥老俊 眠啊茄促.//////////////////////////////////////////////////////////////void Tile::addPortal (Portal* pPortal) throw (Error){ __BEGIN_TRY Assert(pPortal != NULL); // 窍疵阑 朝酒促聪绰 农府贸唱 顶加俊 见绢乐绰 农府贸绰 器呕狼 康氢阑 罐阑 巴牢啊? 富 巴牢啊? // 鞠瓢 酒公 巴档 绝绰 后 鸥老捞绢具 茄促!!!!!!!!!!!!!!!!!!!! Assert(!hasWalkingCreature()); Assert(!hasFlyingCreature()); Assert(!hasBurrowingCreature()); Assert(!hasEffect()); Assert(!hasObstacle()); Assert(!hasItem()); Assert(!hasBuilding()); Assert(!hasPortal()); Assert(!isTerrain()); addObject(pPortal); FLAG_SET(m_wFlags , TILE_PORTAL); __END_CATCH}//////////////////////////////////////////////////////////////// 器呕阑 鸥老俊辑 昏力茄促. 绢瞒乔 窍唱捞骨肺 漂喊洒 瘤沥且 鞘夸啊 绝促.//////////////////////////////////////////////////////////////void Tile::deletePortal () throw (Error){ __BEGIN_TRY Assert(hasPortal()); deleteObject(OBJECT_PRIORITY_PORTAL); FLAG_CLEAR(m_wFlags , TILE_PORTAL); __END_CATCH}//////////////////////////////////////////////////////////////// 器呕 按眉甫 府畔茄促.//////////////////////////////////////////////////////////////Portal* Tile::getPortal () const throw (Error){ __BEGIN_TRY Assert(hasPortal()); return (Portal*)getObject(OBJECT_PRIORITY_PORTAL); __END_CATCH}//////////////////////////////////////////////////////////////// terrain 阑 鸥老俊 眠啊茄促. //////////////////////////////////////////////////////////////void Tile::addTerrain (TerrainID_t terrainID) throw (Error){ __BEGIN_TRY // 泅犁 鸥老俊 m_wOption 阑 荤侩窍绰 按眉牢 厘局拱, 扒拱, 器呕 // 殿捞 乐促搁 俊矾寸.. 溜 惑困俊辑 眉农秦拎具 茄促. Assert(! hasObstacle()); Assert(! hasBuilding()); Assert(! hasPortal()); // Terrain 敲贰弊甫 囊促. FLAG_SET(m_wFlags , TILE_TERRAIN); // 可记阑 Terrain ID 肺 汲沥茄促. m_wOption = terrainID; __END_CATCH}//////////////////////////////////////////////////////////////// terrain 阑 鸥老俊辑 昏力茄促.//////////////////////////////////////////////////////////////void Tile::deleteTerrain () throw (Error){ __BEGIN_TRY Assert(isTerrain()); // Terrain 敲贰弊甫 囊促. FLAG_CLEAR(m_wFlags , TILE_TERRAIN); // 可记阑 努府绢茄促. m_wOption = 0; __END_CATCH}//////////////////////////////////////////////////////////////// terrain 酒捞叼甫 府畔茄促.//////////////////////////////////////////////////////////////TerrainID_t Tile::getTerrain () const throw (Error){ __BEGIN_TRY Assert(isTerrain()); return m_wOption; __END_CATCH}//////////////////////////////////////////////////////////////// get debug string//////////////////////////////////////////////////////////////string Tile::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "Tile("; msg << "Flag:" << m_wFlags; msg << "\nObjects:"; slist<Object*>::const_iterator itr = m_Objects.begin(); for (; itr != m_Objects.end(); itr++) { msg << (*itr)->toString() << "\n"; } msg << "TileOption:" << (int)m_wOption; msg << ")"; return msg.toString(); __END_CATCH}//////////////////////////////////////////////////////////////// add object into object list//////////////////////////////////////////////////////////////void Tile::addObject (Object* pObject) throw (DuplicatedException){ __BEGIN_TRY __BEGIN_DEBUG Assert(pObject != NULL); Assert(pObject->getObjectID()!= 0); slist<Object*>::iterator before = m_Objects.end(); slist<Object*>::iterator current = m_Objects.begin(); /* // 快急 冀磐俊 笼绢持绰促. m_pSector->addObject(pObject); */ for (; current != m_Objects.end() ; before = current , current ++) { // 按眉 府胶飘绰 郴覆瞒鉴栏肺 沥纺登绢 乐促. // 蝶扼辑, 火涝窍妨绰 按眉狼 ObjectPriority啊 泅犁 iterator啊 啊府虐绰 // 按眉狼 ObjectPriority焊促 累阑 锭鳖瘤 风橇甫 倒妨具 茄促. if (pObject->getObjectPriority() < (*current)->getObjectPriority()) { if (before == m_Objects.end()) { // 按眉狼 鸥老 快急鉴困啊 啊厘 累栏骨肺 府胶飘狼 盖 菊俊 持绰促. m_Objects.push_front(pObject); } else { // 府胶飘狼 啊款单俊 持绰促. // O(1) insertion m_Objects.insert_after(before , pObject); } return; } else if (pObject->getObjectPriority() == (*current)->getObjectPriority()) { // effect绰 吝汗瞪 荐 乐促. if (pObject->getObjectPriority() == OBJECT_PRIORITY_EFFECT) { if (before == m_Objects.end()) { m_Objects.push_front(pObject); } else { m_Objects.insert_after(before , pObject); } return; } else { cerr << toString() << endl; cerr << "般媚柳 tile priority 蔼篮 = " << (int)pObject->getObjectPriority() << endl; cerr << "敲贰弊 蔼篮 = " << m_wFlags << endl; filelog("TILEBUG.log", "%s", toString().c_str()); throw DuplicatedException("tile priority duplicated"); } } } // 困狼 风橇俊辑 利例茄 困摹甫 茫瘤 给沁阑 版快绰 // (1) 府胶飘俊 按眉啊 窍唱档 绝绰 版快, // (2) 府胶飘狼 盖 第俊 持绢具 登绰 版快.. 啊 乐促. if (current == m_Objects.end()) { if (before == m_Objects.end()) { // 府胶飘啊 厚绢 乐扁 锭巩俊, 府胶飘狼 盖 菊俊 持绰促. m_Objects.push_front(pObject); } else { // OBJECT_PRIORITY啊 啊厘 奴 按眉捞骨肺, 府胶飘狼 盖 第俊 持绰促. // O(1) insertion m_Objects.insert_after(before , pObject); } } __END_DEBUG __END_CATCH} //////////////////////////////////////////////////////////////// Delete object from object list//////////////////////////////////////////////////////////////void Tile::deleteObject (ObjectID_t objectID) throw (NoSuchElementException){ __BEGIN_TRY /* // 刚历 冀磐俊辑 昏力茄促. m_pSector->deleteObject(objectID); */ slist<Object*>::iterator before = m_Objects.end(); slist<Object*>::iterator current = m_Objects.begin(); int i = 0; for (; current != m_Objects.end() ; before = current++) { if (objectID == (*current)->getObjectID()) { // 弊繁 id 甫 啊柳 按眉甫 惯斑茄 版快 if (before == m_Objects.end()) { // Delete first node m_Objects.pop_front(); } else { // O(1) deletion m_Objects.erase_after(before); } return; } i++; } Assert(false); /* if (before == m_Objects.end()) { cout << objectID << "酒公巴滴 绝寸" << endl; } else { cout << objectID << " " << (*before)->getObjectID() << endl; } */ // NoSuch力芭. by sigi. 2002.5.2 //throw NoSuchElementException("invalid object id"); __END_CATCH} //////////////////////////////////////////////////////////////// 漂沥 Tile Priority甫 啊柳 按眉甫 昏力茄促.//////////////////////////////////////////////////////////////void Tile::deleteObject (ObjectPriority objectPriority) throw (NoSuchElementException){ __BEGIN_TRY slist<Object*>::iterator before = m_Objects.end(); slist<Object*>::iterator current = m_Objects.begin() ; /* // 刚历 冀磐俊辑 昏力窍磊... Object* pObject = getObject(objectPriority); m_pSector->deleteObject(pObject->getObjectID()); */ for (; current != m_Objects.end() ; before = current ++) { if (objectPriority == (*current)->getObjectPriority()) { // 弊繁 tp 甫 啊柳 按眉甫 惯斑茄 版快 if (before == m_Objects.end()) { // Delete first node m_Objects.pop_front(); } else { // O(1) deletion m_Objects.erase_after(before); } return; } else if (objectPriority < (*current)->getObjectPriority()) { // 府胶飘啊 按眉狼 tp 狼 郴覆瞒鉴栏肺 沥纺登绢 乐栏骨肺, // 茫绊磊 窍绰 按眉狼 tp 焊促 泅犁 iterator狼 tp 啊 农促搁 // 弊繁 id 甫 啊柳 按眉绰 粮犁窍瘤 臼绰促. // ex> [0] - [3] - [4] 俊辑 [3]阑 iterator啊 啊府懦 锭, 泅犁 tp 啊 2牢 版快 break; } } // NoSuch力芭. by sigi. 2002.5.2 //throw NoSuchElementException("invalid object priority"); __END_CATCH}//////////////////////////////////////////////////////////////// 泅犁 鸥老俊辑 漂沥 ID甫 啊柳 坷宏璃飘甫 府畔茄促.// 府胶飘甫 葛滴 八祸秦具 茄促.//////////////////////////////////////////////////////////////Object* Tile::getObject (ObjectID_t objectID) const throw (NoSuchElementException){ __BEGIN_TRY for (slist<Object*>::const_iterator itr = m_Objects.begin(); itr != m_Objects.end() ; itr ++) { if (objectID == (*itr)->getObjectID()) { // 弊繁 id 甫 啊柳 按眉甫 惯斑茄 版快 return *itr; } } // 弊繁 id 甫 啊柳 按眉绰 粮犁窍瘤 臼绰促. // NoSuch力芭. by sigi. 2002.5.2 //throw NoSuchElementException("invalid object id"); // warning 锭巩俊.. - -; return NULL; __END_CATCH}//////////////////////////////////////////////////////////////// 漂沥 Tile Priority 甫 啊柳 按眉甫 府畔茄促.//////////////////////////////////////////////////////////////Object* Tile::getObject (ObjectPriority objectPriority) const throw (NoSuchElementException){ __BEGIN_TRY for (slist<Object*>::const_iterator itr = m_Objects.begin() ; itr != m_Objects.end() ; itr ++) { if (objectPriority == (*itr)->getObjectPriority()) { // 弊繁 id 甫 啊柳 按眉甫 惯斑茄 版快 return *itr; } else if (objectPriority < (*itr)->getObjectPriority()) { // 府胶飘啊 按眉狼 tp 狼 郴覆瞒鉴栏肺 沥纺登绢 乐栏骨肺, // 茫绊磊 窍绰 按眉狼 tp 焊促 泅犁 iterator狼 tp 啊 农促搁 // 弊繁 id 甫 啊柳 按眉绰 粮犁窍瘤 臼绰促. // ex> [0] - [3] - [4] 俊辑 [3]阑 iterator啊 啊府懦 锭, 泅犁 tp 啊 2牢 版快 break; } } // NoSuch力芭. by sigi. 2002.5.2 //throw NoSuchElementException("invalid tile priority"); return NULL; __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -