// vytvori skinedmesh slozeny z vybranych dilu zdrojoveho meshe
		// source <- animated mesh bez zavolani metody finalize()
		// parts <- ukazatel na pole èástí
		// partsCount <- poèet èástí (velikost pole)
		ISkinnedMesh * makeMeshFromParts(WowKlient::Core::GameState * gState, IAnimatedMesh * source, int partsCount, int * parts)
		{
			ISkinnedMesh * skinned = (ISkinnedMesh *)source;

			ISkinnedMesh * clone = gState->irrDevice->getSceneManager()->createSkinnedMesh();

			for (int i = 0; i < partsCount; i++)
			{
				SSkinMeshBuffer * buf = clone->addMeshBuffer();

				buf->recalculateBoundingBox();
				buf->setDirty();

				for (u32 j = 0; j < ((SSkinMeshBuffer*)source->getMeshBuffer(parts[i]))->getVertexCount(); j++)
				{
					S3DVertex * v = new S3DVertex(*((SSkinMeshBuffer*)source->getMeshBuffer(parts[i]))->getVertex(j));
					buf->Vertices_Standard.push_back(*v);
				}

				for (u32 j = 0; j < ((SSkinMeshBuffer*)source->getMeshBuffer(parts[i]))->getIndexCount(); j++)
				{
					buf->Indices.push_back(u16(((SSkinMeshBuffer*)source->getMeshBuffer(parts[i]))->getIndices()[j]));
				}

				buf->Material = ((SSkinMeshBuffer*)source->getMeshBuffer(parts[i]))->getMaterial();


			}

			parseJointParents(clone, skinned->getAllJoints()[0], 0);

			for (u32 i = 0; i < skinned->getJointCount(); i++)
			{
				ISkinnedMesh::SJoint * joint;
				joint = clone->getAllJoints()[clone->getJointNumber(skinned->getAllJoints()[i]->Name.c_str())];

				for (u32 j = 0; j < skinned->getAllJoints()[i]->Weights.size(); j++)
				{
					s32 buffer = validPart(skinned->getAllJoints()[i]->Weights[j].buffer_id, partsCount, parts);
					if (buffer >= 0)
					{
						ISkinnedMesh::SWeight * w = clone->addWeight(joint);
						w->buffer_id = buffer;
						w->strength = skinned->getAllJoints()[i]->Weights[j].strength;
						w->vertex_id = skinned->getAllJoints()[i]->Weights[j].vertex_id;
					}
				}

			}

			clone->finalize();

			return clone;
		}
//------------------------------------------------------------------
bool ofUTF8::isValid(ofUTF8String txt) {
    try {
        ofUTF8String::iterator end_it = utf8::find_invalid(txt.begin(), txt.end());
        if(end_it != txt.end()) {
            ofUTF8String validPart(txt.begin(),end_it);
            ofLog(OF_LOG_ERROR,"ofUTF8::isValid - detected invalid UTF8 - valid part: " + validPart);
            return false;
        } else {
            return true;
        }
    } catch(const utf8::exception& utfcpp_ex) {
        string err = utfcpp_ex.what();
        ofLog(OF_LOG_ERROR, "ofUTF8::isValid : " + err);
        return false;
    }
}