aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
authorJohn Hurliman2010-05-21 13:55:36 -0700
committerJohn Hurliman2010-05-21 13:55:36 -0700
commit93ef65c69055157e0b7d51e544abe5a1035f40f0 (patch)
tree0afcfd50591e34f0a5d7efa474f300cf09083f69 /OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
parentminor: remove LongRunning test designator from TestAddSceneObject() since it ... (diff)
downloadopensim-SC_OLD-93ef65c69055157e0b7d51e544abe5a1035f40f0.zip
opensim-SC_OLD-93ef65c69055157e0b7d51e544abe5a1035f40f0.tar.gz
opensim-SC_OLD-93ef65c69055157e0b7d51e544abe5a1035f40f0.tar.bz2
opensim-SC_OLD-93ef65c69055157e0b7d51e544abe5a1035f40f0.tar.xz
* Moving all of the prioritization/reprioritization code into a new file Prioritizer.cs
* Simplified the interest management code to make it easier to add new policies. Prioritization and reprioritization share code paths now * Improved the distance and front back policies to always give your avatar the highest priority
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs101
1 files changed, 1 insertions, 100 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 8aefd50..4453beb 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3602,106 +3602,7 @@ namespace OpenSim.Region.Framework.Scenes
3602 3602
3603 SetFromItemID(uuid); 3603 SetFromItemID(uuid);
3604 } 3604 }
3605 #endregion
3606 3605
3607 public double GetUpdatePriority(IClientAPI client) 3606 #endregion
3608 {
3609 switch (Scene.UpdatePrioritizationScheme)
3610 {
3611 case Scene.UpdatePrioritizationSchemes.Time:
3612 return GetPriorityByTime();
3613 case Scene.UpdatePrioritizationSchemes.Distance:
3614 return GetPriorityByDistance(client);
3615 case Scene.UpdatePrioritizationSchemes.SimpleAngularDistance:
3616 return GetPriorityBySimpleAngularDistance(client);
3617 case Scenes.Scene.UpdatePrioritizationSchemes.FrontBack:
3618 return GetPriorityByFrontBack(client);
3619 default:
3620 throw new InvalidOperationException("UpdatePrioritizationScheme not defined");
3621 }
3622 }
3623
3624 private double GetPriorityByTime()
3625 {
3626 return DateTime.Now.ToOADate();
3627 }
3628
3629 private double GetPriorityByDistance(IClientAPI client)
3630 {
3631 ScenePresence presence = Scene.GetScenePresence(client.AgentId);
3632 if (presence != null)
3633 {
3634 return GetPriorityByDistance((presence.IsChildAgent) ?
3635 presence.AbsolutePosition : presence.CameraPosition);
3636 }
3637 return double.NaN;
3638 }
3639
3640 private double GetPriorityBySimpleAngularDistance(IClientAPI client)
3641 {
3642 ScenePresence presence = Scene.GetScenePresence(client.AgentId);
3643 if (presence != null)
3644 {
3645 return GetPriorityBySimpleAngularDistance((presence.IsChildAgent) ?
3646 presence.AbsolutePosition : presence.CameraPosition);
3647 }
3648 return double.NaN;
3649 }
3650
3651 private double GetPriorityByFrontBack(IClientAPI client)
3652 {
3653 ScenePresence presence = Scene.GetScenePresence(client.AgentId);
3654 if (presence != null)
3655 {
3656 return GetPriorityByFrontBack(presence.CameraPosition, presence.CameraAtAxis);
3657 }
3658 return double.NaN;
3659 }
3660
3661 public double GetPriorityByDistance(Vector3 position)
3662 {
3663 return Vector3.Distance(AbsolutePosition, position);
3664 }
3665
3666 public double GetPriorityBySimpleAngularDistance(Vector3 position)
3667 {
3668 double distance = Vector3.Distance(position, AbsolutePosition);
3669 if (distance >= double.Epsilon)
3670 {
3671 float height;
3672 Vector3 box = GetAxisAlignedBoundingBox(out height);
3673
3674 double angle = box.X / distance;
3675 double max = angle;
3676
3677 angle = box.Y / distance;
3678 if (max < angle)
3679 max = angle;
3680
3681 angle = box.Z / distance;
3682 if (max < angle)
3683 max = angle;
3684
3685 return -max;
3686 }
3687 else
3688 return double.MinValue;
3689 }
3690
3691 public double GetPriorityByFrontBack(Vector3 camPosition, Vector3 camAtAxis)
3692 {
3693 // Distance
3694 double priority = Vector3.Distance(camPosition, AbsolutePosition);
3695
3696 // Scale
3697 //priority -= GroupScale().Length();
3698
3699 // Plane equation
3700 float d = -Vector3.Dot(camPosition, camAtAxis);
3701 float p = Vector3.Dot(camAtAxis, AbsolutePosition) + d;
3702 if (p < 0.0f) priority *= 2.0f;
3703
3704 return priority;
3705 }
3706 } 3607 }
3707} 3608}