diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 132 |
1 files changed, 69 insertions, 63 deletions
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 9a937a2..9454de0 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -32,7 +32,6 @@ using libsecondlife; | |||
32 | using libsecondlife.Packets; | 32 | using libsecondlife.Packets; |
33 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Framework.Console; | 34 | using OpenSim.Framework.Console; |
35 | using OpenSim.Framework.Communications; | ||
36 | using OpenSim.Region.Environment.Types; | 35 | using OpenSim.Region.Environment.Types; |
37 | using OpenSim.Region.Physics.Manager; | 36 | using OpenSim.Region.Physics.Manager; |
38 | 37 | ||
@@ -60,14 +59,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
60 | private bool m_setAlwaysRun = false; | 59 | private bool m_setAlwaysRun = false; |
61 | 60 | ||
62 | private Quaternion m_bodyRot; | 61 | private Quaternion m_bodyRot; |
63 | 62 | ||
64 | public bool IsRestrictedToRegion = false; | 63 | public bool IsRestrictedToRegion = false; |
65 | 64 | ||
66 | // Agent moves with a PID controller causing a force to be exerted. | 65 | // Agent moves with a PID controller causing a force to be exerted. |
67 | private bool m_newForce = false; | 66 | private bool m_newForce = false; |
68 | private bool m_newCoarseLocations = true; | 67 | private bool m_newCoarseLocations = true; |
69 | private bool m_gotAllObjectsInScene = false; | 68 | private bool m_gotAllObjectsInScene = false; |
70 | 69 | ||
71 | // Default AV Height | 70 | // Default AV Height |
72 | private float m_avHeight = 127.0f; | 71 | private float m_avHeight = 127.0f; |
73 | 72 | ||
@@ -76,7 +75,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
76 | 75 | ||
77 | private readonly Vector3[] Dir_Vectors = new Vector3[6]; | 76 | private readonly Vector3[] Dir_Vectors = new Vector3[6]; |
78 | private LLVector3 lastPhysPos = new LLVector3(); | 77 | private LLVector3 lastPhysPos = new LLVector3(); |
79 | 78 | ||
80 | // Position of agent's camera in world (region cordinates) | 79 | // Position of agent's camera in world (region cordinates) |
81 | protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); | 80 | protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); |
82 | 81 | ||
@@ -85,17 +84,18 @@ namespace OpenSim.Region.Environment.Scenes | |||
85 | protected Vector3 m_CameraAtAxis = new Vector3(0, 0, 0); | 84 | protected Vector3 m_CameraAtAxis = new Vector3(0, 0, 0); |
86 | protected Vector3 m_CameraLeftAxis = new Vector3(0, 0, 0); | 85 | protected Vector3 m_CameraLeftAxis = new Vector3(0, 0, 0); |
87 | protected Vector3 m_CameraUpAxis = new Vector3(0, 0, 0); | 86 | protected Vector3 m_CameraUpAxis = new Vector3(0, 0, 0); |
88 | private uint m_AgentControlFlags = (uint)0; | 87 | private uint m_AgentControlFlags = (uint) 0; |
89 | private LLQuaternion m_headrotation = new LLQuaternion(); | 88 | private LLQuaternion m_headrotation = new LLQuaternion(); |
90 | private byte m_state = (byte)0; | 89 | private byte m_state = (byte) 0; |
91 | 90 | ||
92 | // Agent's Draw distance. | 91 | // Agent's Draw distance. |
93 | protected float m_DrawDistance = 0f; | 92 | protected float m_DrawDistance = 0f; |
94 | 93 | ||
95 | protected AvatarAppearance m_appearance; | 94 | protected AvatarAppearance m_appearance; |
96 | 95 | ||
97 | private readonly List<ulong> m_knownChildRegions = new List<ulong>(); //neighbouring regions we have enabled a child agent in | 96 | private readonly List<ulong> m_knownChildRegions = new List<ulong>(); |
98 | 97 | //neighbouring regions we have enabled a child agent in | |
98 | |||
99 | 99 | ||
100 | /// <summary> | 100 | /// <summary> |
101 | /// Implemented Control Flags | 101 | /// Implemented Control Flags |
@@ -172,6 +172,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
172 | } | 172 | } |
173 | 173 | ||
174 | protected bool m_allowMovement = true; | 174 | protected bool m_allowMovement = true; |
175 | |||
175 | public bool AllowMovement | 176 | public bool AllowMovement |
176 | { | 177 | { |
177 | get { return m_allowMovement; } | 178 | get { return m_allowMovement; } |
@@ -181,8 +182,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
181 | /// <summary> | 182 | /// <summary> |
182 | /// This works out to be the ClientView object associated with this avatar, or it's UDP connection manager | 183 | /// This works out to be the ClientView object associated with this avatar, or it's UDP connection manager |
183 | /// </summary> | 184 | /// </summary> |
184 | |||
185 | private readonly IClientAPI m_controllingClient; | 185 | private readonly IClientAPI m_controllingClient; |
186 | |||
186 | protected PhysicsActor m_physicsActor; | 187 | protected PhysicsActor m_physicsActor; |
187 | 188 | ||
188 | public IClientAPI ControllingClient | 189 | public IClientAPI ControllingClient |
@@ -228,6 +229,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
228 | m_pos = value; | 229 | m_pos = value; |
229 | } | 230 | } |
230 | } | 231 | } |
232 | |||
231 | /// <summary> | 233 | /// <summary> |
232 | /// Current Velocity of the avatar. | 234 | /// Current Velocity of the avatar. |
233 | /// </summary> | 235 | /// </summary> |
@@ -294,6 +296,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
294 | { | 296 | { |
295 | get { return m_knownChildRegions; } | 297 | get { return m_knownChildRegions; } |
296 | } | 298 | } |
299 | |||
297 | #endregion | 300 | #endregion |
298 | 301 | ||
299 | #region Constructor(s) | 302 | #region Constructor(s) |
@@ -336,7 +339,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
336 | public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance) | 339 | public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance) |
337 | : this(client, world, reginfo) | 340 | : this(client, world, reginfo) |
338 | { | 341 | { |
339 | m_appearance = appearance; | 342 | m_appearance = appearance; |
340 | } | 343 | } |
341 | 344 | ||
342 | private void RegisterToEvents() | 345 | private void RegisterToEvents() |
@@ -366,6 +369,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
366 | Dir_Vectors[5] = new Vector3(0, 0, -1); //DOWN | 369 | Dir_Vectors[5] = new Vector3(0, 0, -1); //DOWN |
367 | Dir_Vectors[5] = new Vector3(0, 0, -0.5f); //DOWN_Nudge | 370 | Dir_Vectors[5] = new Vector3(0, 0, -0.5f); //DOWN_Nudge |
368 | } | 371 | } |
372 | |||
369 | #endregion | 373 | #endregion |
370 | 374 | ||
371 | public void QueuePartForUpdate(SceneObjectPart part) | 375 | public void QueuePartForUpdate(SceneObjectPart part) |
@@ -381,7 +385,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
381 | 385 | ||
382 | public uint GenerateClientFlags(LLUUID ObjectID) | 386 | public uint GenerateClientFlags(LLUUID ObjectID) |
383 | { | 387 | { |
384 | return m_scene.PermissionsMngr.GenerateClientFlags(this.m_uuid, ObjectID); | 388 | return m_scene.PermissionsMngr.GenerateClientFlags(m_uuid, ObjectID); |
385 | } | 389 | } |
386 | 390 | ||
387 | public void SendPrimUpdates() | 391 | public void SendPrimUpdates() |
@@ -461,6 +465,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
461 | } | 465 | } |
462 | 466 | ||
463 | #region Status Methods | 467 | #region Status Methods |
468 | |||
464 | /// <summary> | 469 | /// <summary> |
465 | /// This turns a child agent, into a root agent | 470 | /// This turns a child agent, into a root agent |
466 | /// This is called when an agent teleports into a region, or if an | 471 | /// This is called when an agent teleports into a region, or if an |
@@ -531,6 +536,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
531 | public void StopMovement() | 536 | public void StopMovement() |
532 | { | 537 | { |
533 | } | 538 | } |
539 | |||
534 | public void StopFlying() | 540 | public void StopFlying() |
535 | { | 541 | { |
536 | // It turns out to get the agent to stop flying, you have to feed it stop flying velocities | 542 | // It turns out to get the agent to stop flying, you have to feed it stop flying velocities |
@@ -560,9 +566,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
560 | m_knownChildRegions.Remove(regionHandle); | 566 | m_knownChildRegions.Remove(regionHandle); |
561 | } | 567 | } |
562 | } | 568 | } |
569 | |||
563 | #endregion | 570 | #endregion |
564 | 571 | ||
565 | #region Event Handlers | 572 | #region Event Handlers |
573 | |||
566 | /// <summary> | 574 | /// <summary> |
567 | /// Sets avatar height in the phyiscs plugin | 575 | /// Sets avatar height in the phyiscs plugin |
568 | /// </summary> | 576 | /// </summary> |
@@ -603,7 +611,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
603 | /// </summary> | 611 | /// </summary> |
604 | public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdatePacket agentData) | 612 | public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdatePacket agentData) |
605 | { | 613 | { |
606 | |||
607 | //if (m_isChildAgent) | 614 | //if (m_isChildAgent) |
608 | //{ | 615 | //{ |
609 | // // Console.WriteLine("DEBUG: HandleAgentUpdate: child agent"); | 616 | // // Console.WriteLine("DEBUG: HandleAgentUpdate: child agent"); |
@@ -639,7 +646,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
639 | // The Agent's Draw distance setting | 646 | // The Agent's Draw distance setting |
640 | m_DrawDistance = agentData.AgentData.Far; | 647 | m_DrawDistance = agentData.AgentData.Far; |
641 | 648 | ||
642 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0) | 649 | if ((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) != 0) |
643 | { | 650 | { |
644 | StandUp(); | 651 | StandUp(); |
645 | } | 652 | } |
@@ -649,7 +656,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
649 | return; | 656 | return; |
650 | } | 657 | } |
651 | 658 | ||
652 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0) | 659 | if ((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0) |
653 | { | 660 | { |
654 | // TODO: This doesn't quite work yet -- probably a parent ID problem | 661 | // TODO: This doesn't quite work yet -- probably a parent ID problem |
655 | // m_parentID = (what should this be?) | 662 | // m_parentID = (what should this be?) |
@@ -672,7 +679,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
672 | Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | 679 | Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); |
673 | bool oldflying = PhysicsActor.Flying; | 680 | bool oldflying = PhysicsActor.Flying; |
674 | 681 | ||
675 | PhysicsActor.Flying = ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); | 682 | PhysicsActor.Flying = ((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); |
676 | if (PhysicsActor.Flying != oldflying) | 683 | if (PhysicsActor.Flying != oldflying) |
677 | { | 684 | { |
678 | update_movementflag = true; | 685 | update_movementflag = true; |
@@ -686,23 +693,23 @@ namespace OpenSim.Region.Environment.Scenes | |||
686 | 693 | ||
687 | if (m_parentID == 0) | 694 | if (m_parentID == 0) |
688 | { | 695 | { |
689 | foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof(Dir_ControlFlags))) | 696 | foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof (Dir_ControlFlags))) |
690 | { | 697 | { |
691 | if ((flags & (uint)DCF) != 0) | 698 | if ((flags & (uint) DCF) != 0) |
692 | { | 699 | { |
693 | DCFlagKeyPressed = true; | 700 | DCFlagKeyPressed = true; |
694 | agent_control_v3 += Dir_Vectors[i]; | 701 | agent_control_v3 += Dir_Vectors[i]; |
695 | if ((m_movementflag & (uint)DCF) == 0) | 702 | if ((m_movementflag & (uint) DCF) == 0) |
696 | { | 703 | { |
697 | m_movementflag += (byte)(uint)DCF; | 704 | m_movementflag += (byte) (uint) DCF; |
698 | update_movementflag = true; | 705 | update_movementflag = true; |
699 | } | 706 | } |
700 | } | 707 | } |
701 | else | 708 | else |
702 | { | 709 | { |
703 | if ((m_movementflag & (uint)DCF) != 0) | 710 | if ((m_movementflag & (uint) DCF) != 0) |
704 | { | 711 | { |
705 | m_movementflag -= (byte)(uint)DCF; | 712 | m_movementflag -= (byte) (uint) DCF; |
706 | update_movementflag = true; | 713 | update_movementflag = true; |
707 | } | 714 | } |
708 | } | 715 | } |
@@ -719,8 +726,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
719 | if (m_physicsActor.Flying) | 726 | if (m_physicsActor.Flying) |
720 | { | 727 | { |
721 | // Are the landing controls requirements filled? | 728 | // Are the landing controls requirements filled? |
722 | bool controlland = (((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) || ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); | 729 | bool controlland = (((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) || |
723 | 730 | ((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); | |
731 | |||
724 | // Are the collision requirements fulfilled? | 732 | // Are the collision requirements fulfilled? |
725 | bool colliding = (m_physicsActor.IsColliding == true); | 733 | bool colliding = (m_physicsActor.IsColliding == true); |
726 | 734 | ||
@@ -748,7 +756,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
748 | { | 756 | { |
749 | if (m_parentID != 0) | 757 | if (m_parentID != 0) |
750 | { | 758 | { |
751 | |||
752 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); | 759 | SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); |
753 | if (part != null) | 760 | if (part != null) |
754 | { | 761 | { |
@@ -757,7 +764,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
757 | part.SetAvatarOnSitTarget(LLUUID.Zero); | 764 | part.SetAvatarOnSitTarget(LLUUID.Zero); |
758 | } | 765 | } |
759 | 766 | ||
760 | m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight); | 767 | m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); |
761 | m_parentPosition = new LLVector3(); | 768 | m_parentPosition = new LLVector3(); |
762 | 769 | ||
763 | if (m_physicsActor == null) | 770 | if (m_physicsActor == null) |
@@ -778,14 +785,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
778 | 785 | ||
779 | bool autopilot = true; | 786 | bool autopilot = true; |
780 | LLVector3 pos = new LLVector3(); | 787 | LLVector3 pos = new LLVector3(); |
781 | LLQuaternion sitOrientation = new LLQuaternion(0,0,0,1); | 788 | LLQuaternion sitOrientation = new LLQuaternion(0, 0, 0, 1); |
782 | 789 | ||
783 | SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); | 790 | SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); |
784 | if (part != null) | 791 | if (part != null) |
785 | { | 792 | { |
786 | // TODO: determine position to sit at based on scene geometry; don't trust offset from client | 793 | // TODO: determine position to sit at based on scene geometry; don't trust offset from client |
787 | // see http://wiki.secondlife.com/wiki/User:Andrew_Linden/Office_Hours/2007_11_06 for details on how LL does it | 794 | // see http://wiki.secondlife.com/wiki/User:Andrew_Linden/Office_Hours/2007_11_06 for details on how LL does it |
788 | 795 | ||
789 | 796 | ||
790 | // Is a sit target available? | 797 | // Is a sit target available? |
791 | Vector3 avSitOffSet = part.GetSitTargetPosition(); | 798 | Vector3 avSitOffSet = part.GetSitTargetPosition(); |
@@ -793,15 +800,17 @@ namespace OpenSim.Region.Environment.Scenes | |||
793 | LLUUID avOnTargetAlready = part.GetAvatarOnSitTarget(); | 800 | LLUUID avOnTargetAlready = part.GetAvatarOnSitTarget(); |
794 | 801 | ||
795 | bool SitTargetUnOccupied = (!(avOnTargetAlready != LLUUID.Zero)); | 802 | bool SitTargetUnOccupied = (!(avOnTargetAlready != LLUUID.Zero)); |
796 | bool SitTargetisSet = (!(avSitOffSet.x == 0 && avSitOffSet.y == 0 && avSitOffSet.z == 0 && avSitOrientation.w == 0 && avSitOrientation.x == 0 && avSitOrientation.y == 0 && avSitOrientation.z == 1)); | 803 | bool SitTargetisSet = |
804 | (!(avSitOffSet.x == 0 && avSitOffSet.y == 0 && avSitOffSet.z == 0 && avSitOrientation.w == 0 && | ||
805 | avSitOrientation.x == 0 && avSitOrientation.y == 0 && avSitOrientation.z == 1)); | ||
797 | 806 | ||
798 | if (SitTargetisSet && SitTargetUnOccupied) | 807 | if (SitTargetisSet && SitTargetUnOccupied) |
799 | { | 808 | { |
800 | part.SetAvatarOnSitTarget(UUID); | 809 | part.SetAvatarOnSitTarget(UUID); |
801 | offset = new LLVector3(avSitOffSet.x,avSitOffSet.y,avSitOffSet.z); | 810 | offset = new LLVector3(avSitOffSet.x, avSitOffSet.y, avSitOffSet.z); |
802 | sitOrientation = new LLQuaternion(avSitOrientation.w,avSitOrientation.x,avSitOrientation.y,avSitOrientation.z); | 811 | sitOrientation = |
812 | new LLQuaternion(avSitOrientation.w, avSitOrientation.x, avSitOrientation.y, avSitOrientation.z); | ||
803 | autopilot = false; | 813 | autopilot = false; |
804 | |||
805 | } | 814 | } |
806 | 815 | ||
807 | 816 | ||
@@ -817,43 +826,37 @@ namespace OpenSim.Region.Environment.Scenes | |||
817 | 826 | ||
818 | if (autopilot) | 827 | if (autopilot) |
819 | { | 828 | { |
820 | |||
821 | if (Util.GetDistanceTo(AbsolutePosition, pos) < 4.5) | 829 | if (Util.GetDistanceTo(AbsolutePosition, pos) < 4.5) |
822 | { | 830 | { |
823 | autopilot = false; | 831 | autopilot = false; |
824 | 832 | ||
825 | RemoveFromPhysicalScene(); | 833 | RemoveFromPhysicalScene(); |
826 | AbsolutePosition = pos + new LLVector3(0.0f, 0.0f, m_sitAvatarHeight); | 834 | AbsolutePosition = pos + new LLVector3(0.0f, 0.0f, m_sitAvatarHeight); |
827 | |||
828 | } | 835 | } |
829 | else | 836 | else |
830 | { | 837 | { |
831 | |||
832 | } | 838 | } |
833 | } | 839 | } |
834 | else | 840 | else |
835 | { | 841 | { |
836 | RemoveFromPhysicalScene(); | 842 | RemoveFromPhysicalScene(); |
837 | |||
838 | |||
839 | } | 843 | } |
840 | } // Physactor != null | 844 | } // Physactor != null |
841 | } // part != null | 845 | } // part != null |
842 | 846 | ||
843 | 847 | ||
844 | avatarSitResponse.SitTransform.AutoPilot = autopilot; | 848 | avatarSitResponse.SitTransform.AutoPilot = autopilot; |
845 | avatarSitResponse.SitTransform.SitPosition = offset; | 849 | avatarSitResponse.SitTransform.SitPosition = offset; |
846 | avatarSitResponse.SitTransform.SitRotation = sitOrientation; | 850 | avatarSitResponse.SitTransform.SitRotation = sitOrientation; |
847 | 851 | ||
848 | remoteClient.OutPacket(avatarSitResponse, ThrottleOutPacketType.Task); | 852 | remoteClient.OutPacket(avatarSitResponse, ThrottleOutPacketType.Task); |
849 | 853 | ||
850 | // This calls HandleAgentSit twice, once from here, and the client calls | 854 | // This calls HandleAgentSit twice, once from here, and the client calls |
851 | // HandleAgentSit itself after it gets to the location | 855 | // HandleAgentSit itself after it gets to the location |
852 | // It doesn't get to the location until we've moved them there though | 856 | // It doesn't get to the location until we've moved them there though |
853 | // which happens in HandleAgentSit :P | 857 | // which happens in HandleAgentSit :P |
854 | if (!autopilot) | 858 | if (!autopilot) |
855 | HandleAgentSit(remoteClient, UUID); | 859 | HandleAgentSit(remoteClient, UUID); |
856 | |||
857 | } | 860 | } |
858 | 861 | ||
859 | public void HandleAgentRequestSit(IClientAPI remoteClient, LLUUID agentID, LLUUID targetID, LLVector3 offset) | 862 | public void HandleAgentRequestSit(IClientAPI remoteClient, LLUUID agentID, LLUUID targetID, LLVector3 offset) |
@@ -863,7 +866,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
863 | StandUp(); | 866 | StandUp(); |
864 | } | 867 | } |
865 | 868 | ||
866 | |||
867 | 869 | ||
868 | SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); | 870 | SceneObjectPart part = m_scene.GetSceneObjectPart(targetID); |
869 | 871 | ||
@@ -919,7 +921,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
919 | // This may seem stupid, but Our Full updates don't send avatar rotation :P | 921 | // This may seem stupid, but Our Full updates don't send avatar rotation :P |
920 | // So we're also sending a terse update (which has avatar rotation) | 922 | // So we're also sending a terse update (which has avatar rotation) |
921 | SendTerseUpdateToAllClients(); | 923 | SendTerseUpdateToAllClients(); |
922 | |||
923 | } | 924 | } |
924 | 925 | ||
925 | /// <summary> | 926 | /// <summary> |
@@ -1003,7 +1004,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1003 | // We are flying | 1004 | // We are flying |
1004 | SetMovementAnimation(Animations.AnimsLLUUID["FLY"], 1); | 1005 | SetMovementAnimation(Animations.AnimsLLUUID["FLY"], 1); |
1005 | } | 1006 | } |
1006 | else if (((m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && | 1007 | else if (((m_movementflag & (uint) AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && |
1007 | PhysicsActor.IsColliding) | 1008 | PhysicsActor.IsColliding) |
1008 | { | 1009 | { |
1009 | // Client is pressing the page down button and moving and is colliding with something | 1010 | // Client is pressing the page down button and moving and is colliding with something |
@@ -1014,7 +1015,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1014 | // Client is moving and falling at a velocity greater then 6 meters per unit | 1015 | // Client is moving and falling at a velocity greater then 6 meters per unit |
1015 | SetMovementAnimation(Animations.AnimsLLUUID["FALLDOWN"], 1); | 1016 | SetMovementAnimation(Animations.AnimsLLUUID["FALLDOWN"], 1); |
1016 | } | 1017 | } |
1017 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && (m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) | 1018 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && |
1019 | (m_movementflag & (uint) AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) | ||
1018 | { | 1020 | { |
1019 | // Client is moving, and colliding and pressing the page up button but isn't flying | 1021 | // Client is moving, and colliding and pressing the page up button but isn't flying |
1020 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); | 1022 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); |
@@ -1034,7 +1036,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1034 | { | 1036 | { |
1035 | // Not moving | 1037 | // Not moving |
1036 | 1038 | ||
1037 | if (((m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && | 1039 | if (((m_movementflag & (uint) AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && |
1038 | PhysicsActor.IsColliding) | 1040 | PhysicsActor.IsColliding) |
1039 | { | 1041 | { |
1040 | // Client pressing the page down button | 1042 | // Client pressing the page down button |
@@ -1045,7 +1047,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1045 | // Not colliding and not flying, and we're falling at high speed | 1047 | // Not colliding and not flying, and we're falling at high speed |
1046 | SetMovementAnimation(Animations.AnimsLLUUID["FALLDOWN"], 1); | 1048 | SetMovementAnimation(Animations.AnimsLLUUID["FALLDOWN"], 1); |
1047 | } | 1049 | } |
1048 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && !m_physicsActor.Flying && (m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) | 1050 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && !m_physicsActor.Flying && |
1051 | (m_movementflag & (uint) AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) | ||
1049 | { | 1052 | { |
1050 | // This is the standing jump | 1053 | // This is the standing jump |
1051 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); | 1054 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); |
@@ -1063,6 +1066,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1063 | } | 1066 | } |
1064 | } | 1067 | } |
1065 | } | 1068 | } |
1069 | |||
1066 | /// <summary> | 1070 | /// <summary> |
1067 | /// Adds a new movement | 1071 | /// Adds a new movement |
1068 | /// </summary> | 1072 | /// </summary> |
@@ -1075,10 +1079,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
1075 | } | 1079 | } |
1076 | m_rotation = rotation; | 1080 | m_rotation = rotation; |
1077 | NewForce newVelocity = new NewForce(); | 1081 | NewForce newVelocity = new NewForce(); |
1078 | Vector3 direc = rotation * vec; | 1082 | Vector3 direc = rotation*vec; |
1079 | direc.Normalize(); | 1083 | direc.Normalize(); |
1080 | 1084 | ||
1081 | direc *= 0.03f * 128f; | 1085 | direc *= 0.03f*128f; |
1082 | if (m_physicsActor.Flying) | 1086 | if (m_physicsActor.Flying) |
1083 | { | 1087 | { |
1084 | direc *= 4; | 1088 | direc *= 4; |
@@ -1108,7 +1112,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
1108 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); | 1112 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); |
1109 | } | 1113 | } |
1110 | } | 1114 | } |
1111 | |||
1112 | } | 1115 | } |
1113 | 1116 | ||
1114 | newVelocity.X = direc.x; | 1117 | newVelocity.X = direc.x; |
@@ -1173,7 +1176,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1173 | { | 1176 | { |
1174 | LLVector3 pos = m_pos; | 1177 | LLVector3 pos = m_pos; |
1175 | LLVector3 vel = Velocity; | 1178 | LLVector3 vel = Velocity; |
1176 | LLQuaternion rot=new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w); | 1179 | LLQuaternion rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w); |
1177 | remoteClient.SendAvatarTerseUpdate(m_regionHandle, 64096, LocalId, new LLVector3(pos.X, pos.Y, pos.Z), | 1180 | remoteClient.SendAvatarTerseUpdate(m_regionHandle, 64096, LocalId, new LLVector3(pos.X, pos.Y, pos.Z), |
1178 | new LLVector3(vel.X, vel.Y, vel.Z), rot); | 1181 | new LLVector3(vel.X, vel.Y, vel.Z), rot); |
1179 | } | 1182 | } |
@@ -1213,7 +1216,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1213 | public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar) | 1216 | public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar) |
1214 | { | 1217 | { |
1215 | remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, | 1218 | remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_uuid, |
1216 | LocalId, m_pos, m_appearance.TextureEntry.ToBytes(), m_parentID); | 1219 | LocalId, m_pos, m_appearance.TextureEntry.ToBytes(), |
1220 | m_parentID); | ||
1217 | } | 1221 | } |
1218 | 1222 | ||
1219 | /// <summary> | 1223 | /// <summary> |
@@ -1303,10 +1307,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1303 | /// <param name="seqs"></param> | 1307 | /// <param name="seqs"></param> |
1304 | public void SendAnimPack(LLUUID[] animations, int[] seqs) | 1308 | public void SendAnimPack(LLUUID[] animations, int[] seqs) |
1305 | { | 1309 | { |
1306 | m_scene.Broadcast(delegate(IClientAPI client) | 1310 | m_scene.Broadcast( |
1307 | { | 1311 | delegate(IClientAPI client) { client.SendAnimations(animations, seqs, m_controllingClient.AgentId); }); |
1308 | client.SendAnimations(animations, seqs, m_controllingClient.AgentId); | ||
1309 | }); | ||
1310 | } | 1312 | } |
1311 | 1313 | ||
1312 | /// <summary> | 1314 | /// <summary> |
@@ -1320,6 +1322,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1320 | #endregion | 1322 | #endregion |
1321 | 1323 | ||
1322 | #region Significant Movement Method | 1324 | #region Significant Movement Method |
1325 | |||
1323 | /// <summary> | 1326 | /// <summary> |
1324 | /// This checks for a significant movement and sends a courselocationchange update | 1327 | /// This checks for a significant movement and sends a courselocationchange update |
1325 | /// </summary> | 1328 | /// </summary> |
@@ -1349,9 +1352,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
1349 | LLVector3 vel = Velocity; | 1352 | LLVector3 vel = Velocity; |
1350 | 1353 | ||
1351 | float timeStep = 0.1f; | 1354 | float timeStep = 0.1f; |
1352 | pos2.X = pos2.X + (vel.X * timeStep); | 1355 | pos2.X = pos2.X + (vel.X*timeStep); |
1353 | pos2.Y = pos2.Y + (vel.Y * timeStep); | 1356 | pos2.Y = pos2.Y + (vel.Y*timeStep); |
1354 | pos2.Z = pos2.Z + (vel.Z * timeStep); | 1357 | pos2.Z = pos2.Z + (vel.Z*timeStep); |
1355 | 1358 | ||
1356 | if ((pos2.X < 0) || (pos2.X > 256)) | 1359 | if ((pos2.X < 0) || (pos2.X > 256)) |
1357 | { | 1360 | { |
@@ -1411,7 +1414,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1411 | } | 1414 | } |
1412 | 1415 | ||
1413 | LLVector3 vel = m_velocity; | 1416 | LLVector3 vel = m_velocity; |
1414 | ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * 256), (uint)(neighboury * 256)); | 1417 | ulong neighbourHandle = Helpers.UIntsToLong((uint) (neighbourx*256), (uint) (neighboury*256)); |
1415 | SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); | 1418 | SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); |
1416 | if (neighbourRegion != null) | 1419 | if (neighbourRegion != null) |
1417 | { | 1420 | { |
@@ -1432,6 +1435,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1432 | } | 1435 | } |
1433 | 1436 | ||
1434 | #endregion | 1437 | #endregion |
1438 | |||
1435 | /// <summary> | 1439 | /// <summary> |
1436 | /// This allows the Sim owner the abiility to kick users from their sim currently. | 1440 | /// This allows the Sim owner the abiility to kick users from their sim currently. |
1437 | /// It tells the client that the agent has permission to do so. | 1441 | /// It tells the client that the agent has permission to do so. |
@@ -1445,7 +1449,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1445 | adb.AgentID = agentID; | 1449 | adb.AgentID = agentID; |
1446 | adb.SessionID = sessionID; // More security | 1450 | adb.SessionID = sessionID; // More security |
1447 | 1451 | ||
1448 | gdb.GodLevel = (byte)100; | 1452 | gdb.GodLevel = (byte) 100; |
1449 | gdb.Token = token; | 1453 | gdb.Token = token; |
1450 | //respondPacket.AgentData = (GrantGodlikePowersPacket.AgentDataBlock)ablock; | 1454 | //respondPacket.AgentData = (GrantGodlikePowersPacket.AgentDataBlock)ablock; |
1451 | respondPacket.GrantData = gdb; | 1455 | respondPacket.GrantData = gdb; |
@@ -1462,7 +1466,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1462 | // | 1466 | // |
1463 | m_DrawDistance = cAgentData.drawdistance; | 1467 | m_DrawDistance = cAgentData.drawdistance; |
1464 | m_pos = new LLVector3(cAgentData.Position.x, cAgentData.Position.y, cAgentData.Position.z); | 1468 | m_pos = new LLVector3(cAgentData.Position.x, cAgentData.Position.y, cAgentData.Position.z); |
1465 | m_CameraCenter = new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); | 1469 | m_CameraCenter = |
1470 | new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); | ||
1466 | m_godlevel = cAgentData.godlevel; | 1471 | m_godlevel = cAgentData.godlevel; |
1467 | ControllingClient.SetChildAgentThrottle(cAgentData.throttles); | 1472 | ControllingClient.SetChildAgentThrottle(cAgentData.throttles); |
1468 | //cAgentData.AVHeight; | 1473 | //cAgentData.AVHeight; |
@@ -1555,6 +1560,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1555 | m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; | 1560 | m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; |
1556 | m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; | 1561 | m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; |
1557 | } | 1562 | } |
1563 | |||
1558 | // Event called by the physics plugin to tell the avatar about a collision. | 1564 | // Event called by the physics plugin to tell the avatar about a collision. |
1559 | private void PhysicsCollisionUpdate(EventArgs e) | 1565 | private void PhysicsCollisionUpdate(EventArgs e) |
1560 | { | 1566 | { |
@@ -1567,4 +1573,4 @@ namespace OpenSim.Region.Environment.Scenes | |||
1567 | RemoveFromPhysicalScene(); | 1573 | RemoveFromPhysicalScene(); |
1568 | } | 1574 | } |
1569 | } | 1575 | } |
1570 | } | 1576 | } \ No newline at end of file |