diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index c8310e4..f37b38b 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -55,6 +55,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
55 | private LLVector3 m_requestedSitOffset = new LLVector3(); | 55 | private LLVector3 m_requestedSitOffset = new LLVector3(); |
56 | private float m_sitAvatarHeight = 2.0f; | 56 | private float m_sitAvatarHeight = 2.0f; |
57 | private float m_godlevel = 0; | 57 | private float m_godlevel = 0; |
58 | private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3(); | ||
58 | 59 | ||
59 | private int m_perfMonMS = 0; | 60 | private int m_perfMonMS = 0; |
60 | 61 | ||
@@ -90,6 +91,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
90 | private LLQuaternion m_headrotation = new LLQuaternion(); | 91 | private LLQuaternion m_headrotation = new LLQuaternion(); |
91 | private byte m_state = (byte) 0; | 92 | private byte m_state = (byte) 0; |
92 | 93 | ||
94 | private List<LLUUID> m_knownPrimUUID = new List<LLUUID>(); | ||
95 | |||
93 | // Agent's Draw distance. | 96 | // Agent's Draw distance. |
94 | protected float m_DrawDistance = 0f; | 97 | protected float m_DrawDistance = 0f; |
95 | 98 | ||
@@ -136,6 +139,17 @@ namespace OpenSim.Region.Environment.Scenes | |||
136 | get { return m_physicsActor; } | 139 | get { return m_physicsActor; } |
137 | } | 140 | } |
138 | 141 | ||
142 | public bool KnownPrim(LLUUID primID) | ||
143 | { | ||
144 | if (m_knownPrimUUID.Contains(primID)) | ||
145 | { | ||
146 | return true; | ||
147 | } | ||
148 | m_knownPrimUUID.Add(primID); | ||
149 | return false; | ||
150 | } | ||
151 | |||
152 | |||
139 | public bool Updated | 153 | public bool Updated |
140 | { | 154 | { |
141 | set { m_updateflag = value; } | 155 | set { m_updateflag = value; } |
@@ -499,7 +513,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
499 | m_scene.CommsManager.UserProfileCacheService.UpdateUserInventory(m_uuid); | 513 | m_scene.CommsManager.UserProfileCacheService.UpdateUserInventory(m_uuid); |
500 | //if (!m_gotAllObjectsInScene) | 514 | //if (!m_gotAllObjectsInScene) |
501 | //{ | 515 | //{ |
502 | //m_scene.SendAllSceneObjectsToClient(this); | 516 | m_scene.SendAllSceneObjectsToClient(this); |
503 | //m_gotAllObjectsInScene = true; | 517 | //m_gotAllObjectsInScene = true; |
504 | //} | 518 | //} |
505 | } | 519 | } |
@@ -1408,6 +1422,29 @@ namespace OpenSim.Region.Environment.Scenes | |||
1408 | m_scene.NotifyMyCoarseLocationChange(); | 1422 | m_scene.NotifyMyCoarseLocationChange(); |
1409 | } | 1423 | } |
1410 | } | 1424 | } |
1425 | |||
1426 | // Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m | ||
1427 | if (Util.GetDistanceTo(AbsolutePosition,m_LastChildAgentUpdatePosition) > 32) | ||
1428 | { | ||
1429 | ChildAgentDataUpdate cadu = new ChildAgentDataUpdate(); | ||
1430 | cadu.ActiveGroupID=LLUUID.Zero.UUID; | ||
1431 | cadu.AgentID = UUID.UUID; | ||
1432 | cadu.alwaysrun = m_setAlwaysRun; | ||
1433 | cadu.AVHeight = m_avHeight; | ||
1434 | LLVector3 tempCameraCenter = new LLVector3(m_CameraCenter.x, m_CameraCenter.y, m_CameraCenter.z); | ||
1435 | cadu.cameraPosition = new sLLVector3(tempCameraCenter); | ||
1436 | cadu.drawdistance = m_DrawDistance; | ||
1437 | cadu.godlevel = m_godlevel; | ||
1438 | cadu.GroupAccess = 0; | ||
1439 | cadu.Position = new sLLVector3(AbsolutePosition); | ||
1440 | cadu.regionHandle = m_scene.RegionInfo.RegionHandle; | ||
1441 | cadu.throttles = ControllingClient.GetThrottlesPacked(1f); | ||
1442 | cadu.Velocity = new sLLVector3(Velocity); | ||
1443 | m_scene.SendOutChildAgentUpdates(cadu,this); | ||
1444 | m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; | ||
1445 | m_LastChildAgentUpdatePosition.Y = AbsolutePosition.Y; | ||
1446 | m_LastChildAgentUpdatePosition.Z = AbsolutePosition.Z; | ||
1447 | } | ||
1411 | } | 1448 | } |
1412 | 1449 | ||
1413 | #endregion | 1450 | #endregion |
@@ -1532,15 +1569,30 @@ namespace OpenSim.Region.Environment.Scenes | |||
1532 | /// This updates important decision making data about a child agent | 1569 | /// This updates important decision making data about a child agent |
1533 | /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region | 1570 | /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region |
1534 | /// </summary> | 1571 | /// </summary> |
1535 | public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData) | 1572 | public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) |
1536 | { | 1573 | { |
1537 | // | 1574 | // |
1575 | int shiftx = ((int)rRegionX - (int)tRegionX) * 256; | ||
1576 | int shifty = ((int)rRegionY - (int)tRegionY) * 256; | ||
1577 | |||
1538 | m_DrawDistance = cAgentData.drawdistance; | 1578 | m_DrawDistance = cAgentData.drawdistance; |
1539 | m_pos = new LLVector3(cAgentData.Position.x, cAgentData.Position.y, cAgentData.Position.z); | 1579 | m_pos = new LLVector3(cAgentData.Position.x + shiftx, cAgentData.Position.y + shifty, cAgentData.Position.z); |
1580 | |||
1581 | // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region | ||
1540 | m_CameraCenter = | 1582 | m_CameraCenter = |
1541 | new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); | 1583 | new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); |
1584 | |||
1585 | |||
1542 | m_godlevel = cAgentData.godlevel; | 1586 | m_godlevel = cAgentData.godlevel; |
1587 | SetHeight(cAgentData.AVHeight); | ||
1588 | |||
1543 | ControllingClient.SetChildAgentThrottle(cAgentData.throttles); | 1589 | ControllingClient.SetChildAgentThrottle(cAgentData.throttles); |
1590 | |||
1591 | |||
1592 | |||
1593 | // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. | ||
1594 | if (m_scene.m_sendTasksToChild) | ||
1595 | m_scene.SendAllSceneObjectsToClient(this); | ||
1544 | //cAgentData.AVHeight; | 1596 | //cAgentData.AVHeight; |
1545 | //cAgentData.regionHandle; | 1597 | //cAgentData.regionHandle; |
1546 | //m_velocity = cAgentData.Velocity; | 1598 | //m_velocity = cAgentData.Velocity; |