//---------------------------------------------------------------------------- void Character::_CalSkins() { Node *node = DynamicCast<Node>(mMovable); if (!node) return; for (int i = 0; i < node->GetNumChildren(); i++) { Movable *mov = node->GetChild(i); TriMesh *triMesh = DynamicCast<TriMesh>(mov); Node *node = DynamicCast<Node>(mov); if (triMesh) { bool hasSkinCtrl = false; for (int i = 0; i < triMesh->GetNumControllers(); i++) { SkinController *skinCtrl = DynamicCast<SkinController>( triMesh->GetController(i)); if (skinCtrl) { hasSkinCtrl = true; } } if (hasSkinCtrl) mSkinMovables.push_back(triMesh); } else if (node) { bool hasSkinCtrl = false; for (int i = 0; i < node->GetNumChildren(); i++) { TriMesh *mesh = DynamicCast<TriMesh>(node->GetChild(i)); if (mesh) { for (int i = 0; i < mesh->GetNumControllers(); i++) { SkinController *skinCtrl = DynamicCast<SkinController>(mesh->GetController(i)); if (skinCtrl) { hasSkinCtrl = true; } } } } if (hasSkinCtrl) { mSkinMovables.push_back(node); } else { int numVaildChild = node->GetNumChildren(); if (0 != numVaildChild) { mModelAnimMovable = node; } } } } for (int i = 0; i < (int)mSkinMovables.size(); i++) { mSkinMovables[i]->SetUpdatePriority(1); } if (mModelAnimMovable) { mModelAnimMovable->SetUpdatePriority(2); } Node *rootNode = DynamicCast<Node>(mMovable); if (rootNode) { node->SetNeedCalUpdateChild(true); } }