aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index b2df0bd..f071841 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -11873,5 +11873,60 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11873 dialog.Buttons = buttons; 11873 dialog.Buttons = buttons;
11874 OutPacket(dialog, ThrottleOutPacketType.Task); 11874 OutPacket(dialog, ThrottleOutPacketType.Task);
11875 } 11875 }
11876
11877 public void StopFlying(ISceneEntity p)
11878 {
11879 if (p is ScenePresence)
11880 {
11881 ScenePresence presence = p as ScenePresence;
11882 // It turns out to get the agent to stop flying, you have to feed it stop flying velocities
11883 // There's no explicit message to send the client to tell it to stop flying.. it relies on the
11884 // velocity, collision plane and avatar height
11885
11886 // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air
11887 // when the avatar stands up
11888
11889 Vector3 pos = presence.AbsolutePosition;
11890
11891 if (presence.Appearance.AvatarHeight != 127.0f)
11892 pos += new Vector3(0f, 0f, (presence.Appearance.AvatarHeight/6f));
11893 else
11894 pos += new Vector3(0f, 0f, (1.56f/6f));
11895
11896 presence.AbsolutePosition = pos;
11897
11898 // attach a suitable collision plane regardless of the actual situation to force the LLClient to land.
11899 // Collision plane below the avatar's position a 6th of the avatar's height is suitable.
11900 // Mind you, that this method doesn't get called if the avatar's velocity magnitude is greater then a
11901 // certain amount.. because the LLClient wouldn't land in that situation anyway.
11902
11903 // why are we still testing for this really old height value default???
11904 if (presence.Appearance.AvatarHeight != 127.0f)
11905 presence.CollisionPlane = new Vector4(0, 0, 0, pos.Z - presence.Appearance.AvatarHeight/6f);
11906 else
11907 presence.CollisionPlane = new Vector4(0, 0, 0, pos.Z - (1.56f/6f));
11908
11909
11910 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block =
11911 CreateImprovedTerseBlock(p, false);
11912
11913 const float TIME_DILATION = 1.0f;
11914 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f);
11915
11916
11917 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket();
11918 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
11919 packet.RegionData.TimeDilation = timeDilation;
11920 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
11921
11922 packet.ObjectData[0] = block;
11923
11924 OutPacket(packet, ThrottleOutPacketType.Task, true);
11925 }
11926
11927 //ControllingClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_rootRegionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
11928 // AbsolutePosition, Velocity, Vector3.Zero, m_bodyRot, new Vector4(0,0,1,AbsolutePosition.Z - 0.5f), m_uuid, null, GetUpdatePriority(ControllingClient)));
11929
11930 }
11876 } 11931 }
11877} 11932}