aboutsummaryrefslogtreecommitdiff
path: root/src/Skeleton.cpp
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2021-09-30 17:58:57 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2021-09-30 17:58:57 +0700
commit5436a5482373fdac56d477d00f21fa3902465ac7 (patch)
tree5f019252740f182760fea56881fa9bde28699185 /src/Skeleton.cpp
parentddf2feae29c31b37b7ce17210b7edef0af504678 (diff)
downloadblackshades-5436a5482373fdac56d477d00f21fa3902465ac7.tar.gz
Convert animations to TSV
Diffstat (limited to 'src/Skeleton.cpp')
-rw-r--r--src/Skeleton.cpp176
1 files changed, 10 insertions, 166 deletions
diff --git a/src/Skeleton.cpp b/src/Skeleton.cpp
index 2624efd..7315fac 100644
--- a/src/Skeleton.cpp
+++ b/src/Skeleton.cpp
@@ -458,175 +458,19 @@ void Skeleton::FindRotationMuscle(int which)
extern Skeleton testskeleton;
-void Animation::Load(char *fileName)
+void Animation::load(const char* name)
{
- files.OpenFile(fileName);
- if(files.sFile){
- ReadInt(files.sFile, 1, &numframes);
- for(int i=0;i<numframes;i++){
- for(int j=0;j<max_joints;j++){
- ReadXYZ(files.sFile, 1, &position[j][i]);
- }
- for(int j=0;j<max_joints;j++){
- ReadFloat(files.sFile, 1, &twist[j][i]);
- }
- for(int j=0;j<max_joints;j++){
- ReadBool(files.sFile, 1, &onground[j][i]);
- }
- ReadFloat(files.sFile, 1, &speed[i]);
- ReadFloat(files.sFile, 1, &gunrotation[i]);
- }
- for(int i=0;i<numframes;i++){
- for(int j=0;j<max_joints;j++){
- ReadFloat(files.sFile, 1, &twist2[j][i]);
- }
- }
- }
-
- files.EndLoad();
-
- for(int j=0;j<numframes;j++){
- for(int i=0;i<testskeleton.num_joints;i++){
- testskeleton.joints[i].position=position[i][j];
- }
- //Find forward vectors
- CrossProduct(testskeleton.joints[testskeleton.forwardjoints[1]].position-testskeleton.joints[testskeleton.forwardjoints[0]].position,testskeleton.joints[testskeleton.forwardjoints[2]].position-testskeleton.joints[testskeleton.forwardjoints[0]].position,&testskeleton.forward);
- Normalise(&testskeleton.forward);
-
- CrossProduct(testskeleton.joints[testskeleton.lowforwardjoints[1]].position-testskeleton.joints[testskeleton.lowforwardjoints[0]].position,testskeleton.joints[testskeleton.lowforwardjoints[2]].position-testskeleton.joints[testskeleton.lowforwardjoints[0]].position,&testskeleton.lowforward);
- Normalise(&testskeleton.lowforward);
-
- //Special forwards
- testskeleton.specialforward[0]=testskeleton.forward;
-
- testskeleton.specialforward[1]=testskeleton.joints[testskeleton.jointlabels[rightshoulder]].position+testskeleton.joints[testskeleton.jointlabels[rightwrist]].position;
- testskeleton.specialforward[1]=testskeleton.joints[testskeleton.jointlabels[rightelbow]].position-testskeleton.specialforward[1]/2;
- testskeleton.specialforward[1]+=testskeleton.forward*.2;
- Normalise(&testskeleton.specialforward[1]);
- testskeleton.specialforward[2]=testskeleton.joints[testskeleton.jointlabels[leftshoulder]].position+testskeleton.joints[testskeleton.jointlabels[leftwrist]].position;
- testskeleton.specialforward[2]=testskeleton.joints[testskeleton.jointlabels[leftelbow]].position-testskeleton.specialforward[2]/2;
- testskeleton.specialforward[2]+=testskeleton.forward*.2;
- Normalise(&testskeleton.specialforward[2]);
-
- testskeleton.specialforward[3]=testskeleton.joints[testskeleton.jointlabels[righthip]].position+testskeleton.joints[testskeleton.jointlabels[rightankle]].position;
- testskeleton.specialforward[3]=testskeleton.specialforward[3]/2-testskeleton.joints[testskeleton.jointlabels[rightknee]].position;
- testskeleton.specialforward[3]+=testskeleton.lowforward*.2;
- Normalise(&testskeleton.specialforward[3]);
- testskeleton.specialforward[4]=testskeleton.joints[testskeleton.jointlabels[lefthip]].position+testskeleton.joints[testskeleton.jointlabels[leftankle]].position;
- testskeleton.specialforward[4]=testskeleton.specialforward[4]/2-testskeleton.joints[testskeleton.jointlabels[leftknee]].position;
- testskeleton.specialforward[4]+=testskeleton.lowforward*.2;
- Normalise(&testskeleton.specialforward[4]);
-
- //Find joint rotations
- for(int i=0;i<testskeleton.num_joints;i++){
- if(testskeleton.joints[i].hasparent&&testskeleton.joints[i].visible)
- {
- testskeleton.FindRotationJoint(i);
- }
- }
- for(int i=0;i<testskeleton.num_muscles;i++){
- if(testskeleton.muscles[i].visible)
- {
- testskeleton.FindRotationMuscle(i);
- }
- }
- for(int i=0;i<testskeleton.num_muscles;i++){
- if(testskeleton.muscles[i].visible)
- {
- mrotate1[i][j]=testskeleton.muscles[i].rotate1;
- mrotate2[i][j]=testskeleton.muscles[i].rotate2;
- mrotate3[i][j]=testskeleton.muscles[i].rotate3;
- if(j!=0&&mrotate3[i][j]>mrotate3[i][j-1]+180)mrotate3[i][j]-=360;
- if(j!=0&&mrotate3[i][j]<mrotate3[i][j-1]-180)mrotate3[i][j]+=360;
- if(j!=0&&mrotate2[i][j]>mrotate2[i][j-1]+180)mrotate2[i][j]-=360;
- if(j!=0&&mrotate2[i][j]<mrotate2[i][j-1]-180)mrotate2[i][j]+=360;
- if(j!=0&&mrotate1[i][j]>mrotate1[i][j-1]+180)mrotate1[i][j]-=360;
- if(j!=0&&mrotate1[i][j]<mrotate1[i][j-1]-180)mrotate1[i][j]+=360;
- }
- }
- for(int i=0;i<testskeleton.num_joints;i++){
- if(testskeleton.joints[i].hasparent&&testskeleton.joints[i].visible)
- {
- rotate1[i][j]=testskeleton.joints[i].rotate1;
- rotate2[i][j]=testskeleton.joints[i].rotate2;
- rotate3[i][j]=testskeleton.joints[i].rotate3;
- if(j!=0&&rotate3[i][j]>rotate3[i][j-1]+180)rotate3[i][j]-=360;
- if(j!=0&&rotate3[i][j]<rotate3[i][j-1]-180)rotate3[i][j]+=360;
- if(j!=0&&rotate2[i][j]>rotate2[i][j-1]+180)rotate2[i][j]-=360;
- if(j!=0&&rotate2[i][j]<rotate2[i][j-1]-180)rotate2[i][j]+=360;
- if(j!=0&&rotate1[i][j]>rotate1[i][j-1]+180)rotate1[i][j]-=360;
- if(j!=0&&rotate1[i][j]<rotate1[i][j-1]-180)rotate1[i][j]+=360;
- }
- }
- }
-
- for(int k=0;k<2;k++)
- for(int j=0;j<numframes;j++){
- for(int i=0;i<testskeleton.num_muscles;i++){
- if(testskeleton.muscles[i].visible)
- {
- if(j!=0&&mrotate3[i][j]>mrotate3[i][j-1]+180)mrotate3[i][j]-=360;
- if(j!=0&&mrotate3[i][j]<mrotate3[i][j-1]-180)mrotate3[i][j]+=360;
- if(j!=0&&mrotate2[i][j]>mrotate2[i][j-1]+180)mrotate2[i][j]-=360;
- if(j!=0&&mrotate2[i][j]<mrotate2[i][j-1]-180)mrotate2[i][j]+=360;
- if(j!=0&&mrotate1[i][j]>mrotate1[i][j-1]+180)mrotate1[i][j]-=360;
- if(j!=0&&mrotate1[i][j]<mrotate1[i][j-1]-180)mrotate1[i][j]+=360;
-
- if(j==0&&mrotate3[i][j]>mrotate3[i][numframes-1]+180)mrotate3[i][j]-=360;
- if(j==0&&mrotate3[i][j]<mrotate3[i][numframes-1]-180)mrotate3[i][j]+=360;
- if(j==0&&mrotate2[i][j]>mrotate2[i][numframes-1]+180)mrotate2[i][j]-=360;
- if(j==0&&mrotate2[i][j]<mrotate2[i][numframes-1]-180)mrotate2[i][j]+=360;
- if(j==0&&mrotate1[i][j]>mrotate1[i][numframes-1]+180)mrotate1[i][j]-=360;
- if(j==0&&mrotate1[i][j]<mrotate1[i][numframes-1]-180)mrotate1[i][j]+=360;
- }
- }
- for(int i=0;i<testskeleton.num_joints;i++){
- if(testskeleton.joints[i].hasparent&&testskeleton.joints[i].visible)
- {
- if(j!=0&&rotate3[i][j]>rotate3[i][j-1]+180)rotate3[i][j]-=360;
- if(j!=0&&rotate3[i][j]<rotate3[i][j-1]-180)rotate3[i][j]+=360;
- if(j!=0&&rotate2[i][j]>rotate2[i][j-1]+180)rotate2[i][j]-=360;
- if(j!=0&&rotate2[i][j]<rotate2[i][j-1]-180)rotate2[i][j]+=360;
- if(j!=0&&rotate1[i][j]>rotate1[i][j-1]+180)rotate1[i][j]-=360;
- if(j!=0&&rotate1[i][j]<rotate1[i][j-1]-180)rotate1[i][j]+=360;
-
- if(j==0&&rotate3[i][j]>rotate3[i][numframes-1]+180)rotate3[i][j]-=360;
- if(j==0&&rotate3[i][j]<rotate3[i][numframes-1]-180)rotate3[i][j]+=360;
- if(j==0&&rotate2[i][j]>rotate2[i][numframes-1]+180)rotate2[i][j]-=360;
- if(j==0&&rotate2[i][j]<rotate2[i][numframes-1]-180)rotate2[i][j]+=360;
- if(j==0&&rotate1[i][j]>rotate1[i][numframes-1]+180)rotate1[i][j]-=360;
- if(j==0&&rotate1[i][j]<rotate1[i][numframes-1]-180)rotate1[i][j]+=360;
- }
- }
- }
-}
-
-void Animation::Load(char *fileName, float rotate)
-{
- files.OpenFile(fileName);
- if(files.sFile){
- ReadInt(files.sFile, 1, &numframes);
- for(int i=0;i<numframes;i++){
- for(int j=0;j<max_joints;j++){
- ReadXYZ(files.sFile, 1, &position[j][i]);
- position[j][i]=DoRotation(position[j][i],0,rotate,0);
- }
- for(int j=0;j<max_joints;j++){
- ReadFloat(files.sFile, 1, &twist[j][i]);
- }
- for(int j=0;j<max_joints;j++){
- ReadBool(files.sFile, 1, &onground[j][i]);
- }
- ReadFloat(files.sFile, 1, &speed[i]);
- ReadFloat(files.sFile, 1, &gunrotation[i]);
- }
- for(int i=0;i<numframes;i++){
- for(int j=0;j<max_joints;j++){
- ReadFloat(files.sFile, 1, &twist2[j][i]);
- }
+ auto data = loadAnimation(name);
+ numframes = data.len;
+ for (size_t i = 0; i < numframes; ++i) {
+ for (size_t j = 0; j < max_joints; ++j) {
+ position[j][i].x = data.ptr[i].joints[j].x;
+ position[j][i].y = data.ptr[i].joints[j].y;
+ position[j][i].z = data.ptr[i].joints[j].z;
}
+ speed[i] = data.ptr[i].speed;
}
- files.EndLoad();
+ free(data.ptr);
for(int j=0;j<numframes;j++){
for(int i=0;i<testskeleton.num_joints;i++){