remove references to RegionCombinerModule

LSLKeyTest
UbitUmarov 2016-07-28 00:34:16 +01:00
parent a8e19b7831
commit ec8101a24a
7 changed files with 26 additions and 185 deletions

View File

@ -173,7 +173,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
private BannedRegionCache m_bannedRegionCache = new BannedRegionCache(); private BannedRegionCache m_bannedRegionCache = new BannedRegionCache();
private IEventQueue m_eqModule; private IEventQueue m_eqModule;
private IRegionCombinerModule m_regionCombinerModule;
#region ISharedRegionModule #region ISharedRegionModule
@ -339,7 +338,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return; return;
m_eqModule = Scene.RequestModuleInterface<IEventQueue>(); m_eqModule = Scene.RequestModuleInterface<IEventQueue>();
m_regionCombinerModule = Scene.RequestModuleInterface<IRegionCombinerModule>();
} }
#endregion #endregion
@ -1341,18 +1339,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
protected virtual bool NeedsNewAgent(float viewdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, protected virtual bool NeedsNewAgent(float viewdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
int oldsizeX, int oldsizeY, int newsizeX, int newsizeY) int oldsizeX, int oldsizeY, int newsizeX, int newsizeY)
{ {
if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
{
Vector2 swCorner, neCorner;
GetMegaregionViewRange(out swCorner, out neCorner);
m_log.DebugFormat(
"[ENTITY TRANSFER MODULE]: Megaregion view of {0} is from {1} to {2} with new agent check for {3},{4}",
Scene.Name, swCorner, neCorner, newRegionX, newRegionY);
return !(newRegionX >= swCorner.X && newRegionX <= neCorner.X && newRegionY >= swCorner.Y && newRegionY <= neCorner.Y);
}
return Util.IsOutsideView(viewdist, oldRegionX, newRegionX, oldRegionY, newRegionY, return Util.IsOutsideView(viewdist, oldRegionX, newRegionX, oldRegionY, newRegionY,
oldsizeX, oldsizeY, newsizeX, newsizeY); oldsizeX, oldsizeY, newsizeX, newsizeY);
} }
@ -2385,13 +2371,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
{ {
Vector2 extent = Vector2.Zero; Vector2 extent = Vector2.Zero;
if (m_regionCombinerModule != null)
{
Vector2 megaRegionSize = m_regionCombinerModule.GetSizeOfMegaregion(Scene.RegionInfo.RegionID);
extent.X = (float)Util.WorldToRegionLoc((uint)megaRegionSize.X);
extent.Y = (float)Util.WorldToRegionLoc((uint)megaRegionSize.Y);
}
swCorner.X = Scene.RegionInfo.RegionLocX - 1; swCorner.X = Scene.RegionInfo.RegionLocX - 1;
swCorner.Y = Scene.RegionInfo.RegionLocY - 1; swCorner.Y = Scene.RegionInfo.RegionLocY - 1;
neCorner.X = Scene.RegionInfo.RegionLocX + extent.X; neCorner.X = Scene.RegionInfo.RegionLocX + extent.X;
@ -2411,46 +2390,29 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
RegionInfo m_regionInfo = pScene.RegionInfo; RegionInfo m_regionInfo = pScene.RegionInfo;
List<GridRegion> neighbours; List<GridRegion> neighbours;
// Leaving this as a "megaregions" computation vs "non-megaregions" computation; it isn't uint dd = (uint)avatar.RegionViewDistance;
// clear what should be done with a "far view" given that megaregions already extended the
// view to include everything in the megaregion
if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
{
uint dd = (uint)avatar.RegionViewDistance;
// until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors // until avatar movement updates client connections, we need to seend at least this current region imediate neighbors
uint ddX = Math.Max(dd, Constants.RegionSize); uint ddX = Math.Max(dd, Constants.RegionSize);
uint ddY = Math.Max(dd, Constants.RegionSize); uint ddY = Math.Max(dd, Constants.RegionSize);
ddX--; ddX--;
ddY--; ddY--;
// reference to region edges. Should be avatar position // reference to region edges. Should be avatar position
uint startX = Util.RegionToWorldLoc(pRegionLocX); uint startX = Util.RegionToWorldLoc(pRegionLocX);
uint endX = startX + m_regionInfo.RegionSizeX; uint endX = startX + m_regionInfo.RegionSizeX;
uint startY = Util.RegionToWorldLoc(pRegionLocY); uint startY = Util.RegionToWorldLoc(pRegionLocY);
uint endY = startY + m_regionInfo.RegionSizeY; uint endY = startY + m_regionInfo.RegionSizeY;
startX -= ddX; startX -= ddX;
startY -= ddY; startY -= ddY;
endX += ddX; endX += ddX;
endY += ddY; endY += ddY;
neighbours neighbours
= avatar.Scene.GridService.GetRegionRange( = avatar.Scene.GridService.GetRegionRange(
m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY); m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY);
}
else
{
Vector2 swCorner, neCorner;
GetMegaregionViewRange(out swCorner, out neCorner);
neighbours
= pScene.GridService.GetRegionRange(
m_regionInfo.ScopeID,
(int)Util.RegionToWorldLoc((uint)swCorner.X), (int)Util.RegionToWorldLoc((uint)neCorner.X),
(int)Util.RegionToWorldLoc((uint)swCorner.Y), (int)Util.RegionToWorldLoc((uint)neCorner.Y));
}
// The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1). // The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1).
neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID ); neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID );

