work on hide avatars
parent
a5e9429f2b
commit
0a1e9d731d
|
@ -140,7 +140,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly float SIGNIFICANT_MOVEMENT = 2.0f;
|
public static readonly float SIGNIFICANT_MOVEMENT = 2.0f;
|
||||||
|
|
||||||
|
private UUID m_previusParcelUUID = UUID.Zero;
|
||||||
private UUID m_currentParcelUUID = UUID.Zero;
|
private UUID m_currentParcelUUID = UUID.Zero;
|
||||||
|
private bool m_previusParcelHide = false;
|
||||||
|
private bool m_currentParcelHide = false;
|
||||||
private object parcelLock = new Object();
|
private object parcelLock = new Object();
|
||||||
|
|
||||||
public UUID currentParcelUUID
|
public UUID currentParcelUUID
|
||||||
|
@ -150,7 +153,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
lock (parcelLock)
|
lock (parcelLock)
|
||||||
{
|
{
|
||||||
|
m_previusParcelHide = m_currentParcelHide;
|
||||||
|
m_previusParcelUUID = m_currentParcelUUID;
|
||||||
m_currentParcelUUID = value;
|
m_currentParcelUUID = value;
|
||||||
|
m_currentParcelHide = false;
|
||||||
|
ILandObject land = m_scene.LandChannel.GetLandObject(AbsolutePosition.X, AbsolutePosition.Y);
|
||||||
|
if (land != null && !land.LandData.SeeAVs)
|
||||||
|
m_currentParcelHide = true;
|
||||||
|
if (m_previusParcelUUID != UUID.Zero)
|
||||||
|
ParcelCrossCheck();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,10 +199,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
lock (parcelLock)
|
lock (parcelLock)
|
||||||
{
|
{
|
||||||
ILandObject land = m_scene.LandChannel.GetLandObject(AbsolutePosition.X, AbsolutePosition.Y);
|
return m_currentParcelHide;
|
||||||
if (land == null || !land.LandData.SeeAVs)
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -542,7 +550,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public byte State { get; set; }
|
public byte State { get; set; }
|
||||||
|
|
||||||
private AgentManager.ControlFlags m_AgentControlFlags;
|
private AgentManager.ControlFlags m_AgentControlFlags;
|
||||||
|
@ -1071,6 +1078,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
|
|
||||||
// only in use as part of completemovement
|
// only in use as part of completemovement
|
||||||
|
// other uses need fix
|
||||||
private bool MakeRootAgent(Vector3 pos, bool isFlying)
|
private bool MakeRootAgent(Vector3 pos, bool isFlying)
|
||||||
{
|
{
|
||||||
lock (m_completeMovementLock)
|
lock (m_completeMovementLock)
|
||||||
|
@ -1097,16 +1105,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
part.ParentGroup.AddAvatar(UUID);
|
part.ParentGroup.AddAvatar(UUID);
|
||||||
if (part.SitTargetPosition != Vector3.Zero)
|
if (part.SitTargetPosition != Vector3.Zero)
|
||||||
part.SitTargetAvatar = UUID;
|
part.SitTargetAvatar = UUID;
|
||||||
// ParentPosition = part.GetWorldPosition();
|
|
||||||
ParentID = part.LocalId;
|
ParentID = part.LocalId;
|
||||||
ParentPart = part;
|
ParentPart = part;
|
||||||
m_pos = PrevSitOffset;
|
m_pos = PrevSitOffset;
|
||||||
// pos = ParentPosition;
|
|
||||||
pos = part.GetWorldPosition();
|
pos = part.GetWorldPosition();
|
||||||
}
|
}
|
||||||
ParentUUID = UUID.Zero;
|
ParentUUID = UUID.Zero;
|
||||||
|
|
||||||
// Animator.TrySetMovementAnimation("SIT");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1161,7 +1165,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Moved this from SendInitialData to ensure that Appearance is initialized
|
// Moved this from SendInitialData to ensure that Appearance is initialized
|
||||||
// before the inventory is processed in MakeRootAgent. This fixes a race condition
|
// before the inventory is processed in MakeRootAgent. This fixes a race condition
|
||||||
// related to the handling of attachments
|
// related to the handling of attachments
|
||||||
//m_scene.GetAvatarAppearance(ControllingClient, out Appearance);
|
|
||||||
if (m_scene.TestBorderCross(pos, Cardinals.E))
|
if (m_scene.TestBorderCross(pos, Cardinals.E))
|
||||||
{
|
{
|
||||||
Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.E);
|
Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.E);
|
||||||
|
@ -1496,7 +1500,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
else
|
else
|
||||||
CollisionPlane = new Vector4(0, 0, 0, pos.Z - (1.56f / 6f));
|
CollisionPlane = new Vector4(0, 0, 0, pos.Z - (1.56f / 6f));
|
||||||
|
|
||||||
ControllingClient.SendAgentTerseUpdate(this);
|
SendAgentTerseUpdate(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1797,6 +1801,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// client.Name, client.AgentId, m_scene.RegionInfo.RegionName);
|
// client.Name, client.AgentId, m_scene.RegionInfo.RegionName);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
m_currentParcelHide = false;
|
||||||
|
m_currentParcelUUID = UUID.Zero;
|
||||||
|
|
||||||
// send initial land overlay and parcel
|
// send initial land overlay and parcel
|
||||||
if (!IsChildAgent)
|
if (!IsChildAgent)
|
||||||
{
|
{
|
||||||
|
@ -1807,6 +1814,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_previusParcelHide = m_currentParcelHide;
|
||||||
|
m_previusParcelUUID = m_currentParcelUUID;
|
||||||
|
|
||||||
// send agentData to all clients including us (?)
|
// send agentData to all clients including us (?)
|
||||||
// get appearance
|
// get appearance
|
||||||
// if in cache sent it to all clients
|
// if in cache sent it to all clients
|
||||||
|
@ -1819,11 +1829,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
||||||
if (m_agentTransfer != null)
|
if (m_agentTransfer != null)
|
||||||
m_agentTransfer.EnableChildAgents(this);
|
m_agentTransfer.EnableChildAgents(this);
|
||||||
/* moved down
|
|
||||||
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
|
||||||
if (friendsModule != null)
|
|
||||||
friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: If we force an update here, then multiple attachments do appear correctly on a destination region
|
// XXX: If we force an update here, then multiple attachments do appear correctly on a destination region
|
||||||
|
@ -1845,13 +1850,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (!IsChildAgent)
|
if (!IsChildAgent)
|
||||||
{
|
{
|
||||||
// moved from makeroot missing in sendInitialDataToMe ?
|
// moved from makeroot missing in sendInitialDataToMe
|
||||||
|
// its already there
|
||||||
|
/*
|
||||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
|
m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
|
||||||
{
|
{
|
||||||
if (presence != this)
|
if (presence != this)
|
||||||
presence.Animator.SendAnimPackToClient(ControllingClient);
|
presence.Animator.SendAnimPackToClient(ControllingClient);
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
if (openChildAgents)
|
if (openChildAgents)
|
||||||
{
|
{
|
||||||
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
||||||
|
@ -2064,7 +2071,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// We need to send this back to the client in order to stop the edit beams
|
// We need to send this back to the client in order to stop the edit beams
|
||||||
if ((oldState & (uint)AgentState.Editing) != 0 && State == (uint)AgentState.None)
|
if ((oldState & (uint)AgentState.Editing) != 0 && State == (uint)AgentState.None)
|
||||||
ControllingClient.SendAgentTerseUpdate(this);
|
SendAgentTerseUpdate(this);
|
||||||
|
|
||||||
PhysicsActor actor = PhysicsActor;
|
PhysicsActor actor = PhysicsActor;
|
||||||
|
|
||||||
|
@ -2303,7 +2310,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// We need to send this back to the client in order to see the edit beams
|
// We need to send this back to the client in order to see the edit beams
|
||||||
if ((State & (uint)AgentState.Editing) != 0)
|
if ((State & (uint)AgentState.Editing) != 0)
|
||||||
ControllingClient.SendAgentTerseUpdate(this);
|
SendAgentTerseUpdate(this);
|
||||||
|
|
||||||
m_scene.EventManager.TriggerOnClientMovement(this);
|
m_scene.EventManager.TriggerOnClientMovement(this);
|
||||||
}
|
}
|
||||||
|
@ -3230,6 +3237,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (IsChildAgent == false)
|
if (IsChildAgent == false)
|
||||||
{
|
{
|
||||||
|
if (IsInTransit)
|
||||||
|
return;
|
||||||
|
|
||||||
// NOTE: Velocity is not the same as m_velocity. Velocity will attempt to
|
// NOTE: Velocity is not the same as m_velocity. Velocity will attempt to
|
||||||
// grab the latest PhysicsActor velocity, whereas m_velocity is often
|
// grab the latest PhysicsActor velocity, whereas m_velocity is often
|
||||||
// storing a requested force instead of an actual traveling velocity
|
// storing a requested force instead of an actual traveling velocity
|
||||||
|
@ -3258,9 +3268,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
#region Update Client(s)
|
#region Update Client(s)
|
||||||
|
|
||||||
|
// this is diferente from SendTerseUpdateToClient
|
||||||
|
// this sends bypassing ententies updates
|
||||||
|
public void SendAgentTerseUpdate(ISceneEntity p)
|
||||||
|
{
|
||||||
|
ControllingClient.SendAgentTerseUpdate(p);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a location update to the client connected to this scenePresence
|
/// Sends a location update to the client connected to this scenePresence
|
||||||
|
/// via entity updates
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="remoteClient"></param>
|
/// <param name="remoteClient"></param>
|
||||||
public void SendTerseUpdateToClient(IClientAPI remoteClient)
|
public void SendTerseUpdateToClient(IClientAPI remoteClient)
|
||||||
|
@ -3270,7 +3287,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (remoteClient.IsActive)
|
if (remoteClient.IsActive)
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity);
|
//m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity);
|
||||||
|
|
||||||
remoteClient.SendEntityUpdate(
|
remoteClient.SendEntityUpdate(
|
||||||
this,
|
this,
|
||||||
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
|
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
|
||||||
|
@ -3280,6 +3296,34 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendTerseUpdateToAgentClient(ScenePresence p)
|
||||||
|
{
|
||||||
|
// messy checks because a client doesn't know what presence it belongs too
|
||||||
|
if (p.IsChildAgent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (p.IsInTransit)
|
||||||
|
return;
|
||||||
|
|
||||||
|
IClientAPI remoteClient = p.ControllingClient;
|
||||||
|
if (remoteClient == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!remoteClient.IsActive)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ParcelHideThisAvatar && p.currentParcelUUID != currentParcelUUID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
//m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity);
|
||||||
|
remoteClient.SendEntityUpdate(
|
||||||
|
this,
|
||||||
|
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
|
||||||
|
| PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
|
||||||
|
|
||||||
|
m_scene.StatsReporter.AddAgentUpdates(1);
|
||||||
|
}
|
||||||
|
|
||||||
// vars to support reduced update frequency when velocity is unchanged
|
// vars to support reduced update frequency when velocity is unchanged
|
||||||
private Vector3 lastVelocitySentToAllClients = Vector3.Zero;
|
private Vector3 lastVelocitySentToAllClients = Vector3.Zero;
|
||||||
|
@ -3321,7 +3365,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
lastPositionSentToAllClients = OffsetPosition;
|
lastPositionSentToAllClients = OffsetPosition;
|
||||||
|
|
||||||
// Console.WriteLine("Scheduled update for {0} in {1}", Name, Scene.Name);
|
// Console.WriteLine("Scheduled update for {0} in {1}", Name, Scene.Name);
|
||||||
m_scene.ForEachClient(SendTerseUpdateToClient);
|
// m_scene.ForEachClient(SendTerseUpdateToClient);
|
||||||
|
m_scene.ForEachScenePresence(SendTerseUpdateToAgentClient);
|
||||||
}
|
}
|
||||||
TriggerScenePresenceUpdated();
|
TriggerScenePresenceUpdated();
|
||||||
}
|
}
|
||||||
|
@ -3389,6 +3434,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!cachedappearance)
|
if (!cachedappearance)
|
||||||
{
|
{
|
||||||
Appearance.ResetAppearance();
|
Appearance.ResetAppearance();
|
||||||
|
// save what ????
|
||||||
|
// maybe needed so the tryretry repair works?
|
||||||
if (m_scene.AvatarFactory != null)
|
if (m_scene.AvatarFactory != null)
|
||||||
m_scene.AvatarFactory.QueueAppearanceSave(UUID);
|
m_scene.AvatarFactory.QueueAppearanceSave(UUID);
|
||||||
}
|
}
|
||||||
|
@ -3400,10 +3447,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SendAvatarDataToAllAgents();
|
SendAvatarDataToAllAgents();
|
||||||
|
|
||||||
// This invocation always shows up in the viewer logs as an error. Is it needed?
|
// This invocation always shows up in the viewer logs as an error. Is it needed?
|
||||||
// try to send what we have even if not in cache
|
// send all information we have
|
||||||
|
// possible not needed since viewer should ask about it
|
||||||
|
// least it all ask for baked
|
||||||
SendAppearanceToAgent(this);
|
SendAppearanceToAgent(this);
|
||||||
|
|
||||||
// If we are using the the cached appearance then send it out to everyone
|
// If we are using the the cached appearance then send it out to everyone
|
||||||
|
// send even grays
|
||||||
if (cachedappearance)
|
if (cachedappearance)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[SCENE PRESENCE]: Baked textures are in the cache for {0} in {1}", Name, m_scene.Name);
|
m_log.DebugFormat("[SCENE PRESENCE]: Baked textures are in the cache for {0} in {1}", Name, m_scene.Name);
|
||||||
|
@ -3432,8 +3482,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastSize = Appearance.AvatarSize;
|
m_lastSize = Appearance.AvatarSize;
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
|
||||||
{
|
{
|
||||||
SendAvatarDataToAgent(scenePresence);
|
SendAvatarDataToAgent(scenePresence);
|
||||||
|
@ -3450,6 +3500,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void SendOtherAgentsAvatarDataToMe()
|
public void SendOtherAgentsAvatarDataToMe()
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
||||||
{
|
{
|
||||||
// only send information about other root agents
|
// only send information about other root agents
|
||||||
|
@ -3470,7 +3521,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void SendAvatarDataToAgent(ScenePresence avatar)
|
public void SendAvatarDataToAgent(ScenePresence avatar)
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
|
//m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID);
|
||||||
|
if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID)
|
||||||
|
return;
|
||||||
avatar.ControllingClient.SendAvatarDataImmediate(this);
|
avatar.ControllingClient.SendAvatarDataImmediate(this);
|
||||||
Animator.SendAnimPackToClient(avatar.ControllingClient);
|
Animator.SendAnimPackToClient(avatar.ControllingClient);
|
||||||
}
|
}
|
||||||
|
@ -3481,7 +3533,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendAppearanceToAllOtherAgents()
|
public void SendAppearanceToAllOtherAgents()
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID);
|
// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID);
|
||||||
|
|
||||||
// only send update from root agents to other clients; children are only "listening posts"
|
// only send update from root agents to other clients; children are only "listening posts"
|
||||||
if (IsChildAgent)
|
if (IsChildAgent)
|
||||||
|
@ -3503,7 +3555,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SendAppearanceToAgent(scenePresence);
|
SendAppearanceToAgent(scenePresence);
|
||||||
count++;
|
count++;
|
||||||
});
|
});
|
||||||
|
|
||||||
m_scene.StatsReporter.AddAgentUpdates(count);
|
m_scene.StatsReporter.AddAgentUpdates(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3537,11 +3588,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);
|
// "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);
|
||||||
|
if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID)
|
||||||
|
return;
|
||||||
avatar.ControllingClient.SendAppearance(
|
avatar.ControllingClient.SendAppearance(
|
||||||
UUID, Appearance.VisualParams, Appearance.Texture.GetBytes());
|
UUID, Appearance.VisualParams, Appearance.Texture.GetBytes());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -4077,6 +4127,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void UpdateMovement()
|
public void UpdateMovement()
|
||||||
{
|
{
|
||||||
|
if (IsInTransit)
|
||||||
|
return;
|
||||||
if (m_forceToApply.HasValue)
|
if (m_forceToApply.HasValue)
|
||||||
{
|
{
|
||||||
Vector3 force = m_forceToApply.Value;
|
Vector3 force = m_forceToApply.Value;
|
||||||
|
@ -4156,6 +4208,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (IsChildAgent || Animator == null)
|
if (IsChildAgent || Animator == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if(IsInTransit)
|
||||||
|
return;
|
||||||
//if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f))
|
//if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f))
|
||||||
// The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents(
|
// The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents(
|
||||||
// as of this comment the interval is set in AddToPhysicalScene
|
// as of this comment the interval is set in AddToPhysicalScene
|
||||||
|
@ -4503,6 +4557,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return validated;
|
return validated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SendAttachmentsToClient(IClientAPI client)
|
||||||
|
{
|
||||||
|
lock (m_attachments)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectGroup gobj in m_attachments)
|
||||||
|
{
|
||||||
|
gobj.SendFullUpdateToClient(client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send a script event to this scene presence's attachments
|
/// Send a script event to this scene presence's attachments
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -5245,5 +5311,137 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_log.InfoFormat("[SCENE PRESENCE]: TELEPORT ******************");
|
m_log.InfoFormat("[SCENE PRESENCE]: TELEPORT ******************");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ParcelCrossCheck()
|
||||||
|
{
|
||||||
|
List<ScenePresence> killsToSendto = new List<ScenePresence>();
|
||||||
|
List<ScenePresence> killsToSendme = new List<ScenePresence>();
|
||||||
|
List<ScenePresence> viewsToSendto = new List<ScenePresence>();
|
||||||
|
List<ScenePresence> viewsToSendme = new List<ScenePresence>();
|
||||||
|
List<ScenePresence> allpresences = null;
|
||||||
|
|
||||||
|
if (m_currentParcelHide)
|
||||||
|
{
|
||||||
|
// now on a private parcel
|
||||||
|
allpresences = m_scene.GetScenePresences();
|
||||||
|
|
||||||
|
if (m_previusParcelHide && m_previusParcelUUID != UUID.Zero)
|
||||||
|
{
|
||||||
|
foreach (ScenePresence p in allpresences)
|
||||||
|
{
|
||||||
|
if (p.IsChildAgent || p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// only those on previus parcel need receive kills
|
||||||
|
if (m_previusParcelUUID == p.currentParcelUUID)
|
||||||
|
{
|
||||||
|
killsToSendto.Add(p); // they dont see me
|
||||||
|
killsToSendme.Add(p); // i dont see them
|
||||||
|
}
|
||||||
|
// only those on new parcel need see
|
||||||
|
if (m_currentParcelUUID == p.currentParcelUUID)
|
||||||
|
{
|
||||||
|
viewsToSendto.Add(p); // they see me
|
||||||
|
viewsToSendme.Add(p); // i see them
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//was on a public area
|
||||||
|
allpresences = m_scene.GetScenePresences();
|
||||||
|
|
||||||
|
foreach (ScenePresence p in allpresences)
|
||||||
|
{
|
||||||
|
if (p.IsChildAgent || p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// those not on new parcel dont see me
|
||||||
|
if (m_currentParcelUUID != p.currentParcelUUID)
|
||||||
|
{
|
||||||
|
killsToSendto.Add(p); // they dont see me
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
viewsToSendme.Add(p); // i see those on it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allpresences.Clear();
|
||||||
|
} // now on a private parcel end
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// now on public parcel
|
||||||
|
if (m_previusParcelHide && m_previusParcelUUID != UUID.Zero)
|
||||||
|
{
|
||||||
|
// was on private area
|
||||||
|
allpresences = m_scene.GetScenePresences();
|
||||||
|
|
||||||
|
foreach (ScenePresence p in allpresences)
|
||||||
|
{
|
||||||
|
if (p.IsChildAgent || p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive)
|
||||||
|
continue;
|
||||||
|
// only those old parcel need receive kills
|
||||||
|
if (m_previusParcelUUID == p.currentParcelUUID)
|
||||||
|
{
|
||||||
|
killsToSendme.Add(p); // i dont see them
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
viewsToSendto.Add(p); // they see me
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return; // was on a public area also
|
||||||
|
} // now on public parcel end
|
||||||
|
|
||||||
|
// send the things
|
||||||
|
// kill main avatar object
|
||||||
|
if (killsToSendto.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (ScenePresence p in killsToSendto)
|
||||||
|
{
|
||||||
|
try { p.ControllingClient.SendKillObject(new List<uint> { LocalId }); }
|
||||||
|
catch (NullReferenceException) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (killsToSendme.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (ScenePresence p in killsToSendme)
|
||||||
|
{
|
||||||
|
try {ControllingClient.SendKillObject(new List<uint> { p.LocalId }); }
|
||||||
|
catch (NullReferenceException) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (viewsToSendto.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (ScenePresence p in viewsToSendto)
|
||||||
|
{
|
||||||
|
p.ControllingClient.SendAvatarDataImmediate(this);
|
||||||
|
SendAppearanceToAgent(p);
|
||||||
|
SendAttachmentsToClient(p.ControllingClient);
|
||||||
|
if (Animator != null)
|
||||||
|
Animator.SendAnimPackToClient(p.ControllingClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (viewsToSendme.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (ScenePresence p in viewsToSendme)
|
||||||
|
{
|
||||||
|
ControllingClient.SendAvatarDataImmediate(p);
|
||||||
|
p.SendAppearanceToAgent(this);
|
||||||
|
p.SendAttachmentsToClient(ControllingClient);
|
||||||
|
if (p.Animator != null)
|
||||||
|
p.Animator.SendAnimPackToClient(ControllingClient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue