* Fixes linking multiple linksets together. They no longer explode
* Not out of the weeds yet. Rotating the root part with 'edit linked parts' still borks all child part rotations and rotating a selection of child parts with 'edit linked parts' still borks the position/rotation of the child parts selected0.6.2-post-fixes
							parent
							
								
									d7a19adcac
								
							
						
					
					
						commit
						bf9e8cb987
					
				|  | @ -1690,6 +1690,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
|                     copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 0); | ||||
|                     copy.HasGroupChanged = true; | ||||
|                     copy.ScheduleGroupForFullUpdate(); | ||||
| 
 | ||||
|                     // required for physics to update it's position | ||||
|                     copy.AbsolutePosition = copy.AbsolutePosition; | ||||
|                     return copy; | ||||
|                 } | ||||
|             } | ||||
|  |  | |||
|  | @ -2132,6 +2132,21 @@ namespace OpenSim.Region.Environment.Scenes | |||
| 
 | ||||
|         private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation, int linkNum) | ||||
|         { | ||||
| 
 | ||||
|             Quaternion parentRot = oldGroupRotation; | ||||
|             Quaternion oldRot = part.RotationOffset; | ||||
|             Quaternion worldRot = parentRot * oldRot; | ||||
| 
 | ||||
|             parentRot = oldGroupRotation; | ||||
| 
 | ||||
|             Vector3 axPos = part.OffsetPosition; | ||||
| 
 | ||||
|             axPos *= parentRot; | ||||
|             part.OffsetPosition = axPos; | ||||
|             part.GroupPosition = oldGroupPosition + part.OffsetPosition; | ||||
|             part.OffsetPosition = Vector3.Zero; | ||||
|             part.RotationOffset = worldRot; | ||||
| 
 | ||||
|             part.SetParent(this); | ||||
|             part.ParentID = m_rootPart.LocalId; | ||||
| 
 | ||||
|  | @ -2140,11 +2155,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
| 
 | ||||
|             part.LinkNum = linkNum; | ||||
| 
 | ||||
|             Vector3 oldPos = part.OffsetPosition; | ||||
|             oldPos *= oldGroupRotation; | ||||
|             oldPos += oldGroupPosition; | ||||
|             Vector3 oldAbsolutePosition = oldPos; | ||||
|             part.OffsetPosition = oldAbsolutePosition - AbsolutePosition; | ||||
| 
 | ||||
|             part.OffsetPosition = part.GroupPosition - AbsolutePosition; | ||||
| 
 | ||||
|             Quaternion rootRotation = m_rootPart.RotationOffset; | ||||
| 
 | ||||
|  | @ -2152,11 +2164,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             pos *= Quaternion.Inverse(rootRotation); | ||||
|             part.OffsetPosition = pos; | ||||
| 
 | ||||
|             Quaternion partRotation = part.RotationOffset; | ||||
| 
 | ||||
|             partRotation *= oldGroupRotation; | ||||
|             partRotation *= Quaternion.Inverse(rootRotation); | ||||
|             part.RotationOffset = partRotation; | ||||
|             parentRot = m_rootPart.RotationOffset; | ||||
|             oldRot = part.RotationOffset; | ||||
|             Quaternion newRot = Quaternion.Inverse(parentRot) * oldRot; | ||||
|             part.RotationOffset = newRot; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Teravus Ovares
						Teravus Ovares