summary refs log tree commit diff
path: root/src/Person.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Person.cpp')
-rw-r--r--src/Person.cpp98
1 files changed, 41 insertions, 57 deletions
diff --git a/src/Person.cpp b/src/Person.cpp
index fb05907..888ea8f 100644
--- a/src/Person.cpp
+++ b/src/Person.cpp
@@ -218,8 +218,7 @@ void Person::DoAnimations(int who)
 
 		if (targetanimation == zombieeatanim && targetframe == 3) {
 			auto& joints = skeleton.joints;
-			auto& jointlabels = skeleton.jointlabels;
-			auto head_joint = joints[jointlabels[head]];
+			auto head_joint = joints[head];
 			auto soundsrc = (DoRotation(head_joint.position,
 				0, playerrotation, 0) + playercoords
 				- camera.position) / soundscalefactor;
@@ -228,7 +227,7 @@ void Person::DoAnimations(int who)
 			bleeding = 1;
 			bleeddelay = 1;
 			bjoint1 = &head_joint;
-			bjoint2 = joints + jointlabels[neck];
+			bjoint2 = joints + neck;
 		}
 
 		currentanimation = targetanimation;
@@ -247,8 +246,7 @@ void Person::DoAnimations(int who)
 		    && currentanimation == diveanim && targetframe == 0) {
 			targetanimation = getupfrontanim;
 			auto& joints = skeleton.joints;
-			auto& jointlabels = skeleton.jointlabels;
-			auto head_joint = joints[jointlabels[head]];
+			auto head_joint = joints[head];
 			auto soundsrc = (DoRotation(head_joint.position,
 				0, playerrotation, 0) + playercoords
 				- camera.position) / soundscalefactor;
@@ -360,8 +358,8 @@ void Person::DoAnimations(int who)
 					skeleton.joints[i].position = animation[rifleholdanim].position[i][0];
 					if (currentanimation == crouchanim
 					    || targetanimation == crouchanim)
-						skeleton.joints[i].position += skeleton.joints[skeleton.jointlabels[neck]].position
-							- animation[idleanim].position[skeleton.jointlabels[neck]][0];
+						skeleton.joints[i].position += skeleton.joints[neck].position
+							- animation[idleanim].position[neck][0];
 				}
 		}
 
@@ -381,7 +379,7 @@ void Person::DoAnimations(int who)
 				if(grenamount>0)grenamount-=multiplier*4;
 				if(grenamount<0)grenamount=0;
 			}
-			rotatearound=skeleton.joints[skeleton.jointlabels[neck]].position;
+			rotatearound=skeleton.joints[neck].position;
 			for (int i = 0; i < max_joints; ++i){
 				if(skeleton.joints[i].label!=righthand&&skeleton.joints[i].label!=rightelbow&&skeleton.joints[i].label!=rightwrist&&skeleton.joints[i].label!=lefthand&&skeleton.joints[i].label!=leftelbow&&skeleton.joints[i].label!=leftwrist){
 				}else{
@@ -389,7 +387,7 @@ void Person::DoAnimations(int who)
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[rifleaimanim].position[i][0];
 						if(currentanimation==crouchanim||targetanimation==crouchanim){
-							skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+							skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						}
 						skeleton.joints[i].position+=facingright*0.1;
 						skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2-10)*aimamount,0,0);
@@ -398,27 +396,27 @@ void Person::DoAnimations(int who)
 					if(whichgun==shotgun){
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[assaultrifleaimanim].position[i][0];
-						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0);
 						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position+=facingdown*.2;
 						else skeleton.joints[i].position-=facingdown*.02;
-						if(skeleton.joints[i].label==righthand)skeleton.joints[i].position=skeleton.joints[skeleton.jointlabels[lefthand]].position-facinghalf*2;
+						if(skeleton.joints[i].label==righthand)skeleton.joints[i].position=skeleton.joints[lefthand].position-facinghalf*2;
 						skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount);
 					}
 					if(whichgun==assaultrifle){
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[assaultrifleaimanim].position[i][0];
-						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0);
 						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position+=facingdown*.2;
 						else skeleton.joints[i].position-=facingdown*.02;
-						if(skeleton.joints[i].label==righthand)skeleton.joints[i].position=skeleton.joints[skeleton.jointlabels[lefthand]].position-facinghalf*2;
+						if(skeleton.joints[i].label==righthand)skeleton.joints[i].position=skeleton.joints[lefthand].position-facinghalf*2;
 						skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount);
 					}
 					if(whichgun==handgun1){
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[pistolaimanim].position[i][0];
-						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0);
 						if(currentanimation==crouchanim||targetanimation==crouchanim){skeleton.joints[i].position+=facingright*.15;skeleton.joints[i].position+=facingdown*.3;}
 						else skeleton.joints[i].position-=facingdown*.1;
