public boolean isVisibleTo(Player player) {
        Tile unitTile;
        Settlement settlement;

        return (player == getOwner()) ? true
            : ((unitTile = getTile()) == null) ? false
            :  (!player.canSee(unitTile)) ? false
            : ((settlement = getSettlement()) != null
                && !player.owns(settlement)) ? false
            : (isOnCarrier() && !player.owns(getCarrier())) ? false
            : true;
    }