lost in updates
parent
d841c593b9
commit
ae00623b65
|
@ -356,7 +356,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
rootGroup.LinkToGroup(allparts[j]);
|
||||
}
|
||||
|
||||
rootGroup.ScheduleGroupForFullUpdate();
|
||||
rootGroup.ScheduleGroupForFullAnimUpdate();
|
||||
pos
|
||||
= m_scene.GetNewRezLocation(
|
||||
Vector3.Zero, rootpos, UUID.Zero, rot, (byte)1, 1, true, allparts[0].GroupScale, false);
|
||||
|
|
|
@ -1096,7 +1096,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
// will succeed, as that will not update if an attachment is selected.
|
||||
so.IsSelected = false; // fudge....
|
||||
|
||||
so.ScheduleGroupForFullUpdate();
|
||||
so.ScheduleGroupForFullAnimUpdate();
|
||||
}
|
||||
|
||||
// In case it is later dropped again, don't let
|
||||
|
|
|
@ -2537,7 +2537,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
sceneObject.RootPart.CreatorIdentification = UserManagementModule.GetUserUUI(ownerID);
|
||||
|
||||
sceneObject.InvalidateDeepEffectivePerms();;
|
||||
sceneObject.ScheduleGroupForFullUpdate();
|
||||
sceneObject.ScheduleGroupForFullAnimUpdate();
|
||||
|
||||
return sceneObject;
|
||||
}
|
||||
|
|
|
@ -485,7 +485,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
if (sendClientUpdates)
|
||||
sceneObject.ScheduleGroupForFullUpdate();
|
||||
sceneObject.ScheduleGroupForFullAnimUpdate();
|
||||
|
||||
if (attachToBackup)
|
||||
sceneObject.AttachToBackup();
|
||||
|
@ -1825,7 +1825,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
try
|
||||
{
|
||||
|
||||
List<SceneObjectGroup> childGroups = new List<SceneObjectGroup>();
|
||||
|
||||
// We do this in reverse to get the link order of the prims correct
|
||||
|
@ -1870,8 +1869,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
parentGroup.RootPart.CreateSelected = true;
|
||||
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
||||
parentGroup.HasGroupChanged = true;
|
||||
parentGroup.ScheduleGroupForFullUpdate();
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
@ -1886,7 +1883,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
parentGroup.AdjustChildPrimPermissions(false);
|
||||
parentGroup.HasGroupChanged = true;
|
||||
parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true);
|
||||
parentGroup.ScheduleGroupForFullUpdate();
|
||||
parentGroup.ScheduleGroupForFullAnimUpdate();
|
||||
Monitor.Exit(m_updateLock);
|
||||
}
|
||||
}
|
||||
|
@ -1949,7 +1946,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
child.ParentGroup.DelinkFromGroup(child, true);
|
||||
//child.ParentGroup is now other
|
||||
child.ParentGroup.HasGroupChanged = true;
|
||||
child.ParentGroup.ScheduleGroupForFullUpdate();
|
||||
child.ParentGroup.ScheduleGroupForFullAnimUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1991,7 +1988,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
newRoot.TriggerScriptChangedEvent(Changed.LINK);
|
||||
newRoot.ParentGroup.HasGroupChanged = true;
|
||||
newRoot.ParentGroup.InvalidatePartsLinkMaps();
|
||||
newRoot.ParentGroup.ScheduleGroupForFullUpdate();
|
||||
newRoot.ParentGroup.ScheduleGroupForFullAnimUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2131,7 +2128,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
copy.ResumeScripts();
|
||||
|
||||
copy.HasGroupChanged = true;
|
||||
copy.ScheduleGroupForFullUpdate();
|
||||
copy.ScheduleGroupForFullAnimUpdate();
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -950,7 +950,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
sog.inTransit = false;
|
||||
AttachToBackup();
|
||||
sog.ScheduleGroupForFullUpdate();
|
||||
sog.ScheduleGroupForFullAnimUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2668,7 +2668,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
dupe.HasGroupChanged = true;
|
||||
dupe.AttachToBackup();
|
||||
|
||||
dupe.ScheduleGroupForFullUpdate();
|
||||
dupe.ScheduleGroupForFullAnimUpdate();
|
||||
}
|
||||
|
||||
dupe.InvalidatePartsLinkMaps();
|
||||
|
@ -3028,10 +3028,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </remarks>
|
||||
public void ScheduleGroupForFullUpdate()
|
||||
{
|
||||
// if (IsAttachment)
|
||||
// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId);
|
||||
|
||||
// if (IsAttachment)
|
||||
// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId);
|
||||
checkAtTargets();
|
||||
if (Scene.GetNumberOfClients() == 0)
|
||||
return;
|
||||
|
||||
RootPart.ScheduleFullUpdate();
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
|
@ -3043,6 +3045,40 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
public void ScheduleGroupForFullAnimUpdate()
|
||||
{
|
||||
// if (IsAttachment)
|
||||
// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId);
|
||||
checkAtTargets();
|
||||
|
||||
if (Scene.GetNumberOfClients() == 0)
|
||||
return;
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
|
||||
if (!RootPart.Shape.MeshFlagEntry)
|
||||
{
|
||||
RootPart.ScheduleFullUpdate();
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
if (part != RootPart)
|
||||
part.ScheduleFullUpdate();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
RootPart.ScheduleFullAnimUpdate();
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
if (part != RootPart)
|
||||
part.ScheduleFullAnimUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Schedule a terse update for this scene object to all interested viewers.
|
||||
/// </summary>
|
||||
|
@ -3060,36 +3096,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
parts[i].ScheduleTerseUpdate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Immediately send a full update for this scene object.
|
||||
/// </summary>
|
||||
public void SendGroupFullUpdate()
|
||||
{
|
||||
if (IsDeleted)
|
||||
return;
|
||||
|
||||
// m_log.DebugFormat("[SOG]: Sending immediate full group update for {0} {1}", Name, UUID);
|
||||
|
||||
if (IsAttachment)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(AttachedAvatar);
|
||||
if (sp != null)
|
||||
{
|
||||
sp.SendAttachmentUpdate(this, PrimUpdateFlags.FullUpdate);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RootPart.SendFullUpdateToAllClientsNoAttachment();
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
if (part != RootPart)
|
||||
part.SendFullUpdateToAllClientsNoAttachment();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Immediately send an update for this scene object's root prim only.
|
||||
/// This is for updates regarding the object as a whole, and none of its parts in particular.
|
||||
|
|
|
@ -3297,6 +3297,26 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
ParentGroup.Scene.EventManager.TriggerSceneObjectPartUpdated(this, true);
|
||||
}
|
||||
|
||||
public void ScheduleFullAnimUpdate()
|
||||
{
|
||||
if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.Scene == null)
|
||||
return;
|
||||
|
||||
if (ParentGroup.Scene.GetNumberOfClients() == 0)
|
||||
return;
|
||||
|
||||
PrimUpdateFlags update = PrimUpdateFlags.FullUpdatewithAnim;
|
||||
if (Animations == null || !ParentGroup.RootPart.Shape.MeshFlagEntry)
|
||||
update = PrimUpdateFlags.FullUpdate;
|
||||
|
||||
ParentGroup.QueueForUpdateCheck(); // just in case
|
||||
|
||||
lock (UpdateFlagLock)
|
||||
UpdateFlag |= update;
|
||||
|
||||
ParentGroup.Scene.EventManager.TriggerSceneObjectPartUpdated(this, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Schedule a terse update for this prim. Terse updates only send position,
|
||||
/// rotation, velocity and rotational velocity information.
|
||||
|
@ -3334,6 +3354,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.Scene == null)
|
||||
return;
|
||||
|
||||
if (Animations == null)
|
||||
update &= ~PrimUpdateFlags.Animations;
|
||||
if (update == PrimUpdateFlags.None)
|
||||
return;
|
||||
|
||||
ParentGroup.HasGroupChanged = true;
|
||||
|
||||
if (ParentGroup.Scene.GetNumberOfClients() == 0)
|
||||
|
@ -4571,7 +4596,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (ParentGroup != null)
|
||||
{
|
||||
ParentGroup.HasGroupChanged = true;
|
||||
ScheduleFullUpdate();
|
||||
ScheduleFullAnimUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5367,16 +5392,23 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
#endregion Public Methods
|
||||
|
||||
public void SendUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags PrimUpdateFlags)
|
||||
public void SendUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags update)
|
||||
{
|
||||
if (ParentGroup.IsDeleted)
|
||||
return;
|
||||
|
||||
if (Animations == null)
|
||||
{
|
||||
update &= ~PrimUpdateFlags.Animations;
|
||||
if (update == PrimUpdateFlags.None)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ParentGroup.IsAttachment &&
|
||||
(ParentGroup.RootPart != this || ParentGroup.AttachedAvatar != remoteClient.AgentId && ParentGroup.HasPrivateAttachmentPoint))
|
||||
return;
|
||||
|
||||
remoteClient.SendEntityUpdate(this, PrimUpdateFlags);
|
||||
remoteClient.SendEntityUpdate(this, update);
|
||||
|
||||
ParentGroup.Scene.StatsReporter.AddObjectUpdates(1);
|
||||
}
|
||||
|
|
|
@ -5364,7 +5364,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
return validated;
|
||||
}
|
||||
|
||||
/*
|
||||
public void SendAttachmentsToAllAgents()
|
||||
{
|
||||
lock (m_attachments)
|
||||
|
@ -5385,7 +5385,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
// send attachments to a client without filters except for huds
|
||||
// for now they are checked in several places down the line...
|
||||
public void SendAttachmentsToAgentNF(ScenePresence p)
|
||||
|
@ -5429,14 +5429,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (IsChildAgent || IsInTransit)
|
||||
return;
|
||||
|
||||
|
||||
SceneObjectPart[] origparts = sog.Parts;
|
||||
SceneObjectPart[] parts = new SceneObjectPart[origparts.Length];
|
||||
PrimUpdateFlags[] flags = new PrimUpdateFlags[origparts.Length];
|
||||
|
||||
SceneObjectPart rootpart = sog.RootPart;
|
||||
PrimUpdateFlags cur = sog.RootPart.GetAndClearUpdateFlag();
|
||||
bool noanim = !rootpart.Shape.MeshFlagEntry;
|
||||
|
||||
int nparts = 0;
|
||||
if (noanim || rootpart.Animations == null)
|
||||
cur &= ~PrimUpdateFlags.Animations;
|
||||
if (cur != PrimUpdateFlags.None)
|
||||
{
|
||||
flags[nparts] = cur;
|
||||
|
@ -5450,7 +5454,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
continue;
|
||||
|
||||
cur = origparts[i].GetAndClearUpdateFlag();
|
||||
if(cur == PrimUpdateFlags.None)
|
||||
if (noanim || origparts[i].Animations == null)
|
||||
cur &= ~PrimUpdateFlags.Animations;
|
||||
if (cur == PrimUpdateFlags.None)
|
||||
continue;
|
||||
flags[nparts] = cur;
|
||||
parts[nparts] = origparts[i];
|
||||
|
@ -5485,19 +5491,45 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (IsChildAgent || IsInTransit)
|
||||
return;
|
||||
|
||||
SceneObjectPart[] parts = sog.Parts;
|
||||
SceneObjectPart[] origparts = sog.Parts;
|
||||
SceneObjectPart[] parts = new SceneObjectPart[origparts.Length];
|
||||
PrimUpdateFlags[] flags = new PrimUpdateFlags[origparts.Length];
|
||||
|
||||
SceneObjectPart rootpart = sog.RootPart;
|
||||
bool noanim = !rootpart.Shape.MeshFlagEntry;
|
||||
|
||||
ControllingClient.SendEntityUpdate(rootpart, update);
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
int nparts = 0;
|
||||
PrimUpdateFlags cur = update;
|
||||
if (noanim || rootpart.Animations == null)
|
||||
cur &= ~PrimUpdateFlags.Animations;
|
||||
if (cur != PrimUpdateFlags.None)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
if (part == rootpart)
|
||||
continue;
|
||||
ControllingClient.SendEntityUpdate(part, update);
|
||||
flags[nparts] = cur;
|
||||
parts[nparts] = rootpart;
|
||||
++nparts;
|
||||
}
|
||||
|
||||
for (int i = 0; i < origparts.Length; i++)
|
||||
{
|
||||
if (origparts[i] == rootpart)
|
||||
continue;
|
||||
|
||||
cur = update;
|
||||
if (noanim || origparts[i].Animations == null)
|
||||
cur &= ~PrimUpdateFlags.Animations;
|
||||
if (cur == PrimUpdateFlags.None)
|
||||
continue;
|
||||
flags[nparts] = cur;
|
||||
parts[nparts] = origparts[i];
|
||||
++nparts;
|
||||
}
|
||||
|
||||
if (nparts == 0)
|
||||
return;
|
||||
|
||||
for(int i = 0; i < nparts; i++)
|
||||
ControllingClient.SendEntityUpdate(parts[i], flags[i]);
|
||||
|
||||
if (sog.HasPrivateAttachmentPoint)
|
||||
return;
|
||||
|
||||
|
@ -5512,22 +5544,24 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
p.ControllingClient.SendEntityUpdate(rootpart, update);
|
||||
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
if (part == rootpart)
|
||||
continue;
|
||||
p.ControllingClient.SendEntityUpdate(part, update);
|
||||
}
|
||||
for (int i = 0; i < nparts; i++)
|
||||
p.ControllingClient.SendEntityUpdate(parts[i], flags[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public void SendAttachmentUpdate(SceneObjectPart part, PrimUpdateFlags flag)
|
||||
public void SendAttachmentUpdate(SceneObjectPart part, PrimUpdateFlags update)
|
||||
{
|
||||
if (IsChildAgent || IsInTransit)
|
||||
return;
|
||||
|
||||
ControllingClient.SendEntityUpdate(part, flag);
|
||||
if ((update & PrimUpdateFlags.Animations) != 0 && part.Animations == null)
|
||||
{
|
||||
update &= ~PrimUpdateFlags.Animations;
|
||||
if (update == PrimUpdateFlags.None)
|
||||
return;
|
||||
}
|
||||
|
||||
ControllingClient.SendEntityUpdate(part, update);
|
||||
|
||||
if (part.ParentGroup.HasPrivateAttachmentPoint)
|
||||
return;
|
||||
|
@ -5540,7 +5574,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && !p.IsViewerUIGod)
|
||||
continue;
|
||||
|
||||
p.ControllingClient.SendEntityUpdate(part, flag);
|
||||
p.ControllingClient.SendEntityUpdate(part, update);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue