aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs94
1 files changed, 68 insertions, 26 deletions
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index 1f25f28..bd12218 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -48,6 +48,7 @@ using OpenSim.Region.Framework.Scenes;
48using Caps=OpenSim.Framework.Capabilities.Caps; 48using Caps=OpenSim.Framework.Capabilities.Caps;
49using OSDArray=OpenMetaverse.StructuredData.OSDArray; 49using OSDArray=OpenMetaverse.StructuredData.OSDArray;
50using OSDMap=OpenMetaverse.StructuredData.OSDMap; 50using OSDMap=OpenMetaverse.StructuredData.OSDMap;
51using GridRegion = OpenSim.Services.Interfaces.GridRegion;
51 52
52namespace OpenSim.Region.CoreModules.World.WorldMap 53namespace OpenSim.Region.CoreModules.World.WorldMap
53{ 54{
@@ -232,10 +233,20 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
232 } 233 }
233 if (lookup) 234 if (lookup)
234 { 235 {
235 List<MapBlockData> mapBlocks; 236 List<MapBlockData> mapBlocks = new List<MapBlockData>(); ;
236 237
237 mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks((int)m_scene.RegionInfo.RegionLocX - 8, (int)m_scene.RegionInfo.RegionLocY - 8, (int)m_scene.RegionInfo.RegionLocX + 8, (int)m_scene.RegionInfo.RegionLocY + 8); 238 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
238 avatarPresence.ControllingClient.SendMapBlock(mapBlocks,0); 239 (int)(m_scene.RegionInfo.RegionLocX - 8) * (int)Constants.RegionSize,
240 (int)(m_scene.RegionInfo.RegionLocY - 8) * (int)Constants.RegionSize,
241 (int)(m_scene.RegionInfo.RegionLocX + 8) * (int)Constants.RegionSize,
242 (int)(m_scene.RegionInfo.RegionLocY + 8) * (int)Constants.RegionSize);
243 foreach (GridRegion r in regions)
244 {
245 MapBlockData block = new MapBlockData();
246 MapBlockFromGridRegion(block, r);
247 mapBlocks.Add(block);
248 }
249 avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0);
239 250
240 lock (cachedMapBlocks) 251 lock (cachedMapBlocks)
241 cachedMapBlocks = mapBlocks; 252 cachedMapBlocks = mapBlocks;
@@ -579,7 +590,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
579 } 590 }
580 if (httpserver.Length == 0) 591 if (httpserver.Length == 0)
581 { 592 {
582 RegionInfo mreg = m_scene.SceneGridService.RequestNeighbouringRegionInfo(regionhandle); 593 uint x = 0, y = 0;
594 Utils.LongToUInts(regionhandle, out x, out y);
595 GridRegion mreg = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y);
583 596
584 if (mreg != null) 597 if (mreg != null)
585 { 598 {
@@ -719,15 +732,23 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
719 { 732 {
720 List<MapBlockData> response = new List<MapBlockData>(); 733 List<MapBlockData> response = new List<MapBlockData>();
721 734
722 // this should return one mapblock at most. But make sure: Look whether the one we requested is in there 735 // this should return one mapblock at most.
723 List<MapBlockData> mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); 736 // (diva note: why?? in that case we should GetRegionByPosition)
724 if (mapBlocks != null) 737 // But make sure: Look whether the one we requested is in there
738 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
739 minX * (int)Constants.RegionSize, minY * (int)Constants.RegionSize,
740 maxX * (int)Constants.RegionSize, maxY * (int)Constants.RegionSize);
741
742 if (regions != null)
725 { 743 {
726 foreach (MapBlockData block in mapBlocks) 744 foreach (GridRegion r in regions)
727 { 745 {
728 if (block.X == minX && block.Y == minY) 746 if ((r.RegionLocX == minX * (int)Constants.RegionSize) &&
747 (r.RegionLocY == minY * (int)Constants.RegionSize))
729 { 748 {
730 // found it => add it to response 749 // found it => add it to response
750 MapBlockData block = new MapBlockData();
751 MapBlockFromGridRegion(block, r);
731 response.Add(block); 752 response.Add(block);
732 break; 753 break;
733 } 754 }
@@ -754,10 +775,28 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
754 775
755 protected virtual void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) 776 protected virtual void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
756 { 777 {
757 List<MapBlockData> mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4); 778 List<MapBlockData> mapBlocks = new List<MapBlockData>();
779 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
780 (minX - 4) * (int)Constants.RegionSize, (minY - 4) * (int)Constants.RegionSize,
781 (maxX + 4) * (int)Constants.RegionSize, (maxY + 4) * (int)Constants.RegionSize);
782 foreach (GridRegion r in regions)
783 {
784 MapBlockData block = new MapBlockData();
785 MapBlockFromGridRegion(block, r);
786 mapBlocks.Add(block);
787 }
758 remoteClient.SendMapBlock(mapBlocks, flag); 788 remoteClient.SendMapBlock(mapBlocks, flag);
759 } 789 }
760 790
791 protected void MapBlockFromGridRegion(MapBlockData block, GridRegion r)
792 {
793 block.Access = r.Access;
794 block.MapImageId = r.TerrainImage;
795 block.Name = r.RegionName;
796 block.X = (ushort)(r.RegionLocX / Constants.RegionSize);
797 block.Y = (ushort)(r.RegionLocY / Constants.RegionSize);
798 }
799
761 public Hashtable OnHTTPGetMapImage(Hashtable keysvals) 800 public Hashtable OnHTTPGetMapImage(Hashtable keysvals)
762 { 801 {
763 m_log.Debug("[WORLD MAP]: Sending map image jpeg"); 802 m_log.Debug("[WORLD MAP]: Sending map image jpeg");
@@ -874,31 +913,34 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
874 m_log.InfoFormat( 913 m_log.InfoFormat(
875 "[WORLD MAP]: Exporting world map for {0} to {1}", m_scene.RegionInfo.RegionName, exportPath); 914 "[WORLD MAP]: Exporting world map for {0} to {1}", m_scene.RegionInfo.RegionName, exportPath);
876 915
877 List<MapBlockData> mapBlocks = 916 List<MapBlockData> mapBlocks = new List<MapBlockData>();
878 m_scene.CommsManager.GridService.RequestNeighbourMapBlocks( 917 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
879 (int)(m_scene.RegionInfo.RegionLocX - 9), 918 (int)(m_scene.RegionInfo.RegionLocX - 9) * (int)Constants.RegionSize,
880 (int)(m_scene.RegionInfo.RegionLocY - 9), 919 (int)(m_scene.RegionInfo.RegionLocY - 9) * (int)Constants.RegionSize,
881 (int)(m_scene.RegionInfo.RegionLocX + 9), 920 (int)(m_scene.RegionInfo.RegionLocX + 9) * (int)Constants.RegionSize,
882 (int)(m_scene.RegionInfo.RegionLocY + 9)); 921 (int)(m_scene.RegionInfo.RegionLocY + 9) * (int)Constants.RegionSize);
883 List<AssetBase> textures = new List<AssetBase>(); 922 List<AssetBase> textures = new List<AssetBase>();
884 List<Image> bitImages = new List<Image>(); 923 List<Image> bitImages = new List<Image>();
885 924
886 foreach (MapBlockData mapBlock in mapBlocks) 925 foreach (GridRegion r in regions)
887 { 926 {
927 MapBlockData mapBlock = new MapBlockData();
928 MapBlockFromGridRegion(mapBlock, r);
888 AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); 929 AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString());
889 930
890 if (texAsset != null) 931 if (texAsset != null)
891 { 932 {
892 textures.Add(texAsset); 933 textures.Add(texAsset);
893 } 934 }
894 else 935 //else
895 { 936 //{
896 texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); 937 // // WHAT?!? This doesn't seem right. Commenting (diva)
897 if (texAsset != null) 938 // texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString());
898 { 939 // if (texAsset != null)
899 textures.Add(texAsset); 940 // {
900 } 941 // textures.Add(texAsset);
901 } 942 // }
943 //}
902 } 944 }
903 945
904 foreach (AssetBase asset in textures) 946 foreach (AssetBase asset in textures)