View File

@ -522,22 +522,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
protected static void WriteRegionInfo(Scene scene, XmlTextWriter xtw) protected static void WriteRegionInfo(Scene scene, XmlTextWriter xtw)
{ {
bool isMegaregion;
Vector2 size; Vector2 size;
IRegionCombinerModule rcMod = scene.RequestModuleInterface<IRegionCombinerModule>(); size = new Vector2((float)scene.RegionInfo.RegionSizeX, (float)scene.RegionInfo.RegionSizeY);
if (rcMod != null)
isMegaregion = rcMod.IsRootForMegaregion(scene.RegionInfo.RegionID);
else
isMegaregion = false;
if (isMegaregion)
size = rcMod.GetSizeOfMegaregion(scene.RegionInfo.RegionID);
else
size = new Vector2((float)scene.RegionInfo.RegionSizeX, (float)scene.RegionInfo.RegionSizeY);
xtw.WriteElementString("is_megaregion", isMegaregion.ToString());
xtw.WriteElementString("size_in_meters", string.Format("{0},{1}", size.X, size.Y)); xtw.WriteElementString("size_in_meters", string.Format("{0},{1}", size.X, size.Y));
} }

View File

@ -53,7 +53,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public Scene Scene { get; private set; } public Scene Scene { get; private set; }
public IRegionCombinerModule RegionCombinerModule { get; private set; }
/// <value> /// <value>
/// The file used to load and save an opensimulator archive if no filename has been specified /// The file used to load and save an opensimulator archive if no filename has been specified
@ -85,7 +84,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
{ {
RegionCombinerModule = scene.RequestModuleInterface<IRegionCombinerModule>();
} }
public void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)

View File

@ -1,64 +0,0 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenSim.Region.Framework.Scenes;
using System.IO;
using OpenMetaverse;
namespace OpenSim.Region.Framework.Interfaces
{
public interface IRegionCombinerModule
{
/// <summary>
/// Does the given id belong to the root region of a megaregion?
/// </summary>
bool IsRootForMegaregion(UUID regionId);
/// <summary>
/// Gets the size of megaregion.
/// </summary>
/// <remarks>
/// Returns size in meters.
/// Do not rely on this method remaining the same - this area is actively under development.
/// </remarks>
/// <param name="sceneId">
/// The id of the root region for a megaregion.
/// This may change in the future to allow any region id that makes up a megaregion.
/// Currently, will throw an exception if this does not match a root region.
/// </param>
Vector2 GetSizeOfMegaregion(UUID regionId);
/// <summary>
/// Tests to see of position (relative to the region) is within the megaregion
/// </summary>
bool PositionIsInMegaregion(UUID currentRegion, int xx, int yy);
}
}

