summary refs log tree commit diff
path: root/src/Skeleton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Skeleton.cpp')
-rw-r--r--src/Skeleton.cpp101
1 files changed, 48 insertions, 53 deletions
diff --git a/src/Skeleton.cpp b/src/Skeleton.cpp
index 7dcdaa1..2624efd 100644
--- a/src/Skeleton.cpp
+++ b/src/Skeleton.cpp
@@ -744,61 +744,56 @@ void Animation::Load(char *fileName, float rotate)
 	}
 }
 
-void Skeleton::Load(char *fileName)
+void Skeleton::reload()
 {
-	int parentID;
-	bool what;
-	files.OpenFile(fileName);
-	if(files.sFile){
-		ReadInt(files.sFile, 1, &num_joints);
-		for(int i=0;i<num_joints;i++){
-			ReadXYZ(files.sFile, 1, &joints[i].position);
-			ReadFloat(files.sFile, 1, &joints[i].length);
-			ReadFloat(files.sFile, 1, &joints[i].mass);
-			ReadBool(files.sFile, 1, &joints[i].hasparent);
-			ReadBool(files.sFile, 1, &joints[i].locked);
-			ReadInt(files.sFile, 1, &joints[i].modelnum);
-			ReadBool(files.sFile, 1, &joints[i].visible);
-			ReadBool(files.sFile, 1, &what);
-			ReadInt(files.sFile, 1, &joints[i].label);
-			ReadInt(files.sFile, 1, &joints[i].hasgun);
-			ReadBool(files.sFile, 1, &joints[i].lower);
-			ReadInt(files.sFile, 1, &parentID);
-			if(joints[i].hasparent)joints[i].parent=&joints[parentID];
-			joints[i].velocity=0;
-			joints[i].oldposition=joints[i].position;
-			joints[i].existing=1;
-		}
-
-		ReadInt(files.sFile, 1, &num_muscles);
-		for(int i=0;i<num_muscles;i++){
-			ReadFloat(files.sFile, 1, &muscles[i].length);
-			ReadFloat(files.sFile, 1, &muscles[i].targetlength);
-			ReadFloat(files.sFile, 1, &muscles[i].minlength);
-			ReadFloat(files.sFile, 1, &muscles[i].maxlength);
-			ReadFloat(files.sFile, 1, &muscles[i].strength);
-			ReadInt(files.sFile, 1, &muscles[i].type);
-			ReadBool(files.sFile, 1, &muscles[i].visible);
-			ReadInt(files.sFile, 1, &parentID);
-			muscles[i].parent1=&joints[parentID];
-			ReadInt(files.sFile, 1, &parentID);
-			muscles[i].parent2=&joints[parentID];
-		}
-
-		for(int j=0;j<3;j++){
-			ReadInt(files.sFile, 1, &forwardjoints[j]);
-		}
-		for(int j=0;j<3;j++){
-			ReadInt(files.sFile, 1, &lowforwardjoints[j]);
-		}
+	broken = 0;
+	num_joints = 20;
+	JointData joints_data[num_joints];
+	loadJoints(joints_data);
+	for (int i = 0; i < num_joints; ++i) {
+		joints[i].label = joints_data[i].label;
+		joints[i].position.x = joints_data[i].x;
+		joints[i].position.y = joints_data[i].y;
+		joints[i].position.z = joints_data[i].z;
+		joints[i].length = joints_data[i].length;
+		joints[i].modelnum = joints_data[i].model;
+		joints[i].visible = joints_data[i].visible;
+		joints[i].lower = joints_data[i].lower;
+
+		if (joints_data[i].parent < 0) {
+			joints[i].hasparent = false;
+			joints[i].parent = NULL;
+		} else {
+			joints[i].hasparent = true;
+			joints[i].parent = joints + joints_data[i].parent;
+		}
+
+		joints[i].existing = true;
+		joints[i].locked = false;
+		joints[i].velocity = 0;
+		joints[i].oldposition = joints[i].position;
+		jointlabels[joints[i].label] = i;
 	}
-	files.EndLoad();
 
-	for(int i=0;i<num_joints;i++){
-		for(int j=0;j<num_joints;j++){
-			if(joints[i].label==j)jointlabels[j]=i;
-		}
+	forwardjoints[0] = 7;
+	forwardjoints[1] = 3;
+	forwardjoints[2] = 8;
+	lowforwardjoints[0] = 17;
+	lowforwardjoints[1] = 3;
+	lowforwardjoints[2] = 19;
+
+	num_muscles = 29;
+	MuscleData muscles_data[num_muscles];
+	loadMuscles(muscles_data);
+	for (int i = 0; i < num_muscles; ++i) {
+		muscles[i].length = muscles_data[i].length;
+		muscles[i].targetlength = muscles_data[i].initlen;
+		muscles[i].minlength = muscles_data[i].minlen;
+		muscles[i].maxlength = muscles_data[i].maxlen;
+		muscles[i].type = muscles_data[i].flag;
+		muscles[i].visible = muscles_data[i].visible;
+		muscles[i].parent1 = joints + muscles_data[i].parent1;
+		muscles[i].parent2 = joints + muscles_data[i].parent2;
+		muscles[i].strength = !muscles[i].type;
 	}
-
-	broken=0;
 }