Merge branch 'master' into careminster

avinationmerge
Melanie 2011-12-23 01:00:34 +00:00
commit b8a914b15b
4 changed files with 81 additions and 26 deletions

View File

@ -1727,6 +1727,30 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
uint x = 0, y = 0; uint x = 0, y = 0;
Utils.LongToUInts(newRegionHandle, out x, out y); Utils.LongToUInts(newRegionHandle, out x, out y);
GridRegion destination = scene.GridService.GetRegionByPosition(scene.RegionInfo.ScopeID, (int)x, (int)y); GridRegion destination = scene.GridService.GetRegionByPosition(scene.RegionInfo.ScopeID, (int)x, (int)y);
if (destination == null || !CrossPrimGroupIntoNewRegion(destination, grp, silent))
{
m_log.InfoFormat("[ENTITY TRANSFER MODULE] cross region transfer failed for object {0}",grp.UUID);
// We are going to move the object back to the old position so long as the old position
// is in the region
oldGroupPosition.X = Util.Clamp<float>(oldGroupPosition.X,1.0f,(float)Constants.RegionSize-1);
oldGroupPosition.Y = Util.Clamp<float>(oldGroupPosition.Y,1.0f,(float)Constants.RegionSize-1);
oldGroupPosition.Z = Util.Clamp<float>(oldGroupPosition.Z,1.0f,4096.0f);
grp.RootPart.GroupPosition = oldGroupPosition;
// Need to turn off the physics flags, otherwise the object will continue to attempt to
// move out of the region creating an infinite loop of failed attempts to cross
grp.UpdatePrimFlags(grp.RootPart.LocalId,false,grp.IsTemporary,grp.IsPhantom,false);
grp.ScheduleGroupForFullUpdate();
}
if (destination != null && !CrossPrimGroupIntoNewRegion(destination, grp, silent)) if (destination != null && !CrossPrimGroupIntoNewRegion(destination, grp, silent))
{ {
grp.RootPart.GroupPosition = oldGroupPosition; grp.RootPart.GroupPosition = oldGroupPosition;

View File

@ -273,7 +273,7 @@ namespace OpenSim.Region.Framework.Scenes
/// </remarks> /// </remarks>
public bool UsesPhysics public bool UsesPhysics
{ {
get { return (RootPart.Flags & PrimFlags.TemporaryOnRez) != 0; } get { return (RootPart.Flags & PrimFlags.Physics) != 0; }
} }
/// <summary> /// <summary>

View File

@ -110,7 +110,7 @@ namespace OpenSim.Region.Physics.OdePlugin
private const uint m_regionWidth = Constants.RegionSize; private const uint m_regionWidth = Constants.RegionSize;
private const uint m_regionHeight = Constants.RegionSize; private const uint m_regionHeight = Constants.RegionSize;
private float ODE_STEPSIZE = 0.020f; private float ODE_STEPSIZE = 0.0178f;
private float metersInSpace = 29.9f; private float metersInSpace = 29.9f;
private float m_timeDilation = 1.0f; private float m_timeDilation = 1.0f;
@ -456,7 +456,7 @@ namespace OpenSim.Region.Physics.OdePlugin
mAvatarObjectContactFriction = physicsconfig.GetFloat("m_avatarobjectcontact_friction", 75f); mAvatarObjectContactFriction = physicsconfig.GetFloat("m_avatarobjectcontact_friction", 75f);
mAvatarObjectContactBounce = physicsconfig.GetFloat("m_avatarobjectcontact_bounce", 0.1f); mAvatarObjectContactBounce = physicsconfig.GetFloat("m_avatarobjectcontact_bounce", 0.1f);
ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", 0.020f); ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", ODE_STEPSIZE);
m_physicsiterations = physicsconfig.GetInt("world_internal_steps_without_collisions", 10); m_physicsiterations = physicsconfig.GetInt("world_internal_steps_without_collisions", 10);
avDensity = physicsconfig.GetFloat("av_density", 80f); avDensity = physicsconfig.GetFloat("av_density", 80f);

View File

@ -352,26 +352,54 @@ namespace OpenSim.Services.Connectors.SimianGrid
public List<GridRegion> GetHyperlinks(UUID scopeID) public List<GridRegion> GetHyperlinks(UUID scopeID)
{ {
// Hypergrid/linked regions are not supported List<GridRegion> foundRegions = new List<GridRegion>();
return new List<GridRegion>();
NameValueCollection requestArgs = new NameValueCollection
{
{ "RequestMethod", "GetScenes" },
{ "HyperGrid", "true" },
{ "Enabled", "1" }
};
OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
if (response["Success"].AsBoolean())
{
// m_log.DebugFormat("[SIMIAN GRID CONNECTOR] found regions with name {0}",name);
OSDArray array = response["Scenes"] as OSDArray;
if (array != null)
{
for (int i = 0; i < array.Count; i++)
{
GridRegion region = ResponseToGridRegion(array[i] as OSDMap);
if (region != null)
foundRegions.Add(region);
}
}
}
return foundRegions;
} }
public int GetRegionFlags(UUID scopeID, UUID regionID) public int GetRegionFlags(UUID scopeID, UUID regionID)
{ {
const int REGION_ONLINE = 4;
NameValueCollection requestArgs = new NameValueCollection NameValueCollection requestArgs = new NameValueCollection
{ {
{ "RequestMethod", "GetScene" }, { "RequestMethod", "GetScene" },
{ "SceneID", regionID.ToString() } { "SceneID", regionID.ToString() }
}; };
// m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request region flags for {0}",regionID.ToString()); m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request region flags for {0}",regionID.ToString());
OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs); OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs);
if (response["Success"].AsBoolean()) if (response["Success"].AsBoolean())
{ {
return response["Enabled"].AsBoolean() ? REGION_ONLINE : 0; OSDMap extraData = response["ExtraData"] as OSDMap;
int enabled = response["Enabled"].AsBoolean() ? (int) OpenSim.Data.RegionFlags.RegionOnline : 0;
int hypergrid = extraData["HyperGrid"].AsBoolean() ? (int) OpenSim.Data.RegionFlags.Hyperlink : 0;
int flags = enabled | hypergrid;
m_log.DebugFormat("[SGGC] enabled - {0} hg - {1} flags - {2}", enabled, hypergrid, flags);
return flags;
} }
else else
{ {
@ -499,24 +527,27 @@ namespace OpenSim.Services.Connectors.SimianGrid
Vector3d minPosition = response["MinPosition"].AsVector3d(); Vector3d minPosition = response["MinPosition"].AsVector3d();
region.RegionLocX = (int)minPosition.X; region.RegionLocX = (int)minPosition.X;
region.RegionLocY = (int)minPosition.Y; region.RegionLocY = (int)minPosition.Y;
if ( ! extraData["HyperGrid"] ) {
Uri httpAddress = response["Address"].AsUri();
region.ExternalHostName = httpAddress.Host;
region.HttpPort = (uint)httpAddress.Port;
Uri httpAddress = response["Address"].AsUri(); IPAddress internalAddress;
region.ExternalHostName = httpAddress.Host; IPAddress.TryParse(extraData["InternalAddress"].AsString(), out internalAddress);
region.HttpPort = (uint)httpAddress.Port; if (internalAddress == null)
internalAddress = IPAddress.Any;
region.ServerURI = extraData["ServerURI"].AsString(); region.InternalEndPoint = new IPEndPoint(internalAddress, extraData["InternalPort"].AsInteger());
region.TerrainImage = extraData["MapTexture"].AsUUID();
IPAddress internalAddress; region.Access = (byte)extraData["Access"].AsInteger();
IPAddress.TryParse(extraData["InternalAddress"].AsString(), out internalAddress); region.RegionSecret = extraData["RegionSecret"].AsString();
if (internalAddress == null) region.EstateOwner = extraData["EstateOwner"].AsUUID();
internalAddress = IPAddress.Any; region.Token = extraData["Token"].AsString();
region.ServerURI = extraData["ServerURI"].AsString();
region.InternalEndPoint = new IPEndPoint(internalAddress, extraData["InternalPort"].AsInteger()); } else {
region.TerrainImage = extraData["MapTexture"].AsUUID(); region.ServerURI = response["Address"];
region.Access = (byte)extraData["Access"].AsInteger(); }
region.RegionSecret = extraData["RegionSecret"].AsString();
region.EstateOwner = extraData["EstateOwner"].AsUUID();
region.Token = extraData["Token"].AsString();
return region; return region;
} }