a few more changes on avatar crossing

LSLKeyTest
UbitUmarov 2016-07-27 03:50:47 +01:00
parent f4fa891928
commit 2e4c8798ab
2 changed files with 20 additions and 46 deletions

View File

@ -1560,7 +1560,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// We need this because of decimal number parsing of the protocols. // We need this because of decimal number parsing of the protocols.
Culture.SetCurrentCulture(); Culture.SetCurrentCulture();
Vector3 pos = agent.AbsolutePosition + agent.Velocity; Vector3 pos = agent.AbsolutePosition + agent.Velocity * 0.2f;
GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos, GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos,
ctx, out newpos, out failureReason); ctx, out newpos, out failureReason);
@ -1648,17 +1648,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
icon.EndInvoke(iar); icon.EndInvoke(iar);
} }
public bool CrossAgentToNewRegionPrep(ScenePresence agent, GridRegion neighbourRegion)
{
if (neighbourRegion == null)
return false;
m_entityTransferStateMachine.SetInTransit(agent.UUID);
agent.RemoveFromPhysicalScene();
return true;
}
/// <summary> /// <summary>
/// This Closes child agents on neighbouring regions /// This Closes child agents on neighbouring regions
@ -1673,16 +1663,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: new region={1} at <{2},{3}>. newpos={4}", m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: new region={1} at <{2},{3}>. newpos={4}",
LogHeader, neighbourRegion.RegionName, neighbourRegion.RegionLocX, neighbourRegion.RegionLocY, pos); LogHeader, neighbourRegion.RegionName, neighbourRegion.RegionLocX, neighbourRegion.RegionLocY, pos);
if (!CrossAgentToNewRegionPrep(agent, neighbourRegion)) if (neighbourRegion == null)
{ {
m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: prep failed. Resetting transfer state", LogHeader); m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: invalid destiny", LogHeader);
m_entityTransferStateMachine.ResetFromTransit(agent.UUID); return agent;
} }
m_entityTransferStateMachine.SetInTransit(agent.UUID);
agent.RemoveFromPhysicalScene();
if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying, ctx)) if (!CrossAgentIntoNewRegionMain(agent, pos, neighbourRegion, isFlying, ctx))
{ {
m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: cross main failed. Resetting transfer state", LogHeader); m_log.DebugFormat("{0}: CrossAgentToNewRegionAsync: cross main failed. Resetting transfer state", LogHeader);
m_entityTransferStateMachine.ResetFromTransit(agent.UUID); m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
return agent;
} }
CrossAgentToNewRegionPost(agent, pos, neighbourRegion, isFlying, ctx); CrossAgentToNewRegionPost(agent, pos, neighbourRegion, isFlying, ctx);
@ -1706,7 +1700,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// agent.Appearance.WearableCacheItems = null; // agent.Appearance.WearableCacheItems = null;
cAgent.Position = pos; cAgent.Position = pos;
cAgent.ChildrenCapSeeds = agent.KnownRegions; cAgent.ChildrenCapSeeds = agent.KnownRegions;
if (isFlying) if (isFlying)
@ -1787,15 +1780,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
capsPath); capsPath);
} }
/*
// Backwards compatibility. Best effort
if (version == 0f)
{
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: neighbor with old version, passing attachments one by one...");
Thread.Sleep(3000); // wait a little now that we're not waiting for the callback
CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
}
*/
// SUCCESS! // SUCCESS!
m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination); m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination);
@ -1814,18 +1798,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// but not sure yet what the side effects would be. // but not sure yet what the side effects would be.
m_entityTransferStateMachine.ResetFromTransit(agent.UUID); m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
// TODO: Check since what version this wasn't needed anymore. May be as old as 0.6
/*
// Backwards compatibility. Best effort
if (version == 0f)
{
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: neighbor with old version, passing attachments one by one...");
Thread.Sleep(3000); // wait a little now that we're not waiting for the callback
CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true);
}
*/
// the user may change their profile information in other region, // the user may change their profile information in other region,
// so the userinfo in UserProfileCache is not reliable any more, delete it // so the userinfo in UserProfileCache is not reliable any more, delete it
// REFACTORING PROBLEM. Well, not a problem, but this method is HORRIBLE! // REFACTORING PROBLEM. Well, not a problem, but this method is HORRIBLE!

View File

@ -4206,19 +4206,21 @@ namespace OpenSim.Region.Framework.Scenes
{ {
// we don't have entity transfer module // we don't have entity transfer module
Vector3 pos = AbsolutePosition; Vector3 pos = AbsolutePosition;
vel = Velocity;
float px = pos.X; float px = pos.X;
if (px < 0) if (px < 0)
pos.X += Velocity.X * 2; pos.X += vel.X * 2;
else if (px > m_scene.RegionInfo.RegionSizeX) else if (px > m_scene.RegionInfo.RegionSizeX)
pos.X -= Velocity.X * 2; pos.X -= vel.X * 2;
float py = pos.Y; float py = pos.Y;
if (py < 0) if (py < 0)
pos.Y += Velocity.Y * 2; pos.Y += vel.Y * 2;
else if (py > m_scene.RegionInfo.RegionSizeY) else if (py > m_scene.RegionInfo.RegionSizeY)
pos.Y -= Velocity.Y * 2; pos.Y -= vel.Y * 2;
Velocity = Vector3.Zero; Velocity = Vector3.Zero;
m_AngularVelocity = Vector3.Zero;
AbsolutePosition = pos; AbsolutePosition = pos;
} }
} }
@ -4231,21 +4233,21 @@ namespace OpenSim.Region.Framework.Scenes
RemoveFromPhysicalScene(); RemoveFromPhysicalScene();
Vector3 pos = AbsolutePosition; Vector3 pos = AbsolutePosition;
Vector3 vel = Velocity;
float px = pos.X; float px = pos.X;
if (px < 0) if (px < 0)
pos.X += Velocity.X * 2; pos.X += vel.X * 2;
else if (px > m_scene.RegionInfo.RegionSizeX) else if (px > m_scene.RegionInfo.RegionSizeX)
pos.X -= Velocity.X * 2; pos.X -= vel.X * 2;
float py = pos.Y; float py = pos.Y;
if (py < 0) if (py < 0)
pos.Y += Velocity.Y * 2; pos.Y += vel.Y * 2;
else if (py > m_scene.RegionInfo.RegionSizeY) else if (py > m_scene.RegionInfo.RegionSizeY)
pos.Y -= Velocity.Y * 2; pos.Y -= vel.Y * 2;
Velocity = Vector3.Zero; Velocity = Vector3.Zero;
m_AngularVelocity = Vector3.Zero; m_AngularVelocity = Vector3.Zero;
AbsolutePosition = pos; AbsolutePosition = pos;
AddToPhysicalScene(isFlying); AddToPhysicalScene(isFlying);