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]; }
ThingPtr Tile::getTopUseThing() { if(isEmpty()) return nullptr; for(uint i = 0; i < m_things.size(); ++i) { ThingPtr thing = m_things[i]; if(thing->isForceUse() || (!thing->isGround() && !thing->isGroundBorder() && !thing->isOnBottom() && !thing->isOnTop() && !thing->isCreature())) return thing; } for(uint i = 0; i < m_things.size(); ++i) { ThingPtr thing = m_things[i]; if(!thing->isGround() && !thing->isGroundBorder() && !thing->isCreature()) return thing; } return m_things[0]; }