diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | 94 |
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; | |||
48 | using Caps=OpenSim.Framework.Capabilities.Caps; | 48 | using Caps=OpenSim.Framework.Capabilities.Caps; |
49 | using OSDArray=OpenMetaverse.StructuredData.OSDArray; | 49 | using OSDArray=OpenMetaverse.StructuredData.OSDArray; |
50 | using OSDMap=OpenMetaverse.StructuredData.OSDMap; | 50 | using OSDMap=OpenMetaverse.StructuredData.OSDMap; |
51 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
51 | 52 | ||
52 | namespace OpenSim.Region.CoreModules.World.WorldMap | 53 | namespace 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) |