mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 04:05:42 +08:00
Add a position parameter to region crossing of objects. This avoids the
potential bad update that places an object at the opposite side of the origin sim for a moment before actually crossing it. Especially important in grids like OSG where lag between sims is high.
This commit is contained in:
@@ -315,7 +315,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||
* Object-related communications
|
||||
*/
|
||||
|
||||
public bool CreateObject(GridRegion destination, ISceneObject sog, bool isLocalCall)
|
||||
public bool CreateObject(GridRegion destination, Vector3 newPosition, ISceneObject sog, bool isLocalCall)
|
||||
{
|
||||
if (destination == null)
|
||||
return false;
|
||||
@@ -330,12 +330,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||
// We need to make a local copy of the object
|
||||
ISceneObject sogClone = sog.CloneForNewScene();
|
||||
sogClone.SetState(sog.GetStateSnapshot(), s);
|
||||
return s.IncomingCreateObject(sogClone);
|
||||
return s.IncomingCreateObject(newPosition, sogClone);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use the object as it came through the wire
|
||||
return s.IncomingCreateObject(sog);
|
||||
return s.IncomingCreateObject(newPosition, sog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,13 +282,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||
* Object-related communications
|
||||
*/
|
||||
|
||||
public bool CreateObject(GridRegion destination, ISceneObject sog, bool isLocalCall)
|
||||
public bool CreateObject(GridRegion destination, Vector3 newPosition, ISceneObject sog, bool isLocalCall)
|
||||
{
|
||||
if (destination == null)
|
||||
return false;
|
||||
|
||||
// Try local first
|
||||
if (m_localBackend.CreateObject(destination, sog, isLocalCall))
|
||||
if (m_localBackend.CreateObject(destination, newPosition, sog, isLocalCall))
|
||||
{
|
||||
//m_log.Debug("[REST COMMS]: LocalBackEnd SendCreateObject succeeded");
|
||||
return true;
|
||||
@@ -296,7 +296,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
|
||||
|
||||
// else do the remote thing
|
||||
if (!m_localBackend.IsLocalRegion(destination.RegionHandle))
|
||||
return m_remoteConnector.CreateObject(destination, sog, isLocalCall);
|
||||
return m_remoteConnector.CreateObject(destination, newPosition, sog, isLocalCall);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user