bool Map::removeThing(const ThingPtr& thing) { if(!thing) return false; bool ret = false; if(thing->isMissile()) { MissilePtr missile = thing->static_self_cast<Missile>(); int z = missile->getPosition().z; auto it = std::find(m_floorMissiles[z].begin(), m_floorMissiles[z].end(), missile); if(it != m_floorMissiles[z].end()) { m_floorMissiles[z].erase(it); ret = true; } } else if(thing->isAnimatedText()) { AnimatedTextPtr animatedText = thing->static_self_cast<AnimatedText>(); auto it = std::find(m_animatedTexts.begin(), m_animatedTexts.end(), animatedText); if(it != m_animatedTexts.end()) { m_animatedTexts.erase(it); ret = true; } } else if(thing->isStaticText()) { StaticTextPtr staticText = thing->static_self_cast<StaticText>(); auto it = std::find(m_staticTexts.begin(), m_staticTexts.end(), staticText); if(it != m_staticTexts.end()) { m_staticTexts.erase(it); ret = true; } } else if(const TilePtr& tile = thing->getTile()) ret = tile->removeThing(thing); notificateTileUpdate(thing->getPosition()); return ret; }
void Map::removeThingColor(const ThingPtr& thing) { if(!thing) return; if(thing->isItem()) thing->static_self_cast<Item>()->setColor(Color::alpha); else if(thing->isCreature()) { const TilePtr& tile = thing->getTile(); assert(tile); const ThingPtr& topThing = tile->getTopThing(); assert(topThing); topThing->static_self_cast<Item>()->setColor(Color::alpha); } }
void Map::colorizeThing(const ThingPtr& thing, const Color& color) { if(!thing) return; if(thing->isItem()) thing->static_self_cast<Item>()->setColor(color); else if(thing->isCreature()) { const TilePtr& tile = thing->getTile(); assert(tile); const ThingPtr& topThing = tile->getTopThing(); assert(topThing); topThing->static_self_cast<Item>()->setColor(color); } }