Push updates from keyframe directly to the front of the output queue rather
than through the update system.avinationmerge
parent
e85a6237bf
commit
04235e58e8
|
@ -698,7 +698,8 @@ namespace OpenSim.Framework
|
|||
ExtraData = 1 << 20,
|
||||
Sound = 1 << 21,
|
||||
Joint = 1 << 22,
|
||||
FullUpdate = UInt32.MaxValue
|
||||
Immediate = 1 << 23,
|
||||
FullUpdate = UInt32.MaxValue & (uint)~((uint)1<<23)
|
||||
}
|
||||
|
||||
public static class PrimUpdateFlagsExtensions
|
||||
|
|
|
@ -3721,6 +3721,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// </summary>
|
||||
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
|
||||
{
|
||||
if ((updateFlags & PrimUpdateFlags.Immediate) != 0)
|
||||
{
|
||||
SendUnqueuedTerseUpdate((SceneObjectPart)entity);
|
||||
return;
|
||||
}
|
||||
|
||||
if (entity is SceneObjectPart)
|
||||
{
|
||||
SceneObjectPart e = (SceneObjectPart)entity;
|
||||
|
@ -4075,6 +4081,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
ProcessEntityUpdates(-1);
|
||||
}
|
||||
|
||||
public void SendUnqueuedTerseUpdate(SceneObjectPart part)
|
||||
{
|
||||
ImprovedTerseObjectUpdatePacket packet
|
||||
= (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
|
||||
PacketType.ImprovedTerseObjectUpdate);
|
||||
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
|
||||
packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
|
||||
packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
|
||||
|
||||
packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
|
||||
|
||||
OutPacket(packet, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
||||
}
|
||||
|
||||
#endregion Primitive Packet/Data Sending Methods
|
||||
|
||||
// These are used to implement an adaptive backoff in the number
|
||||
|
|
|
@ -417,7 +417,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
m_group.RootPart.Velocity = Vector3.Zero;
|
||||
m_group.RootPart.AngularVelocity = Vector3.Zero;
|
||||
m_group.SendGroupRootTerseUpdate();
|
||||
m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
|
||||
// m_group.RootPart.ScheduleTerseUpdate();
|
||||
m_frames.Clear();
|
||||
}
|
||||
|
@ -429,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
m_group.RootPart.Velocity = Vector3.Zero;
|
||||
m_group.RootPart.AngularVelocity = Vector3.Zero;
|
||||
m_group.SendGroupRootTerseUpdate();
|
||||
m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
|
||||
// m_group.RootPart.ScheduleTerseUpdate();
|
||||
|
||||
}
|
||||
|
@ -551,7 +551,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (m_group.RootPart.Velocity != Vector3.Zero)
|
||||
{
|
||||
m_group.RootPart.Velocity = Vector3.Zero;
|
||||
m_group.SendGroupRootTerseUpdate();
|
||||
m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
|
||||
|
||||
}
|
||||
return;
|
||||
|
@ -695,7 +695,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (update)
|
||||
{
|
||||
m_group.SendGroupRootTerseUpdate();
|
||||
m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -731,7 +731,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (m_group.RootPart.Velocity != Vector3.Zero)
|
||||
{
|
||||
m_group.RootPart.Velocity = Vector3.Zero;
|
||||
m_group.SendGroupRootTerseUpdate();
|
||||
m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
|
||||
// m_group.RootPart.ScheduleTerseUpdate();
|
||||
}
|
||||
}
|
||||
|
@ -743,7 +743,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (m_group != null)
|
||||
{
|
||||
m_group.RootPart.Velocity = Vector3.Zero;
|
||||
m_group.SendGroupRootTerseUpdate();
|
||||
m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
|
||||
// m_group.RootPart.ScheduleTerseUpdate();
|
||||
|
||||
if (m_running)
|
||||
|
|
|
@ -2637,11 +2637,16 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// external modules.
|
||||
/// </summary>
|
||||
public void SendGroupRootTerseUpdate()
|
||||
{
|
||||
SendGroupRootTerseUpdate(0);
|
||||
}
|
||||
|
||||
public void SendGroupRootTerseUpdate(PrimUpdateFlags flags)
|
||||
{
|
||||
if (IsDeleted)
|
||||
return;
|
||||
|
||||
RootPart.SendTerseUpdateToAllClients();
|
||||
RootPart.SendTerseUpdateToAllClients(flags);
|
||||
}
|
||||
|
||||
public void QueueForUpdateCheck()
|
||||
|
|
|
@ -3314,6 +3314,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// Send a terse update to all clients
|
||||
/// </summary>
|
||||
public void SendTerseUpdateToAllClients()
|
||||
{
|
||||
SendTerseUpdateToAllClients(0);
|
||||
}
|
||||
|
||||
public void SendTerseUpdateToAllClients(PrimUpdateFlags flags)
|
||||
{
|
||||
if (ParentGroup == null || ParentGroup.Scene == null)
|
||||
return;
|
||||
|
@ -3328,7 +3333,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
ParentGroup.Scene.ForEachClient(delegate(IClientAPI client)
|
||||
{
|
||||
SendTerseUpdateToClient(client);
|
||||
SendTerseUpdateToClient(client, flags);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -5132,6 +5137,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
#endregion Public Methods
|
||||
|
||||
public void SendTerseUpdateToClient(IClientAPI remoteClient)
|
||||
{
|
||||
SendTerseUpdateToClient(remoteClient, 0);
|
||||
}
|
||||
|
||||
public void SendTerseUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags flags)
|
||||
{
|
||||
if (ParentGroup.IsDeleted)
|
||||
return;
|
||||
|
@ -5146,7 +5156,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
remoteClient.SendEntityUpdate(
|
||||
this,
|
||||
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
|
||||
| PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
|
||||
| PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity | flags);
|
||||
|
||||
ParentGroup.Scene.StatsReporter.AddObjectUpdates(1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue