Fixed a compilation problem. Also added a lengthy comment on the Map hack, so that it never goes unnoticed again.
parent
1bd712c541
commit
2a46f756d6
|
@ -59,7 +59,7 @@ namespace OpenSim.Region.CoreModules.Hypergrid
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
protected override List<MapBlockData> GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
|
protected override void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
|
||||||
{
|
{
|
||||||
List<MapBlockData> mapBlocks = new List<MapBlockData>();
|
List<MapBlockData> mapBlocks = new List<MapBlockData>();
|
||||||
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
||||||
|
@ -96,7 +96,6 @@ namespace OpenSim.Region.CoreModules.Hypergrid
|
||||||
|
|
||||||
remoteClient.SendMapBlock(mapBlocks, 0);
|
remoteClient.SendMapBlock(mapBlocks, 0);
|
||||||
|
|
||||||
return mapBlocks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -208,52 +208,65 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
//m_log.DebugFormat("[MAPLAYER]: path: {0}, param: {1}, agent:{2}",
|
//m_log.DebugFormat("[MAPLAYER]: path: {0}, param: {1}, agent:{2}",
|
||||||
// path, param, agentID.ToString());
|
// path, param, agentID.ToString());
|
||||||
|
|
||||||
// this is here because CAPS map requests work even beyond the 10,000 limit.
|
// There is a major hack going on in this method. The viewer doesn't request
|
||||||
ScenePresence avatarPresence = null;
|
// map blocks (RequestMapBlocks) above 4096. That means that if we don't hack,
|
||||||
|
// grids above that cell don't have a map at all. So, here's the hack: we wait
|
||||||
|
// for this CAP request to come, and we inject the map blocks at this point.
|
||||||
|
// In a normal scenario, this request simply sends back the MapLayer (the blue color).
|
||||||
|
// In the hacked scenario, it also sends the map blocks via UDP.
|
||||||
|
//
|
||||||
|
// 6/8/2011 -- I'm adding an explicit 4096 check, so that we never forget that there is
|
||||||
|
// a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks.
|
||||||
|
|
||||||
m_scene.TryGetScenePresence(agentID, out avatarPresence);
|
if (m_scene.RegionInfo.RegionLocX >= 4096 || m_scene.RegionInfo.RegionLocY > 4096)
|
||||||
|
|
||||||
if (avatarPresence != null)
|
|
||||||
{
|
{
|
||||||
bool lookup = false;
|
ScenePresence avatarPresence = null;
|
||||||
|
|
||||||
lock (cachedMapBlocks)
|
m_scene.TryGetScenePresence(agentID, out avatarPresence);
|
||||||
|
|
||||||
|
if (avatarPresence != null)
|
||||||
{
|
{
|
||||||
if (cachedMapBlocks.Count > 0 && ((cachedTime + 1800) > Util.UnixTimeSinceEpoch()))
|
bool lookup = false;
|
||||||
{
|
|
||||||
List<MapBlockData> mapBlocks;
|
|
||||||
|
|
||||||
mapBlocks = cachedMapBlocks;
|
|
||||||
avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lookup = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (lookup)
|
|
||||||
{
|
|
||||||
List<MapBlockData> mapBlocks = new List<MapBlockData>(); ;
|
|
||||||
|
|
||||||
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
|
||||||
(int)(m_scene.RegionInfo.RegionLocX - 8) * (int)Constants.RegionSize,
|
|
||||||
(int)(m_scene.RegionInfo.RegionLocX + 8) * (int)Constants.RegionSize,
|
|
||||||
(int)(m_scene.RegionInfo.RegionLocY - 8) * (int)Constants.RegionSize,
|
|
||||||
(int)(m_scene.RegionInfo.RegionLocY + 8) * (int)Constants.RegionSize);
|
|
||||||
foreach (GridRegion r in regions)
|
|
||||||
{
|
|
||||||
MapBlockData block = new MapBlockData();
|
|
||||||
MapBlockFromGridRegion(block, r);
|
|
||||||
mapBlocks.Add(block);
|
|
||||||
}
|
|
||||||
avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
|
|
||||||
|
|
||||||
lock (cachedMapBlocks)
|
lock (cachedMapBlocks)
|
||||||
cachedMapBlocks = mapBlocks;
|
{
|
||||||
|
if (cachedMapBlocks.Count > 0 && ((cachedTime + 1800) > Util.UnixTimeSinceEpoch()))
|
||||||
|
{
|
||||||
|
List<MapBlockData> mapBlocks;
|
||||||
|
|
||||||
cachedTime = Util.UnixTimeSinceEpoch();
|
mapBlocks = cachedMapBlocks;
|
||||||
|
avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lookup = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lookup)
|
||||||
|
{
|
||||||
|
List<MapBlockData> mapBlocks = new List<MapBlockData>(); ;
|
||||||
|
|
||||||
|
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
|
||||||
|
(int)(m_scene.RegionInfo.RegionLocX - 8) * (int)Constants.RegionSize,
|
||||||
|
(int)(m_scene.RegionInfo.RegionLocX + 8) * (int)Constants.RegionSize,
|
||||||
|
(int)(m_scene.RegionInfo.RegionLocY - 8) * (int)Constants.RegionSize,
|
||||||
|
(int)(m_scene.RegionInfo.RegionLocY + 8) * (int)Constants.RegionSize);
|
||||||
|
foreach (GridRegion r in regions)
|
||||||
|
{
|
||||||
|
MapBlockData block = new MapBlockData();
|
||||||
|
MapBlockFromGridRegion(block, r);
|
||||||
|
mapBlocks.Add(block);
|
||||||
|
}
|
||||||
|
avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
|
||||||
|
|
||||||
|
lock (cachedMapBlocks)
|
||||||
|
cachedMapBlocks = mapBlocks;
|
||||||
|
|
||||||
|
cachedTime = Util.UnixTimeSinceEpoch();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
|
LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse();
|
||||||
mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse());
|
mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse());
|
||||||
return mapResponse.ToString();
|
return mapResponse.ToString();
|
||||||
|
|
Loading…
Reference in New Issue