Add size of region to OAR control file. Megaregions (sw root OARs when saved) will have a size larger than 256x256
Not yet read. Do not rely on this information yet, it may change.0.7.4.1
parent
824a3a114b
commit
5759313f7f
|
@ -392,35 +392,45 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
xtw.WriteElementString("id", UUID.Random().ToString());
|
xtw.WriteElementString("id", UUID.Random().ToString());
|
||||||
xtw.WriteEndElement();
|
xtw.WriteEndElement();
|
||||||
|
|
||||||
xtw.WriteElementString("assets_included", SaveAssets.ToString());
|
xtw.WriteStartElement("region_info");
|
||||||
|
|
||||||
bool isMegaregion;
|
bool isMegaregion;
|
||||||
|
Vector2 size;
|
||||||
|
IRegionCombinerModule rcMod = null;
|
||||||
|
|
||||||
// FIXME: This is only here for regression test purposes since they do not supply a module. Need to fix
|
// FIXME: This is only here for regression test purposes since they do not supply a module. Need to fix
|
||||||
// this, possibly by doing control file creation somewhere else.
|
// this, possibly by doing control file creation somewhere else.
|
||||||
if (m_module != null && m_module.RegionCombinerModule != null)
|
if (m_module != null)
|
||||||
{
|
rcMod = m_module.RegionCombinerModule;
|
||||||
IRegionCombinerModule mod = m_module.RegionCombinerModule;
|
|
||||||
isMegaregion = mod.IsRootForMegaregion(m_scene.RegionInfo.RegionID);
|
if (rcMod != null)
|
||||||
}
|
isMegaregion = rcMod.IsRootForMegaregion(m_scene.RegionInfo.RegionID);
|
||||||
else
|
else
|
||||||
{
|
|
||||||
isMegaregion = false;
|
isMegaregion = false;
|
||||||
}
|
|
||||||
|
if (isMegaregion)
|
||||||
|
size = rcMod.GetSizeOfMegaregion(m_scene.RegionInfo.RegionID);
|
||||||
|
else
|
||||||
|
size = new Vector2((float)Constants.RegionSize, (float)Constants.RegionSize);
|
||||||
|
|
||||||
xtw.WriteElementString("is_megaregion", isMegaregion.ToString());
|
xtw.WriteElementString("is_megaregion", isMegaregion.ToString());
|
||||||
|
xtw.WriteElementString("size_in_meters", string.Format("{0},{1}", size.X, size.Y));
|
||||||
|
|
||||||
|
xtw.WriteEndElement();
|
||||||
|
|
||||||
|
xtw.WriteElementString("assets_included", SaveAssets.ToString());
|
||||||
|
|
||||||
xtw.WriteEndElement();
|
xtw.WriteEndElement();
|
||||||
|
|
||||||
xtw.Flush();
|
xtw.Flush();
|
||||||
xtw.Close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s = sw.ToString();
|
s = sw.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Console.WriteLine(
|
if (m_scene != null)
|
||||||
// "[ARCHIVE WRITE REQUEST PREPARATION]: Control file for {0} is: {1}", m_scene.RegionInfo.RegionName, s);
|
Console.WriteLine(
|
||||||
|
"[ARCHIVE WRITE REQUEST PREPARATION]: Control file for {0} is: {1}", m_scene.RegionInfo.RegionName, s);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,20 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Does the given id belong to the root region of a megaregion?
|
/// Does the given id belong to the root region of a megaregion?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool IsRootForMegaregion(UUID sceneId);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -113,10 +113,25 @@ namespace OpenSim.Region.RegionCombinerModule
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsRootForMegaregion(UUID sceneId)
|
public bool IsRootForMegaregion(UUID regionId)
|
||||||
{
|
{
|
||||||
lock (m_regions)
|
lock (m_regions)
|
||||||
return m_regions.ContainsKey(sceneId);
|
return m_regions.ContainsKey(regionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector2 GetSizeOfMegaregion(UUID regionId)
|
||||||
|
{
|
||||||
|
lock (m_regions)
|
||||||
|
{
|
||||||
|
if (m_regions.ContainsKey(regionId))
|
||||||
|
{
|
||||||
|
RegionConnections rootConn = m_regions[regionId];
|
||||||
|
|
||||||
|
return new Vector2((float)rootConn.XEnd, (float)rootConn.YEnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Exception(string.Format("Region with id {0} not found", regionId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void NewPresence(ScenePresence presence)
|
private void NewPresence(ScenePresence presence)
|
||||||
|
|
Loading…
Reference in New Issue