first animatable object interface iteration

This commit is contained in:
devZoGok
2021-10-19 19:06:41 +03:00
parent 2ae7f2efdd
commit 53bf4f41bd
19 changed files with 174 additions and 139 deletions
+41
View File
@@ -7,6 +7,7 @@ namespace vb01{
Bone::Bone(string name, float length, Vector3 pos, Quaternion rot, Vector3 scale) : Node(pos, rot, scale, name){
this->name = name;
this->length = length;
Animatable::type = Animatable::BONE;
}
void Bone::lookAt(Vector3 newDir, Vector3 newUp){
@@ -77,4 +78,44 @@ namespace vb01{
this->poseScale = s;
//setScale(restScale+poseScale);
}
void Bone::animate(float value, KeyframeChannel keyframeChannel){
Vector3 newPos = getPosePos(), newScale = getPoseScale();
Quaternion newRot = getPoseRot();
switch(keyframeChannel.type){
case KeyframeChannel::POS_X:
newPos.x = value;
break;
case KeyframeChannel::POS_Y:
newPos.y = value;
break;
case KeyframeChannel::POS_Z:
newPos.z = value;
break;
case KeyframeChannel::ROT_W:
newRot.w = value;
break;
case KeyframeChannel::ROT_X:
newRot.x = value;
break;
case KeyframeChannel::ROT_Y:
newRot.y = value;
break;
case KeyframeChannel::ROT_Z:
newRot.z = value;
break;
case KeyframeChannel::SCALE_X:
newScale.x = value;
break;
case KeyframeChannel::SCALE_Y:
newScale.y = value;
break;
case KeyframeChannel::SCALE_Z:
newScale.z = value;
break;
}
setPosePos(newPos);
setPoseRot(newRot);
setPoseScale(newScale);
}
}