View File

@ -2925,18 +2925,8 @@ namespace OpenSim.Region.Framework.Scenes
if (xx < 0 || yy < 0) if (xx < 0 || yy < 0)
return false; return false;
IRegionCombinerModule regionCombinerModule = RequestModuleInterface<IRegionCombinerModule>(); if (xx < RegionInfo.RegionSizeX && yy < RegionInfo.RegionSizeY )
if (regionCombinerModule == null) ret = true;
{
// Regular region. Just check for region size
if (xx < RegionInfo.RegionSizeX && yy < RegionInfo.RegionSizeY )
ret = true;
}
else
{
// We're in a mega-region so see if we are still in that larger region
ret = regionCombinerModule.PositionIsInMegaregion(this.RegionInfo.RegionID, xx, yy);
}
return ret; return ret;
} }

View File

@ -2910,11 +2910,7 @@ namespace OpenSim.Region.Framework.Scenes
// Allow move to another sub-region within a megaregion // Allow move to another sub-region within a megaregion
Vector2 regionSize; Vector2 regionSize;
IRegionCombinerModule regionCombinerModule = m_scene.RequestModuleInterface<IRegionCombinerModule>(); regionSize = new Vector2(m_scene.RegionInfo.RegionSizeX, m_scene.RegionInfo.RegionSizeY);
if (regionCombinerModule != null)
regionSize = regionCombinerModule.GetSizeOfMegaregion(m_scene.RegionInfo.RegionID);
else
regionSize = new Vector2(m_scene.RegionInfo.RegionSizeX, m_scene.RegionInfo.RegionSizeY);
if (pos.X < 0 || pos.X >= regionSize.X if (pos.X < 0 || pos.X >= regionSize.X
|| pos.Y < 0 || pos.Y >= regionSize.Y || pos.Y < 0 || pos.Y >= regionSize.Y
@ -2923,21 +2919,7 @@ namespace OpenSim.Region.Framework.Scenes
float terrainHeight; float terrainHeight;
Scene targetScene = m_scene; Scene targetScene = m_scene;
// Get terrain height for sub-region in a megaregion if necessary terrainHeight = m_scene.GetGroundHeight(pos.X, pos.Y);
if (regionCombinerModule != null)
{
int X = (int)((m_scene.RegionInfo.WorldLocX) + pos.X);
int Y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y);
GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y);
// If X and Y is NaN, target_region will be null
if (target_region == null)
return;
UUID target_regionID = target_region.RegionID;
SceneManager.Instance.TryGetScene(target_region.RegionID, out targetScene);
terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)];
}
else
terrainHeight = m_scene.GetGroundHeight(pos.X, pos.Y);
// dont try to land underground // dont try to land underground
terrainHeight += Appearance.AvatarHeight * 0.5f + 0.2f; terrainHeight += Appearance.AvatarHeight * 0.5f + 0.2f;

View File

@ -3347,24 +3347,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
CheckThreatLevel(ThreatLevel.None, "osGetRegionSize"); CheckThreatLevel(ThreatLevel.None, "osGetRegionSize");
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
bool isMegaregion; Scene scene = m_ScriptEngine.World;
IRegionCombinerModule rcMod = World.RequestModuleInterface<IRegionCombinerModule>(); GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID);
if (rcMod != null) return new LSL_Vector((float)region.RegionSizeX, (float)region.RegionSizeY, (float)Constants.RegionHeight);
isMegaregion = rcMod.IsRootForMegaregion(World.RegionInfo.RegionID);
else
isMegaregion = false;
if (isMegaregion)
{
Vector2 size = rcMod.GetSizeOfMegaregion(World.RegionInfo.RegionID);
return new LSL_Vector(size.X, size.Y, Constants.RegionHeight);
}
else
{
Scene scene = m_ScriptEngine.World;
GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID);
return new LSL_Vector((float)region.RegionSizeX, (float)region.RegionSizeY, (float)Constants.RegionHeight);
}
} }
public int osGetSimulatorMemory() public int osGetSimulatorMemory()