mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 09:45:47 +08:00
* Initial commit of the slimupdates2 rewrite. This pass maintains the original behavior of avatar update sending and has a simplified set of IClientAPI methods for sending avatar/prim updates
This commit is contained in:
@@ -104,7 +104,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
#endregion Enumerations
|
||||
|
||||
public class SceneObjectPart : IScriptHost
|
||||
public class SceneObjectPart : IScriptHost, ISceneEntity
|
||||
{
|
||||
/// <value>
|
||||
/// Denote all sides of the prim
|
||||
@@ -712,6 +712,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 RelativePosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsRoot)
|
||||
{
|
||||
if (IsAttachment)
|
||||
return AttachedPos;
|
||||
else
|
||||
return AbsolutePosition;
|
||||
}
|
||||
else
|
||||
{
|
||||
return OffsetPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Quaternion RotationOffset
|
||||
{
|
||||
get
|
||||
@@ -973,7 +991,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
get { return AggregateScriptEvents; }
|
||||
}
|
||||
|
||||
|
||||
public Quaternion SitTargetOrientation
|
||||
{
|
||||
get { return m_sitTargetOrientation; }
|
||||
@@ -2925,11 +2942,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
//if (LocalId != ParentGroup.RootPart.LocalId)
|
||||
//isattachment = ParentGroup.RootPart.IsAttachment;
|
||||
|
||||
byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A};
|
||||
remoteClient.SendPrimitiveToClient(new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape,
|
||||
lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID,
|
||||
m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment,
|
||||
AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, ParentGroup.GetUpdatePriority(remoteClient)));
|
||||
remoteClient.SendPrimUpdate(this, PrimUpdateFlags.FullUpdate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -4640,11 +4653,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
// Causes this thread to dig into the Client Thread Data.
|
||||
// Remember your locking here!
|
||||
remoteClient.SendPrimTerseUpdate(new SendPrimitiveTerseData(m_regionHandle,
|
||||
m_parentGroup.GetTimeDilation(), LocalId, lPos,
|
||||
RotationOffset, Velocity, Acceleration,
|
||||
AngularVelocity, FromItemID,
|
||||
OwnerID, (int)AttachmentPoint, null, ParentGroup.GetUpdatePriority(remoteClient)));
|
||||
remoteClient.SendPrimUpdate(this, PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
|
||||
}
|
||||
|
||||
public void AddScriptLPS(int count)
|
||||
@@ -4694,7 +4703,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
public Color4 GetTextColor()
|
||||
{
|
||||
return new Color4((byte)Color.R, (byte)Color.G, (byte)Color.B, (byte)(0xFF - Color.A));
|
||||
Color color = Color;
|
||||
return new Color4(color.R, color.G, color.B, (byte)(0xFF - color.A));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
public delegate void SendCourseLocationsMethod(UUID scene, ScenePresence presence);
|
||||
|
||||
public class ScenePresence : EntityBase
|
||||
public class ScenePresence : EntityBase, ISceneEntity
|
||||
{
|
||||
// ~ScenePresence()
|
||||
// {
|
||||
@@ -478,6 +478,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 OffsetPosition
|
||||
{
|
||||
get { return m_pos; }
|
||||
set { m_pos = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Current velocity of the avatar.
|
||||
/// </summary>
|
||||
@@ -1036,8 +1042,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
AbsolutePosition = AbsolutePosition + new Vector3(0f, 0f, (1.56f / 6f));
|
||||
}
|
||||
|
||||
ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
|
||||
AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient)));
|
||||
ControllingClient.SendPrimUpdate(this, PrimUpdateFlags.Position);
|
||||
//ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
|
||||
// AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient)));
|
||||
}
|
||||
|
||||
public void AddNeighbourRegion(ulong regionHandle, string cap)
|
||||
@@ -2360,8 +2367,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
//m_log.DebugFormat("[SCENEPRESENCE]: TerseUpdate: Pos={0} Rot={1} Vel={2}", m_pos, m_bodyRot, m_velocity);
|
||||
|
||||
remoteClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
|
||||
pos, velocity, Vector3.Zero, m_bodyRot, CollisionPlane, m_uuid, null, GetUpdatePriority(remoteClient)));
|
||||
remoteClient.SendPrimUpdate(this, PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
|
||||
|
||||
m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS));
|
||||
m_scene.StatsReporter.AddAgentUpdates(1);
|
||||
@@ -2457,9 +2463,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z += m_appearance.HipOffset;
|
||||
|
||||
remoteAvatar.m_controllingClient.SendAvatarData(new SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid,
|
||||
LocalId, pos, m_appearance.Texture.GetBytes(),
|
||||
m_parentID, m_bodyRot));
|
||||
remoteAvatar.m_controllingClient.SendAvatarDataImmediate(this);
|
||||
m_scene.StatsReporter.AddAgentUpdates(1);
|
||||
}
|
||||
|
||||
@@ -2527,8 +2531,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z += m_appearance.HipOffset;
|
||||
|
||||
m_controllingClient.SendAvatarData(new SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId,
|
||||
pos, m_appearance.Texture.GetBytes(), m_parentID, m_bodyRot));
|
||||
m_controllingClient.SendAvatarDataImmediate(this);
|
||||
|
||||
SendInitialFullUpdateToAllClients();
|
||||
SendAppearanceToAllOtherAgents();
|
||||
@@ -2638,9 +2641,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z += m_appearance.HipOffset;
|
||||
|
||||
m_controllingClient.SendAvatarData(new SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId,
|
||||
pos, m_appearance.Texture.GetBytes(), m_parentID, m_bodyRot));
|
||||
|
||||
m_controllingClient.SendAvatarDataImmediate(this);
|
||||
}
|
||||
|
||||
public void SetWearable(int wearableId, AvatarWearable wearable)
|
||||
@@ -3906,7 +3907,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
private void Reprioritize(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
m_controllingClient.ReprioritizeUpdates(StateUpdateTypes.All, UpdatePriority);
|
||||
m_controllingClient.ReprioritizeUpdates(UpdatePriority);
|
||||
|
||||
lock (m_reprioritization_timer)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user