diff options
Attempt to get World Map working in Grid mode, will need to be using the grid asset server for it to work correctly and has only been quickly tested in a three region grid.
Moved PermissionManager creation out of the Scene constructor and instead a PermissionManager is passed to the constructor as a param. So that we could create and use custom permissionsManagers.
Added AllowMovement property to ScenePresence which can be used to stop movement of avatars (for example in a custom region that wanted avatars always in one place).
Added PermissionManager call when copying objects, although currently the call will always return true so that it allows copying in places like Wright Plaza.
A few other changes/fixes.
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 88 |
1 files changed, 49 insertions, 39 deletions
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 67b375a..b6daad6 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -147,6 +147,13 @@ namespace OpenSim.Region.Environment.Scenes | |||
147 | get { return m_lastname; } | 147 | get { return m_lastname; } |
148 | } | 148 | } |
149 | 149 | ||
150 | protected bool m_allowMovement = true; | ||
151 | public bool AllowMovement | ||
152 | { | ||
153 | get { return m_allowMovement; } | ||
154 | set { m_allowMovement = value; } | ||
155 | } | ||
156 | |||
150 | private readonly IClientAPI m_controllingClient; | 157 | private readonly IClientAPI m_controllingClient; |
151 | protected PhysicsActor m_physicsActor; | 158 | protected PhysicsActor m_physicsActor; |
152 | 159 | ||
@@ -528,58 +535,61 @@ namespace OpenSim.Region.Environment.Scenes | |||
528 | // Console.WriteLine("DEBUG: HandleAgentUpdate: null PhysicsActor!"); | 535 | // Console.WriteLine("DEBUG: HandleAgentUpdate: null PhysicsActor!"); |
529 | return; | 536 | return; |
530 | } | 537 | } |
531 | |||
532 | int i = 0; | ||
533 | bool update_movementflag = false; | ||
534 | bool update_rotation = false; | ||
535 | bool DCFlagKeyPressed = false; | ||
536 | Vector3 agent_control_v3 = new Vector3(0, 0, 0); | ||
537 | Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
538 | bool oldflying = PhysicsActor.Flying; | ||
539 | |||
540 | 538 | ||
541 | PhysicsActor.Flying = ((flags & (uint) MainAvatar.ControlFlags.AGENT_CONTROL_FLY) != 0); | 539 | if (m_allowMovement) |
542 | if (PhysicsActor.Flying != oldflying) | ||
543 | { | 540 | { |
544 | update_movementflag = true; | 541 | int i = 0; |
545 | } | 542 | bool update_movementflag = false; |
543 | bool update_rotation = false; | ||
544 | bool DCFlagKeyPressed = false; | ||
545 | Vector3 agent_control_v3 = new Vector3(0, 0, 0); | ||
546 | Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
547 | bool oldflying = PhysicsActor.Flying; | ||
546 | 548 | ||
547 | if (q != m_bodyRot) | ||
548 | { | ||
549 | m_bodyRot = q; | ||
550 | update_rotation = true; | ||
551 | } | ||
552 | 549 | ||
553 | if (m_parentID == 0) | 550 | PhysicsActor.Flying = ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_FLY) != 0); |
554 | { | 551 | if (PhysicsActor.Flying != oldflying) |
555 | foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof (Dir_ControlFlags))) | ||
556 | { | 552 | { |
557 | if ((flags & (uint) DCF) != 0) | 553 | update_movementflag = true; |
554 | } | ||
555 | |||
556 | if (q != m_bodyRot) | ||
557 | { | ||
558 | m_bodyRot = q; | ||
559 | update_rotation = true; | ||
560 | } | ||
561 | |||
562 | if (m_parentID == 0) | ||
563 | { | ||
564 | foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof(Dir_ControlFlags))) | ||
558 | { | 565 | { |
559 | DCFlagKeyPressed = true; | 566 | if ((flags & (uint)DCF) != 0) |
560 | agent_control_v3 += Dir_Vectors[i]; | ||
561 | if ((m_movementflag & (uint) DCF) == 0) | ||
562 | { | 567 | { |
563 | m_movementflag += (byte) (uint) DCF; | 568 | DCFlagKeyPressed = true; |
564 | update_movementflag = true; | 569 | agent_control_v3 += Dir_Vectors[i]; |
570 | if ((m_movementflag & (uint)DCF) == 0) | ||
571 | { | ||
572 | m_movementflag += (byte)(uint)DCF; | ||
573 | update_movementflag = true; | ||
574 | } | ||
565 | } | 575 | } |
566 | } | 576 | else |
567 | else | ||
568 | { | ||
569 | if ((m_movementflag & (uint) DCF) != 0) | ||
570 | { | 577 | { |
571 | m_movementflag -= (byte) (uint) DCF; | 578 | if ((m_movementflag & (uint)DCF) != 0) |
572 | update_movementflag = true; | 579 | { |
580 | m_movementflag -= (byte)(uint)DCF; | ||
581 | update_movementflag = true; | ||
582 | } | ||
573 | } | 583 | } |
584 | i++; | ||
574 | } | 585 | } |
575 | i++; | ||
576 | } | 586 | } |
577 | } | ||
578 | 587 | ||
579 | if ((update_movementflag) || (update_rotation && DCFlagKeyPressed)) | 588 | if ((update_movementflag) || (update_rotation && DCFlagKeyPressed)) |
580 | { | 589 | { |
581 | AddNewMovement(agent_control_v3, q); | 590 | AddNewMovement(agent_control_v3, q); |
582 | UpdateMovementAnimations(update_movementflag); | 591 | UpdateMovementAnimations(update_movementflag); |
592 | } | ||
583 | } | 593 | } |
584 | 594 | ||
585 | } | 595 | } |