@@ -427,7 +425,7 @@ void Person::DoAnimations(int who)
 					if(whichgun==handgun2){
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[pistolaimanim].position[i][0];
-						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						skeleton.joints[i].position=rotatearound+DoRotation(skeleton.joints[i].position-rotatearound,(playerrotation2/2)*aimamount,0,0);
 						if(currentanimation==crouchanim||targetanimation==crouchanim){skeleton.joints[i].position+=facingright*.15;skeleton.joints[i].position+=facingdown*.3;}
 						else skeleton.joints[i].position-=facingdown*.1;
@@ -437,13 +435,13 @@ void Person::DoAnimations(int who)
 						aimamount=1;
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[grenadeaimanim].position[i][0];
-						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						skeleton.joints[i].position=skeleton.joints[i].position*(aimamount)+oldpos*(1-aimamount);
 					}
 					if(whichgun==grenade&&grenamount>0){
 						oldpos=skeleton.joints[i].position;
 						skeleton.joints[i].position=animation[grenadechargeanim].position[i][0];
-						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[skeleton.jointlabels[neck]][0]-skeleton.joints[skeleton.jointlabels[neck]].position);
+						if(currentanimation==crouchanim||targetanimation==crouchanim)skeleton.joints[i].position-=(animation[idleanim].position[neck][0]-skeleton.joints[neck].position);
 						skeleton.joints[i].position=skeleton.joints[i].position*(grenamount)+oldpos*(1-grenamount);
 					}
 					if(thirdperson||who!=0)skeleton.joints[i].position+=facingdown*.4;
@@ -488,11 +486,11 @@ void Person::DoAnimations(int who)
 				}
 				if(attackframe==animation[grenadethrowanim].numframes-1&&ammo>0){
 					ammo=-1;
-					sprites.MakeSprite(grenadesprite, 1, 1, 1, 1, DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,playerrotation,0)+playercoords, DoRotation(facing,0,playerrotation,0)*30+velocity, 1);
-					sprites.MakeSprite(spoonsprite, 1, 1, 1, 1, DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,playerrotation,0)+playercoords, DoRotation(facing,0,playerrotation,0)*10+velocity, 1);
-					sprites.MakeSprite(pinsprite, 1, 1, 1, 1, DoRotation(skeleton.joints[skeleton.jointlabels[lefthand]].position,0,playerrotation,0)+playercoords, facing*.1+velocity, 1);
+					sprites.MakeSprite(grenadesprite, 1, 1, 1, 1, DoRotation(skeleton.joints[righthand].position,0,playerrotation,0)+playercoords, DoRotation(facing,0,playerrotation,0)*30+velocity, 1);
+					sprites.MakeSprite(spoonsprite, 1, 1, 1, 1, DoRotation(skeleton.joints[righthand].position,0,playerrotation,0)+playercoords, DoRotation(facing,0,playerrotation,0)*10+velocity, 1);
+					sprites.MakeSprite(pinsprite, 1, 1, 1, 1, DoRotation(skeleton.joints[lefthand].position,0,playerrotation,0)+playercoords, facing*.1+velocity, 1);
 
-					XYZ soundsrc = (DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position, 0, playerrotation, 0)
+					XYZ soundsrc = (DoRotation(skeleton.joints[righthand].position, 0, playerrotation, 0)
 						+ playercoords - camera.position) / soundscalefactor;
 					ALfloat gLoc[] {soundsrc.x, soundsrc.y, soundsrc.z};
 					alSourcefv(gSourceID[grenadethrowsound], AL_POSITION, gLoc);
@@ -501,7 +499,7 @@ void Person::DoAnimations(int who)
 			}
 		}
 
-		rotatearound=skeleton.joints[skeleton.jointlabels[abdomen]].position;
+		rotatearound=skeleton.joints[abdomen].position;
 		if (who == 0) {
 			for (auto& joint : skeleton.joints)
 				if (!joint.lower)
@@ -509,9 +507,9 @@ void Person::DoAnimations(int who)
 						+ DoRotation(joint.position - rotatearound, playerrotation2 / 2, 0, 0);
 				else if (joint.label != groin)
 					joint.position = DoRotation(joint.position, 0, playerlowrotation - playerrotation, 0);
-			rotatearound = skeleton.joints[skeleton.jointlabels[neck]].position;
-			skeleton.joints[skeleton.jointlabels[head]].position = rotatearound
-				+ DoRotation(skeleton.joints[skeleton.jointlabels[head]].position - rotatearound, playerrotation2 / 2, 0, 0);
+			rotatearound = skeleton.joints[neck].position;
+			skeleton.joints[head].position = rotatearound
+				+ DoRotation(skeleton.joints[head].position - rotatearound, playerrotation2 / 2, 0, 0);
 		}
 
 		skeleton.DoConstraints();
