mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-25 11:26:37 +00:00 
			
		
		
		
	Add or replace individual parts
This commit is contained in:
		
							parent
							
								
									1f566fc93a
								
							
						
					
					
						commit
						e869433b07
					
				
					 2 changed files with 100 additions and 1 deletions
				
			
		|  | @ -382,7 +382,7 @@ void NpcAnimation::removeIndividualPart(int type){ | ||||||
|             lKnee = 0; |             lKnee = 0; | ||||||
|         } |         } | ||||||
|          else if(type == ESM::PRT_RLeg && rUpperLeg){    //21
 |          else if(type == ESM::PRT_RLeg && rUpperLeg){    //21
 | ||||||
|             base->detachObjectFromBone(rAnkle); |             base->detachObjectFromBone(rUpperLeg); | ||||||
|             rUpperLeg = 0; |             rUpperLeg = 0; | ||||||
|         } |         } | ||||||
|         else if(type == ESM::PRT_LLeg && lUpperLeg){    //22
 |         else if(type == ESM::PRT_LLeg && lUpperLeg){    //22
 | ||||||
|  | @ -417,6 +417,104 @@ void NpcAnimation::removeIndividualPart(int type){ | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |     bool NpcAnimation::addOrReplaceIndividualPart(int type, int group, int priority, const std::string &mesh){ | ||||||
|  |         if(priority >= partpriorities[type]){ | ||||||
|  |             removeIndividualPart(type); | ||||||
|  |             partslots[type] = group; | ||||||
|  |             switch(type){ | ||||||
|  |                 case ESM::PRT_Head:                           //0
 | ||||||
|  |                     head = insertBoundedPart(mesh, "Head"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Hair:                          //1
 | ||||||
|  |                     hair = insertBoundedPart(mesh, "Head"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Neck:                          //2
 | ||||||
|  |                     neck = insertBoundedPart(mesh, "Neck"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Cuirass:                          //3
 | ||||||
|  |                     chest = insertFreePart(mesh, ":\""); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Groin:                          //4
 | ||||||
|  |                     neck = insertBoundedPart(mesh, "Groin"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Skirt:                          //5
 | ||||||
|  |                     skirt = insertFreePart(mesh, ":|"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_RHand:                         //6
 | ||||||
|  |                     rhand = insertFreePart(mesh, ":?"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LHand:                         //7
 | ||||||
|  |                     lhand = insertFreePart(mesh,  ":>"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_RWrist:                          //8
 | ||||||
|  |                     rWrist = insertBoundedPart(mesh, "Right Wrist"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LWrist:                          //9
 | ||||||
|  |                     lWrist = insertBoundedPart(mesh + "*|", "Left Wrist"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Shield:                         //10
 | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_RForearm:                          //11
 | ||||||
|  |                     rForearm = insertBoundedPart(mesh, "Right Forearm"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LForearm:                          //12
 | ||||||
|  |                     lForearm = insertBoundedPart(mesh + "*|", "Left Forearm"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_RUpperarm:                          //13
 | ||||||
|  |                     rupperArm = insertBoundedPart(mesh, "Right Upper Arm"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LUpperarm:                          //14
 | ||||||
|  |                     lupperArm = insertBoundedPart(mesh + "*|", "Left Upper Arm"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_RFoot:                             //15
 | ||||||
|  |                     if(isBeast)    | ||||||
|  |                         rBeastFoot = insertFreePart(mesh, ":<"); | ||||||
|  |                     else | ||||||
|  |                         rfoot = insertBoundedPart(mesh, "Right Foot"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LFoot:                             //16
 | ||||||
|  |                     if(isBeast)    | ||||||
|  |                         lBeastFoot = insertFreePart(mesh, "::"); | ||||||
|  |                     else | ||||||
|  |                         lfoot = insertBoundedPart(mesh + "*|", "Left Foot"); | ||||||
|  |                     break; | ||||||
|  | 
 | ||||||
|  |                  case ESM::PRT_RAnkle:                          //17
 | ||||||
|  |                     rAnkle = insertBoundedPart(mesh , "Right Ankle"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LAnkle:                          //18
 | ||||||
|  |                     lAnkle = insertBoundedPart(mesh + "*|", "Left Ankle"); | ||||||
|  |                     break; | ||||||
|  |                  case ESM::PRT_RKnee:                          //19
 | ||||||
|  |                     rKnee = insertBoundedPart(mesh , "Right Knee"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LKnee:                          //20
 | ||||||
|  |                     lKnee = insertBoundedPart(mesh + "*|", "Left Knee"); | ||||||
|  |                     break; | ||||||
|  |                  case ESM::PRT_RLeg:                          //21
 | ||||||
|  |                     rUpperLeg = insertBoundedPart(mesh, "Right Upper Leg"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LLeg:                          //22
 | ||||||
|  |                     lUpperLeg = insertBoundedPart(mesh + "*|", "Left Upper Leg"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_RPauldron:                          //23
 | ||||||
|  |                     rclavicle = insertBoundedPart(mesh , "Right Clavicle"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_LPauldron:                          //24
 | ||||||
|  |                     lclavicle = insertBoundedPart(mesh + "*|", "Left Clavicle"); | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Weapon:                             //25
 | ||||||
|  |                     break; | ||||||
|  |                 case ESM::PRT_Tail:                              //26
 | ||||||
|  |                     tail = insertFreePart(mesh, ":*"); | ||||||
|  |                     break; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -78,6 +78,7 @@ private: | ||||||
| 	void updateParts(); | 	void updateParts(); | ||||||
|     void removeIndividualPart(int type); |     void removeIndividualPart(int type); | ||||||
|     void removePartGroup(int group); |     void removePartGroup(int group); | ||||||
|  |     bool addOrReplaceIndividualPart(int type, int group, int priority, const std::string &mesh); | ||||||
| 	 | 	 | ||||||
| }; | }; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue