Creature* Tile::getTopVisibleCreature(const Creature* creature) const { if (const CreatureVector* creatures = getCreatures()) { if (creature) { const Player* player = creature->getPlayer(); if (player && player->isAccessPlayer()) { return getTopCreature(); } for (Creature* tileCreature : *creatures) { if (creature->canSeeCreature(tileCreature)) { return tileCreature; } } } else { for (Creature* tileCreature : *creatures) { if (!tileCreature->isInvisible()) { const Player* player = tileCreature->getPlayer(); if (!player || !player->isInGhostMode()) { return tileCreature; } } } } } return nullptr; }
const Creature* Tile::getTopVisibleCreature(const Creature* creature) const { if (const CreatureVector* creatures = getCreatures()) { if (creature) { const Player* player = creature->getPlayer(); if (player && player->isAccessPlayer()) { return getTopCreature(); } for (CreatureVector::const_iterator it = creatures->begin(), end = creatures->end(); it != end; ++it) { if (creature->canSeeCreature(*it)) { return *it; } } } else { for (CreatureVector::const_iterator it = creatures->begin(), end = creatures->end(); it != end; ++it) { if (!(*it)->isInvisible()) { const Player* player = (*it)->getPlayer(); if (!player || !player->isInGhostMode()) { return *it; } } } } } return NULL; }
ThingPtr Tile::getTopMultiUseThing() { if(isEmpty()) return nullptr; if(CreaturePtr topCreature = getTopCreature()) return topCreature; for(uint i = 0; i < m_things.size(); ++i) { ThingPtr thing = m_things[i]; if(thing->isForceUse()) return thing; } for(uint i = 0; i < m_things.size(); ++i) { ThingPtr thing = m_things[i]; if(!thing->isGround() && !thing->isGroundBorder() && !thing->isOnBottom() && !thing->isOnTop()) { if(i > 0 && thing->isSplash()) return m_things[i-1]; return thing; } } for(uint i = 0; i < m_things.size(); ++i) { ThingPtr thing = m_things[i]; if(!thing->isGround() && !thing->isGroundBorder() && !thing->isOnTop()) return thing; } return m_things[0]; }
Thing* Tile::getTopThing() { Thing* thing = NULL; thing = getTopCreature(); if(thing != NULL) return thing; thing = getTopDownItem(); if(thing != NULL) return thing; thing = getTopTopItem(); if(thing != NULL) return thing; if(ground) return ground; return NULL; }