From 05a2feba5d780c57c252891a20071800fd9f2e3e Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 4 Aug 2014 19:57:47 +0100
Subject: start sending terrain in scenePresence after well defined avatar.
Minor change on significante AgentUpdate check.
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 28 +++++++++++++-----
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 34 +++++++++++-----------
2 files changed, 37 insertions(+), 25 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 34a2797..7d61577 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -577,7 +577,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Fire the callback for this connection closing
if (OnConnectionClosed != null)
+ {
OnConnectionClosed(this);
+ }
+
// Flush all of the packets out of the UDP server for this client
if (m_udpServer != null)
@@ -5518,8 +5521,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
-// AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false);
- AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, true);
+ AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false);
AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest);
AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance);
@@ -5732,10 +5734,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#region Scene/Avatar
// Threshold for body rotation to be a significant agent update
- private const float QDELTA = 0.000001f;
+ // private const float QDELTA = 0.000001f;
+ // QDELTA is now relative to abs of cos of angle between orientations
+
+ private const float QDELTABODY = 1 - 0.0001f;
+ private const float QDELTAHEAD = 1 - 0.0001f;
+
// Threshold for camera rotation to be a significant agent update
private const float VDELTA = 0.01f;
-
+
///
/// This checks the update significance against the last update made.
///
@@ -5755,13 +5762,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{
- float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
+ // float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
//qdelta2 = 1 - (float)Math.Pow(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation), 2);
+ // now using abs of cos
+ float qdelta1 = (float)Math.Abs(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation));
+ float qdelta2 = (float)Math.Abs(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation));
bool movementSignificant =
- (qdelta1 > QDELTA) // significant if body rotation above threshold
- // Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
+// (qdelta1 > QDELTA) // significant if body rotation above threshold
+ (qdelta1 < QDELTABODY) // higher angle lower cos
+// Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
// || (qdelta2 > QDELTA * 10) // significant if head rotation above threshold
+ || (qdelta2 < QDELTAHEAD) // using cos above
|| (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed
|| (x.ControlFlags != (byte)AgentManager.ControlFlags.NONE) // significant if user supplying any movement update commands
|| (x.Far != m_thisAgentUpdateArgs.Far) // significant if far distance changed
@@ -6476,7 +6488,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Action handlerRegionHandShakeReply = OnRegionHandShakeReply;
if (handlerRegionHandShakeReply != null)
{
- Thread.Sleep(500);
+// Thread.Sleep(500);
handlerRegionHandShakeReply(this);
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index b7c8594..a3fdae1 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1750,25 +1750,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
endPoint,
sessionInfo);
- // Send ack straight away to let the viewer know that the connection is active.
- // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
- // circuit code to the existing child agent. This is not particularly obvious.
- SendAckImmediate(endPoint, uccp.Header.Sequence);
-
- // We only want to send initial data to new clients, not ones which are being converted from child to root.
- if (client != null)
- {
- AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
- bool tp = (aCircuit.teleportFlags > 0);
- // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
- if (!tp)
- client.SceneAgent.SendInitialDataToMe();
- }
-
// Now we know we can handle more data
- Thread.Sleep(200);
+// Thread.Sleep(200);
- // Obtain the queue and remove it from the cache
+ // Obtain the pending queue and remove it from the cache
Queue queue = null;
lock (m_pendingCache)
@@ -1790,6 +1775,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
PacketReceived(buf);
}
queue = null;
+
+ // Send ack straight away to let the viewer know that the connection is active.
+ // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
+ // circuit code to the existing child agent. This is not particularly obvious.
+ SendAckImmediate(endPoint, uccp.Header.Sequence);
+
+ // We only want to send initial data to new clients, not ones which are being converted from child to root.
+ if (client != null)
+ {
+ AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
+ bool tp = (aCircuit.teleportFlags > 0);
+ // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
+ if (!tp)
+ client.SceneAgent.SendInitialDataToMe();
+ }
}
else
{
--
cgit v1.1