* refactor: Move responsibility for deciding whether a group should be repersisted on to callers of SceneObjectGroup.SendGroupTeruseUpdate()

0.6.0-stable
Justin Clarke Casey 2008-06-27 14:39:21 +00:00
parent 836557a2f7
commit d34a46eae1
2 changed files with 24 additions and 5 deletions

View File

@ -1082,6 +1082,12 @@ namespace OpenSim.Region.Environment.Scenes
} }
} }
/// <summary>
/// Update the position of the given part
/// </summary>
/// <param name="localID"></param>
/// <param name="pos"></param>
/// <param name="remoteClient"></param>
protected internal void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) protected internal void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
{ {
SceneObjectGroup group = GetGroupByPrim(localID); SceneObjectGroup group = GetGroupByPrim(localID);
@ -1093,6 +1099,7 @@ namespace OpenSim.Region.Environment.Scenes
group.SendGroupTerseUpdate(); group.SendGroupTerseUpdate();
return; return;
} }
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment) if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
{ {
group.UpdateSinglePosition(pos, localID); group.UpdateSinglePosition(pos, localID);
@ -1101,7 +1108,7 @@ namespace OpenSim.Region.Environment.Scenes
} }
/// <summary> /// <summary>
/// /// Update the position of the given part
/// </summary> /// </summary>
/// <param name="localID"></param> /// <param name="localID"></param>
/// <param name="pos"></param> /// <param name="pos"></param>
@ -1122,6 +1129,7 @@ namespace OpenSim.Region.Environment.Scenes
if (!m_parentScene.ExternalChecks.ExternalChecksCanObjectEntry(group.UUID,pos) && !group.RootPart.m_IsAttachment) if (!m_parentScene.ExternalChecks.ExternalChecksCanObjectEntry(group.UUID,pos) && !group.RootPart.m_IsAttachment)
{ {
group.SendGroupTerseUpdate(); group.SendGroupTerseUpdate();
return; return;
} }
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment) if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
@ -1168,6 +1176,13 @@ namespace OpenSim.Region.Environment.Scenes
} }
} }
/// <summary>
/// Move the given object
/// </summary>
/// <param name="objectID"></param>
/// <param name="offset"></param>
/// <param name="pos"></param>
/// <param name="remoteClient"></param>
protected internal void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) protected internal void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
{ {
SceneObjectGroup group = GetGroupByPrim(objectID); SceneObjectGroup group = GetGroupByPrim(objectID);

View File

@ -1588,8 +1588,6 @@ namespace OpenSim.Region.Environment.Scenes
/// </summary> /// </summary>
public void SendGroupTerseUpdate() public void SendGroupTerseUpdate()
{ {
HasGroupChanged = true;
lock (m_parts) lock (m_parts)
{ {
foreach (SceneObjectPart part in m_parts.Values) foreach (SceneObjectPart part in m_parts.Values)
@ -2179,7 +2177,7 @@ namespace OpenSim.Region.Environment.Scenes
#region Position #region Position
/// <summary> /// <summary>
/// /// Move this scene object
/// </summary> /// </summary>
/// <param name="pos"></param> /// <param name="pos"></param>
public void UpdateGroupPosition(LLVector3 pos) public void UpdateGroupPosition(LLVector3 pos)
@ -2192,20 +2190,24 @@ namespace OpenSim.Region.Environment.Scenes
} }
AbsolutePosition = pos; AbsolutePosition = pos;
HasGroupChanged = true;
} }
//we need to do a terse update even if the move wasn't allowed //we need to do a terse update even if the move wasn't allowed
// so that the position is reset in the client (the object snaps back) // so that the position is reset in the client (the object snaps back)
ScheduleGroupForTerseUpdate(); ScheduleGroupForTerseUpdate();
} }
/// <summary> /// <summary>
/// /// Update the position of a single part of this scene object
/// </summary> /// </summary>
/// <param name="pos"></param> /// <param name="pos"></param>
/// <param name="localID"></param> /// <param name="localID"></param>
public void UpdateSinglePosition(LLVector3 pos, uint localID) public void UpdateSinglePosition(LLVector3 pos, uint localID)
{ {
SceneObjectPart part = GetChildPart(localID); SceneObjectPart part = GetChildPart(localID);
if (part != null) if (part != null)
{ {
if (part.UUID == m_rootPart.UUID) if (part.UUID == m_rootPart.UUID)
@ -2216,6 +2218,8 @@ namespace OpenSim.Region.Environment.Scenes
{ {
part.UpdateOffSet(pos); part.UpdateOffSet(pos);
} }
HasGroupChanged = true;
} }
} }