cloning node skeletons and meshes

This commit is contained in:
devZoGok
2022-03-27 19:42:41 +03:00
parent fdf751cde5
commit 85a6b846bc
6 changed files with 94 additions and 59 deletions
+31 -11
View File
@@ -79,15 +79,12 @@ namespace vb01{
}
void NodeTest::testClonedDrivers(){
vector<Keyframe> keyframes = vector<Keyframe>{
KeyframeChannel::createKeyframe(KeyframeInterpolation::LINEAR, 1, 1),
KeyframeChannel::createKeyframe(KeyframeInterpolation::LINEAR, 2, 2),
KeyframeChannel::createKeyframe(KeyframeInterpolation::LINEAR, 3, 3)
};
vector<Keyframe> keyframes;
KeyframeChannelType channelType = KeyframeChannelType::POS_X;
KeyframeChannel channel = KeyframeChannel::createKeyframeChannel(channelType, "D", keyframes);
string animName = "D";
KeyframeChannel channel = KeyframeChannel::createKeyframeChannel(channelType, animName, keyframes);
Driver::VariableType driverType = Driver::POS_X;
Driver *driver = new Driver(nullptr, channel, driverType);
Driver *driver = new Driver(originalD, channel, driverType);
originalB->addDriver(driver);
Node *clonedA = originalA->clone();
@@ -101,7 +98,7 @@ namespace vb01{
clonedB = desc;
break;
}
else if(desc->getName() == "D"){
else if(desc->getName() == animName){
clonedD = desc;
break;
}
@@ -110,17 +107,17 @@ namespace vb01{
Driver *driverClone = clonedB->getDriver(0);
CPPUNIT_ASSERT(driverClone->getAnimatable() == clonedD);
CPPUNIT_ASSERT(driverClone->getKeyframeChannel().type == channelType);
CPPUNIT_ASSERT(driverClone->getKeyframeChannel().animatable == animName);
CPPUNIT_ASSERT(driverClone->getType() == driverType);
}
void NodeTest::testClonedSkeletons(){
Skeleton *skeleton = new Skeleton();
skeleton->addBone((Bone*)originalC, nullptr);
skeleton->addBone((Bone*)originalD, nullptr);
skeleton->addBone((Bone*)originalC, (Bone*)originalC->getParent());
skeleton->addBone((Bone*)originalD, (Bone*)originalD->getParent());
originalA->addSkeleton(skeleton);
Node *clonedA = originalA->clone();
CPPUNIT_ASSERT(!empty(clonedA->getSkeletons()));
CPPUNIT_ASSERT(clonedA->getSkeleton(0));
Skeleton *clonedSkeleton = originalA->getSkeleton(0);
@@ -128,6 +125,29 @@ namespace vb01{
CPPUNIT_ASSERT(clonedSkeleton->getBone(1)->getName() == originalD->getName());
}
void NodeTest::testClonedMeshSkeleton(){
string name = "skeleton";
Mesh *mesh = new Mesh(MeshData(nullptr, nullptr, 0));
Skeleton *skeleton = new Skeleton(name);
mesh->setSkeleton(skeleton);
originalD->attachMesh(mesh);
originalD->addSkeleton(skeleton);
Node *clonedA = originalA->clone();
Node *clonedD = nullptr;
vector<Node*> clonedDescendands;
clonedA->getDescendants(clonedDescendands);
for(Node *desc : clonedDescendands)
if(desc->getName() == "D"){
clonedD = desc;
break;
}
CPPUNIT_ASSERT(clonedD->getMesh(0)->getSkeleton()->getAttachableName() == name);
}
void NodeTest::testGetAncestors(){
vector<Node*> ancestors = ancestorD->getAncestors();
CPPUNIT_ASSERT(ancestors[ancestors.size() - 1] == rootNode);