@@ -582,8 +580,7 @@ void Person::DoAnimationslite(int who)
 
 		if (targetanimation == zombieeatanim && targetframe == 3) {
 			auto& joints = skeleton.joints;
-			auto& jointlabels = skeleton.jointlabels;
-			auto head_joint = joints[jointlabels[head]];
+			auto head_joint = joints[head];
 			auto soundsrc = (DoRotation(head_joint.position,
 				0, playerrotation, 0) + playercoords
 				- camera.position) / soundscalefactor;
@@ -592,7 +589,7 @@ void Person::DoAnimationslite(int who)
 			bleeding = 1;
 			bleeddelay = 1;
 			bjoint1 = &head_joint;
-			bjoint2 = joints + jointlabels[neck];
+			bjoint2 = joints + neck;
 		}
 
 		currentanimation = targetanimation;
@@ -830,12 +827,10 @@ void draw_muscle(Muscle& mus, int who, int whichcostume)
 
 int Person::DrawSkeleton(int who)
 {
-	auto& left_hand = skeleton.jointlabels[lefthand];
-	auto& left_wrist = skeleton.joints[left_hand].position;
-	auto& right_hand = skeleton.jointlabels[righthand];
-	auto& right_wrist = skeleton.joints[right_hand].position;
-	auto& head_pos = skeleton.joints[skeleton.jointlabels[head]].position;
-	auto& neck_pos = skeleton.joints[skeleton.jointlabels[neck]].position;
+	auto& left_wrist = skeleton.joints[lefthand].position;
+	auto& right_wrist = skeleton.joints[righthand].position;
+	auto& head_pos = skeleton.joints[head].position;
+	auto& neck_pos = skeleton.joints[neck].position;
 
 	switch (whichgun) {
 	case sniperrifle:
@@ -920,7 +915,7 @@ int Person::DrawSkeleton(int who)
 		glPopMatrix();
 		break;
 	case knife:
-		auto& wrist = skeleton.joints[skeleton.jointlabels[righthand]];
+		auto& wrist = skeleton.joints[righthand];
 		glPushMatrix();
 		glTranslatef(wrist.position.x,
 			wrist.position.y, wrist.position.z);
@@ -936,8 +931,7 @@ int Person::DrawSkeleton(int who)
 	if (litup) {
 		GLfloat LightAmbient[] {0, 0, 0, 1.0f};
 		GLfloat LightDiffuse[] {1, 1, 1, 1.0f};
-		auto& hand = skeleton.jointlabels[lefthand];
-		XYZ lightpoint = skeleton.joints[hand].position;
+		XYZ lightpoint = skeleton.joints[lefthand].position;
 		GLfloat LightPosition[] {lightpoint.x,
 			lightpoint.y, lightpoint.z, 0};
 		glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);
@@ -994,17 +988,13 @@ int Person::DrawSkeleton(int who)
 			auto specialfwd = skeleton.specialforward;
 			*specialfwd++ = skeleton.forward;
 
-			auto& right_shoulder = skeleton.jointlabels[rightshoulder];
-			auto& right_elbow = skeleton.jointlabels[rightelbow];
-			*specialfwd = skeleton.joints[right_elbow].position
-				- skeleton.joints[right_shoulder].position / 2
+			*specialfwd = skeleton.joints[rightelbow].position
+				- skeleton.joints[rightshoulder].position / 2
 				- right_wrist / 2 + skeleton.forward * 0.2;
 			Normalise(specialfwd++);
 
-			auto& left_shoulder = skeleton.jointlabels[leftshoulder];
-			auto& left_elbow = skeleton.jointlabels[leftelbow];
-			*specialfwd = skeleton.joints[left_elbow].position
-				- skeleton.joints[left_shoulder].position / 2
+			*specialfwd = skeleton.joints[leftelbow].position
+				- skeleton.joints[leftshoulder].position / 2
 				- left_wrist / 2 + skeleton.forward * 0.2;
 			Normalise(specialfwd++);
 
@@ -1022,21 +1012,15 @@ int Person::DrawSkeleton(int who)
 				skeleton.specialforward[2] += facingdown * aimamount;
 			}
 
-			auto& right_hip = skeleton.jointlabels[righthip];
-			auto& right_ankle = skeleton.jointlabels[rightankle];
-			auto& right_knee = skeleton.jointlabels[rightknee];
-			*specialfwd = skeleton.joints[right_hip].position / 2
-				+ skeleton.joints[right_ankle].position / 2
-				- skeleton.joints[right_knee].position
+			*specialfwd = skeleton.joints[righthip].position / 2
+				+ skeleton.joints[rightankle].position / 2
+				- skeleton.joints[rightknee].position
 				+ skeleton.lowforward * 0.2;
 			Normalise(specialfwd++);
 
-			auto& left_hip = skeleton.jointlabels[lefthip];
-			auto& left_ankle = skeleton.jointlabels[leftankle];
-			auto& left_knee = skeleton.jointlabels[leftknee];
-			*specialfwd = skeleton.joints[left_hip].position / 2
-				+ skeleton.joints[left_ankle].position / 2
-				- skeleton.joints[left_knee].position
+			*specialfwd = skeleton.joints[lefthip].position / 2
+				+ skeleton.joints[leftankle].position / 2
+				- skeleton.joints[leftknee].position
 				+ skeleton.lowforward * 0.2;
 			Normalise(specialfwd++);