Merge branch 'master' of /home/opensim/var/repo/opensim
						commit
						466d3793b1
					
				|  | @ -135,6 +135,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             get { return ParentGroup.RootPart == this; }  | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Is an explicit sit target set for this part? | ||||
|         /// </summary> | ||||
|         public bool IsSitTargetSet | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return | ||||
|                     !(SitTargetPosition == Vector3.Zero | ||||
|                       && (SitTargetOrientation == Quaternion.Identity // Valid Zero Rotation quaternion | ||||
|                        || SitTargetOrientation.X == 0f && SitTargetOrientation.Y == 0f && SitTargetOrientation.Z == 1f && SitTargetOrientation.W == 0f // W-Z Mapping was invalid at one point | ||||
|                        || SitTargetOrientation.X == 0f && SitTargetOrientation.Y == 0f && SitTargetOrientation.Z == 0f && SitTargetOrientation.W == 0f)); // Invalid Quaternion | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         #region Fields | ||||
| 
 | ||||
|         public bool AllowedDrop; | ||||
|  | @ -4510,6 +4525,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// <param name='avatarId'></param> | ||||
|         protected internal bool AddSittingAvatar(UUID avatarId) | ||||
|         { | ||||
|             if (IsSitTargetSet && SitTargetAvatar == UUID.Zero) | ||||
|                 SitTargetAvatar = avatarId; | ||||
| 
 | ||||
|             HashSet<UUID> sittingAvatars = m_sittingAvatars; | ||||
| 
 | ||||
|             if (sittingAvatars == null) | ||||
|  | @ -4532,6 +4550,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// <param name='avatarId'></param> | ||||
|         protected internal bool RemoveSittingAvatar(UUID avatarId) | ||||
|         { | ||||
|             if (SitTargetAvatar == avatarId) | ||||
|                 SitTargetAvatar = UUID.Zero; | ||||
| 
 | ||||
|             HashSet<UUID> sittingAvatars = m_sittingAvatars; | ||||
| 
 | ||||
|             // This can occur under a race condition where another thread | ||||
|  |  | |||
|  | @ -1799,10 +1799,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 // Reset sit target. | ||||
|                 if (part.SitTargetAvatar == UUID) | ||||
|                     part.SitTargetAvatar = UUID.Zero; | ||||
| 
 | ||||
|                 ParentPosition = part.GetWorldPosition(); | ||||
|                 ControllingClient.SendClearFollowCamProperties(part.ParentUUID); | ||||
| 
 | ||||
|  | @ -1846,15 +1842,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             //look for prims with explicit sit targets that are available | ||||
|             foreach (SceneObjectPart part in partArray) | ||||
|             { | ||||
|                 // Is a sit target available? | ||||
|                 Vector3 avSitOffset = part.SitTargetPosition; | ||||
|                 Quaternion avSitOrientation = part.SitTargetOrientation; | ||||
|                 UUID avOnTargetAlready = part.SitTargetAvatar; | ||||
| 
 | ||||
|                 bool SitTargetUnOccupied = avOnTargetAlready == UUID.Zero; | ||||
|                 bool SitTargetisSet = avSitOffset != Vector3.Zero || avSitOrientation != Quaternion.Identity; | ||||
| 
 | ||||
|                 if (SitTargetisSet && SitTargetUnOccupied) | ||||
|                 if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) | ||||
|                 { | ||||
|                     //switch the target to this prim | ||||
|                     return part; | ||||
|  | @ -1865,10 +1853,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             return targetPart; | ||||
|         } | ||||
| 
 | ||||
|         private void SendSitResponse(UUID targetID, Vector3 offset, Quaternion pSitOrientation) | ||||
|         private void SendSitResponse(UUID targetID, Vector3 offset, Quaternion sitOrientation) | ||||
|         { | ||||
|             Vector3 pos = new Vector3(); | ||||
|             Quaternion sitOrientation = pSitOrientation; | ||||
|             Vector3 cameraEyeOffset = Vector3.Zero; | ||||
|             Vector3 cameraAtOffset = Vector3.Zero; | ||||
|             bool forceMouselook = false; | ||||
|  | @ -1880,42 +1866,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             // TODO: determine position to sit at based on scene geometry; don't trust offset from client | ||||
|             // see http://wiki.secondlife.com/wiki/User:Andrew_Linden/Office_Hours/2007_11_06 for details on how LL does it | ||||
| 
 | ||||
|             // Is a sit target available? | ||||
|             Vector3 avSitOffSet = part.SitTargetPosition; | ||||
|             Quaternion avSitOrientation = part.SitTargetOrientation; | ||||
|             UUID avOnTargetAlready = part.SitTargetAvatar; | ||||
| 
 | ||||
|             bool SitTargetUnOccupied = (!(avOnTargetAlready != UUID.Zero)); | ||||
|             bool SitTargetisSet = | ||||
|                 (!(avSitOffSet == Vector3.Zero && | ||||
|                    ( | ||||
|                        avSitOrientation == Quaternion.Identity // Valid Zero Rotation quaternion | ||||
|                        || avSitOrientation.X == 0f && avSitOrientation.Y == 0f && avSitOrientation.Z == 1f && avSitOrientation.W == 0f // W-Z Mapping was invalid at one point | ||||
|                        || avSitOrientation.X == 0f && avSitOrientation.Y == 0f && avSitOrientation.Z == 0f && avSitOrientation.W == 0f // Invalid Quaternion | ||||
|                    ) | ||||
|                    )); | ||||
| 
 | ||||
| //            m_log.DebugFormat("[SCENE PRESENCE]: {0} {1}", SitTargetisSet, SitTargetUnOccupied); | ||||
| 
 | ||||
|             if (PhysicsActor != null) | ||||
|                 m_sitAvatarHeight = PhysicsActor.Size.Z; | ||||
| 
 | ||||
|             bool canSit = false; | ||||
|             pos = part.AbsolutePosition + offset; | ||||
|             Vector3 pos = part.AbsolutePosition + offset; | ||||
| 
 | ||||
|             if (SitTargetisSet) | ||||
|             if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) | ||||
|             { | ||||
|                 if (SitTargetUnOccupied) | ||||
|                 { | ||||
| //                    m_log.DebugFormat( | ||||
| //                        "[SCENE PRESENCE]: Sitting {0} on {1} {2} because sit target is set and unoccupied", | ||||
| //                        Name, part.Name, part.LocalId); | ||||
| 
 | ||||
|                     part.SitTargetAvatar = UUID; | ||||
|                     offset = new Vector3(avSitOffSet.X, avSitOffSet.Y, avSitOffSet.Z); | ||||
|                     sitOrientation = avSitOrientation; | ||||
|                     canSit = true; | ||||
|                 } | ||||
|                 offset = part.SitTargetPosition; | ||||
|                 sitOrientation = part.SitTargetOrientation; | ||||
|                 canSit = true; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 BlueWall
						BlueWall