From 7c2f8e2ee94529d317dba83fa52c6624af989270 Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Wed, 26 Nov 2008 16:56:57 +0000
Subject: * Get rid of the phenomena where the avatar sometimes reverts to the
stand animation when flying across borders * Applies to both standalone and
grid mode * The slight retardation on border cross remains - this is a
separate issue
---
.../Region/ClientStack/LindenUDP/LLClientView.cs | 4 +++
OpenSim/Region/Environment/Scenes/EntityBase.cs | 2 +-
OpenSim/Region/Environment/Scenes/ScenePresence.cs | 36 ++++++++++++++++++----
3 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index cff47b5..7c66599 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -664,6 +664,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
info = packet.Type.ToString();
}
+
Console.WriteLine(m_circuitCode + ":" + direction + ": " + info);
}
}
@@ -2236,6 +2237,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId)
{
+ //m_log.DebugFormat("[CLIENT]: Sending animations to {0}", Name);
+
AvatarAnimationPacket ani = (AvatarAnimationPacket)PacketPool.Instance.GetPacket(PacketType.AvatarAnimation);
// TODO: don't create new blocks if recycling an old packet
ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1];
@@ -2339,6 +2342,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
loc.Index = ib;
loc.Header.Reliable = false;
loc.Header.Zerocoded = true;
+
OutPacket(loc, ThrottleOutPacketType.Task);
}
diff --git a/OpenSim/Region/Environment/Scenes/EntityBase.cs b/OpenSim/Region/Environment/Scenes/EntityBase.cs
index 7a3b9a7..3ae8cde 100644
--- a/OpenSim/Region/Environment/Scenes/EntityBase.cs
+++ b/OpenSim/Region/Environment/Scenes/EntityBase.cs
@@ -87,7 +87,7 @@ namespace OpenSim.Region.Environment.Scenes
protected Vector3 m_rotationalvelocity;
///
- ///
+ /// Current velocity of the entity.
///
public virtual Vector3 Velocity
{
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 2c10a3f..c32691f 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -402,12 +402,12 @@ namespace OpenSim.Region.Environment.Scenes
}
m_pos = value;
- m_parentPosition=new Vector3(0, 0, 0);
+ m_parentPosition = new Vector3(0, 0, 0);
}
}
///
- /// Current Velocity of the avatar.
+ /// Current velocity of the avatar.
///
public override Vector3 Velocity
{
@@ -424,6 +424,8 @@ namespace OpenSim.Region.Environment.Scenes
}
set
{
+ //m_log.DebugFormat("In {0} setting velocity of {1} to {2}", m_scene.RegionInfo.RegionName, Name, value);
+
if (m_physicsActor != null)
{
try
@@ -777,7 +779,11 @@ namespace OpenSim.Region.Environment.Scenes
AddToPhysicalScene();
m_physicsActor.Flying = isFlying;
- SendAnimPack();
+
+ // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying
+ // avatar to return to the standing position in mid-air. On login it looks like this is being sent
+ // elsewhere anyway
+ //SendAnimPack();
m_scene.SwapRootAgentCount(false);
m_scene.CommsManager.UserProfileCacheService.RequestInventoryForUser(m_uuid);
@@ -806,12 +812,14 @@ namespace OpenSim.Region.Environment.Scenes
// "[SCENEPRESENCE]: Downgrading root agent {0}, {1} to a child agent in {2}",
// Name, UUID, m_scene.RegionInfo.RegionName);
- Velocity = new Vector3(0, 0, 0);
+ // Don't zero out the velocity since this can cause problems when an avatar is making a region crossing,
+ // depending on the exact timing. This shouldn't matter anyway since child agent positions are not updated.
+ //Velocity = new Vector3(0, 0, 0);
+
m_isChildAgent = true;
m_scene.SwapRootAgentCount(true);
RemoveFromPhysicalScene();
m_scene.EventManager.TriggerOnMakeChildAgent(this);
- //this.Pos = new Vector3(128, 128, 70);
}
///
@@ -1045,11 +1053,13 @@ namespace OpenSim.Region.Environment.Scenes
bool oldflying = PhysicsActor.Flying;
PhysicsActor.Flying = ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0);
+
if (PhysicsActor.Flying != oldflying)
{
update_movementflag = true;
}
}
+
if (q != m_bodyRot)
{
m_bodyRot = q;
@@ -1071,6 +1081,7 @@ namespace OpenSim.Region.Environment.Scenes
{
// Why did I get this?
}
+
if ((m_movementflag & (uint) DCF) == 0)
{
m_movementflag += (byte) (uint) DCF;
@@ -1088,6 +1099,7 @@ namespace OpenSim.Region.Environment.Scenes
i++;
}
}
+
// Cause the avatar to stop flying if it's colliding
// with something with the down arrow pressed.
@@ -1109,6 +1121,10 @@ namespace OpenSim.Region.Environment.Scenes
if (update_movementflag || (update_rotation && DCFlagKeyPressed))
{
+// m_log.DebugFormat("{0} {1}", update_movementflag, (update_rotation && DCFlagKeyPressed));
+// m_log.DebugFormat(
+// "In {0} adding velocity to {1} of {2}", m_scene.RegionInfo.RegionName, Name, agent_control_v3);
+
AddNewMovement(agent_control_v3, q);
if (update_movementflag)
@@ -1563,6 +1579,8 @@ namespace OpenSim.Region.Environment.Scenes
///
protected void TrySetMovementAnimation(string anim)
{
+ //m_log.DebugFormat("Updating movement animation to {0}", anim);
+
if (m_animations.TrySetDefaultAnimation(anim, m_controllingClient.NextAnimationSequenceNumber))
{
SendAnimPack();
@@ -1638,9 +1656,13 @@ namespace OpenSim.Region.Environment.Scenes
}
}
+ ///
+ /// Update the movement animation of this avatar according to its current state
+ ///
protected void UpdateMovementAnimations()
{
- TrySetMovementAnimation(GetMovementAnimation());
+ string animation = GetMovementAnimation();
+ TrySetMovementAnimation(animation);
}
///
@@ -2040,6 +2062,8 @@ namespace OpenSim.Region.Environment.Scenes
///
public void SendAnimPack()
{
+ //m_log.Debug("Sending animation pack");
+
if (m_isChildAgent)
return;
--
cgit v1.1