本文整理汇总了C#中OpenSim.Framework.AgentPosition.CopyFrom方法的典型用法代码示例。如果您正苦于以下问题:C# AgentPosition.CopyFrom方法的具体用法?C# AgentPosition.CopyFrom怎么用?C# AgentPosition.CopyFrom使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenSim.Framework.AgentPosition
的用法示例。
在下文中一共展示了AgentPosition.CopyFrom方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CheckForSignificantMovement
/// <summary>
/// This checks for a significant movement and sends a coarselocationchange update
/// </summary>
protected void CheckForSignificantMovement()
{
if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT)
{
posLastSignificantMove = AbsolutePosition;
m_scene.EventManager.TriggerSignificantClientMovement(this);
}
// Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m
if (Util.GetDistanceTo(AbsolutePosition, m_lastChildAgentUpdatePosition) >= Scene.ChildReprioritizationDistance ||
Util.GetDistanceTo(CameraPosition, m_lastChildAgentUpdateCamPosition) >= Scene.ChildReprioritizationDistance)
{
m_lastChildAgentUpdatePosition = AbsolutePosition;
m_lastChildAgentUpdateCamPosition = CameraPosition;
ChildAgentDataUpdate cadu = new ChildAgentDataUpdate();
cadu.ActiveGroupID = UUID.Zero.Guid;
cadu.AgentID = UUID.Guid;
cadu.alwaysrun = SetAlwaysRun;
cadu.AVHeight = Appearance.AvatarHeight;
cadu.cameraPosition = CameraPosition;
cadu.drawdistance = DrawDistance;
cadu.GroupAccess = 0;
cadu.Position = AbsolutePosition;
cadu.regionHandle = RegionHandle;
// Throttles
float multiplier = 1;
int childRegions = KnownRegionCount;
if (childRegions != 0)
multiplier = 1f / childRegions;
// Minimum throttle for a child region is 1/4 of the root region throttle
if (multiplier <= 0.25f)
multiplier = 0.25f;
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
cadu.Velocity = Velocity;
AgentPosition agentpos = new AgentPosition();
agentpos.CopyFrom(cadu);
// Let's get this out of the update loop
Util.FireAndForget(delegate { m_scene.SendOutChildAgentUpdates(agentpos, this); });
}
}
示例2: CheckForSignificantMovement
/// <summary>
/// This checks for a significant movement and sends a courselocationchange update
/// </summary>
protected void CheckForSignificantMovement()
{
// Movement updates for agents in neighboring regions are sent directly to clients.
// This value only affects how often agent positions are sent to neighbor regions
// for things such as distance-based update prioritization
const float SIGNIFICANT_MOVEMENT = 2.0f;
if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT)
{
posLastSignificantMove = AbsolutePosition;
m_scene.EventManager.TriggerSignificantClientMovement(m_controllingClient);
m_scene.NotifyMyCoarseLocationChange();
}
// Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m
if (Util.GetDistanceTo(AbsolutePosition, m_lastChildAgentUpdatePosition) >= Scene.ChildReprioritizationDistance ||
Util.GetDistanceTo(CameraPosition, m_lastChildAgentUpdateCamPosition) >= Scene.ChildReprioritizationDistance)
{
m_lastChildAgentUpdatePosition = AbsolutePosition;
m_lastChildAgentUpdateCamPosition = CameraPosition;
ChildAgentDataUpdate cadu = new ChildAgentDataUpdate();
cadu.ActiveGroupID = UUID.Zero.Guid;
cadu.AgentID = UUID.Guid;
cadu.alwaysrun = m_setAlwaysRun;
cadu.AVHeight = m_avHeight;
Vector3 tempCameraCenter = m_CameraCenter;
cadu.cameraPosition = tempCameraCenter;
cadu.drawdistance = m_DrawDistance;
cadu.GroupAccess = 0;
cadu.Position = AbsolutePosition;
cadu.regionHandle = m_rootRegionHandle;
float multiplier = 1;
int innacurateNeighbors = m_scene.GetInaccurateNeighborCount();
if (innacurateNeighbors != 0)
{
multiplier = 1f / (float)innacurateNeighbors;
}
if (multiplier <= 0f)
{
multiplier = 0.25f;
}
//m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString());
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
cadu.Velocity = Velocity;
AgentPosition agentpos = new AgentPosition();
agentpos.CopyFrom(cadu);
m_scene.SendOutChildAgentUpdates(agentpos, this);
}
}
示例3: CheckForSignificantMovement
/// <summary>
/// This checks for a significant movement and sends a courselocationchange update
/// </summary>
protected void CheckForSignificantMovement()
{
if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > 0.5)
{
posLastSignificantMove = AbsolutePosition;
m_scene.EventManager.TriggerSignificantClientMovement(m_controllingClient);
m_scene.NotifyMyCoarseLocationChange();
}
// Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m
if (Util.GetDistanceTo(AbsolutePosition, m_lastChildAgentUpdatePosition) >= Scene.ChildReprioritizationDistance ||
Util.GetDistanceTo(CameraPosition, m_lastChildAgentUpdateCamPosition) >= Scene.ChildReprioritizationDistance)
{
ChildAgentDataUpdate cadu = new ChildAgentDataUpdate();
cadu.ActiveGroupID = UUID.Zero.Guid;
cadu.AgentID = UUID.Guid;
cadu.alwaysrun = m_setAlwaysRun;
cadu.AVHeight = m_avHeight;
sLLVector3 tempCameraCenter = new sLLVector3(new Vector3(m_CameraCenter.X, m_CameraCenter.Y, m_CameraCenter.Z));
cadu.cameraPosition = tempCameraCenter;
cadu.drawdistance = m_DrawDistance;
if (m_scene.Permissions.IsGod(new UUID(cadu.AgentID)))
cadu.godlevel = m_godlevel;
cadu.GroupAccess = 0;
cadu.Position = new sLLVector3(AbsolutePosition);
cadu.regionHandle = m_rootRegionHandle;
float multiplier = 1;
int innacurateNeighbors = m_scene.GetInaccurateNeighborCount();
if (innacurateNeighbors != 0)
{
multiplier = 1f / (float)innacurateNeighbors;
}
if (multiplier <= 0f)
{
multiplier = 0.25f;
}
//m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString());
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
cadu.Velocity = new sLLVector3(Velocity);
AgentPosition agentpos = new AgentPosition();
agentpos.CopyFrom(cadu);
m_scene.SendOutChildAgentUpdates(agentpos, this);
m_lastChildAgentUpdatePosition = AbsolutePosition;
m_lastChildAgentUpdateCamPosition = CameraPosition;
}
}
示例4: SendChildAgentUpdate
public void SendChildAgentUpdate()
{
Vector3 pos = AbsolutePosition;
m_LastChildAgentUpdatePosition.X = pos.X;
m_LastChildAgentUpdatePosition.Y = pos.Y;
m_LastChildAgentUpdatePosition.Z = pos.Z;
ChildAgentDataUpdate cadu = new ChildAgentDataUpdate();
cadu.ActiveGroupID = UUID.Zero.Guid;
cadu.AgentID = UUID.Guid;
cadu.alwaysrun = m_setAlwaysRun;
cadu.AVHeight = m_avHeight;
sLLVector3 tempCameraCenter = new sLLVector3(new Vector3(m_CameraCenter.X, m_CameraCenter.Y, m_CameraCenter.Z));
cadu.cameraPosition = tempCameraCenter;
cadu.drawdistance = m_DrawDistance;
if (!this.IsBot) // bots don't need IsGod checks
if (m_scene.Permissions.IsGod(new UUID(cadu.AgentID)))
cadu.godlevel = m_godlevel;
cadu.GroupAccess = 0;
cadu.Position = new sLLVector3(pos);
cadu.regionHandle = m_scene.RegionInfo.RegionHandle;
float multiplier = CalculateNeighborBandwidthMultiplier();
//m_log.Info("[NeighborThrottle]: " + m_scene.GetInaccurateNeighborCount().ToString() + " - m: " + multiplier.ToString());
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
cadu.Velocity = new sLLVector3(Velocity);
AgentPosition agentpos = new AgentPosition();
agentpos.CopyFrom(cadu);
m_scene.SendOutChildAgentUpdates(agentpos, this);
}
示例5: AgentPositionTest01
public void AgentPositionTest01()
{
UUID AgentId1 = UUID.Random();
UUID SessionId1 = UUID.Random();
uint CircuitCode1 = uint.MinValue;
Vector3 Size1 = Vector3.UnitZ;
Vector3 Position1 = Vector3.UnitX;
Vector3 LeftAxis1 = Vector3.UnitY;
Vector3 UpAxis1 = Vector3.UnitZ;
Vector3 AtAxis1 = Vector3.UnitX;
ulong RegionHandle1 = ulong.MinValue;
byte[] Throttles1 = new byte[] {0, 1, 0};
Vector3 Velocity1 = Vector3.Zero;
float Far1 = 256;
bool ChangedGrid1 = false;
Vector3 Center1 = Vector3.Zero;
AgentPosition position1 = new AgentPosition();
position1.AgentID = AgentId1;
position1.SessionID = SessionId1;
position1.CircuitCode = CircuitCode1;
position1.Size = Size1;
position1.Position = Position1;
position1.LeftAxis = LeftAxis1;
position1.UpAxis = UpAxis1;
position1.AtAxis = AtAxis1;
position1.RegionHandle = RegionHandle1;
position1.Throttles = Throttles1;
position1.Velocity = Velocity1;
position1.Far = Far1;
position1.ChangedGrid = ChangedGrid1;
position1.Center = Center1;
ChildAgentDataUpdate cadu = new ChildAgentDataUpdate();
cadu.AgentID = AgentId1.Guid;
cadu.ActiveGroupID = UUID.Zero.Guid;
cadu.throttles = Throttles1;
cadu.drawdistance = Far1;
cadu.Position = Position1;
cadu.Velocity = Velocity1;
cadu.regionHandle = RegionHandle1;
cadu.cameraPosition = Center1;
cadu.AVHeight = Size1.Z;
AgentPosition position2 = new AgentPosition();
position2.CopyFrom(cadu);
Assert.IsTrue(
position2.AgentID == position1.AgentID
&& position2.Size == position1.Size
&& position2.Position == position1.Position
&& position2.Velocity == position1.Velocity
&& position2.Center == position1.Center
&& position2.RegionHandle == position1.RegionHandle
&& position2.Far == position1.Far
,"Copy From ChildAgentDataUpdate failed");
position2 = new AgentPosition();
Assert.IsFalse(position2.AgentID == position1.AgentID, "Test Error, position2 should be a blank uninitialized AgentPosition");
position2.Unpack(position1.Pack(), null);
Assert.IsTrue(position2.AgentID == position1.AgentID, "Agent ID didn't unpack the same way it packed");
Assert.IsTrue(position2.Position == position1.Position, "Position didn't unpack the same way it packed");
Assert.IsTrue(position2.Velocity == position1.Velocity, "Velocity didn't unpack the same way it packed");
Assert.IsTrue(position2.SessionID == position1.SessionID, "SessionID didn't unpack the same way it packed");
Assert.IsTrue(position2.CircuitCode == position1.CircuitCode, "CircuitCode didn't unpack the same way it packed");
Assert.IsTrue(position2.LeftAxis == position1.LeftAxis, "LeftAxis didn't unpack the same way it packed");
Assert.IsTrue(position2.UpAxis == position1.UpAxis, "UpAxis didn't unpack the same way it packed");
Assert.IsTrue(position2.AtAxis == position1.AtAxis, "AtAxis didn't unpack the same way it packed");
Assert.IsTrue(position2.RegionHandle == position1.RegionHandle, "RegionHandle didn't unpack the same way it packed");
Assert.IsTrue(position2.ChangedGrid == position1.ChangedGrid, "ChangedGrid didn't unpack the same way it packed");
Assert.IsTrue(position2.Center == position1.Center, "Center didn't unpack the same way it packed");
Assert.IsTrue(position2.Size == position1.Size, "Size didn't unpack the same way it packed");
}
示例6: CheckForSignificantMovement
/// <summary>
/// This checks for a significant movement and sends a courselocationchange update
/// </summary>
protected void CheckForSignificantMovement()
{
// Movement updates for agents in neighboring regions are sent directly to clients.
// This value only affects how often agent positions are sent to neighbor regions
// for things such as distance-based update prioritization
const float SIGNIFICANT_MOVEMENT = 2.0f;
if (Util.GetDistanceTo(AbsolutePosition, posLastSignificantMove) > SIGNIFICANT_MOVEMENT)
{
posLastSignificantMove = AbsolutePosition;
m_scene.EventManager.TriggerSignificantClientMovement(m_controllingClient);
}
// Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m
if (Util.GetDistanceTo(AbsolutePosition, m_lastChildAgentUpdatePosition) >= Scene.ChildReprioritizationDistance ||
Util.GetDistanceTo(CameraPosition, m_lastChildAgentUpdateCamPosition) >= Scene.ChildReprioritizationDistance)
{
m_lastChildAgentUpdatePosition = AbsolutePosition;
m_lastChildAgentUpdateCamPosition = CameraPosition;
ChildAgentDataUpdate cadu = new ChildAgentDataUpdate();
cadu.ActiveGroupID = UUID.Zero.Guid;
cadu.AgentID = UUID.Guid;
cadu.alwaysrun = m_setAlwaysRun;
cadu.AVHeight = m_appearance.AvatarHeight;
Vector3 tempCameraCenter = m_CameraCenter;
cadu.cameraPosition = tempCameraCenter;
cadu.drawdistance = m_DrawDistance;
cadu.GroupAccess = 0;
cadu.Position = AbsolutePosition;
cadu.regionHandle = m_rootRegionHandle;
// Throttles
float multiplier = 1;
int childRegions = m_knownChildRegions.Count;
if (childRegions != 0)
multiplier = 1f / childRegions;
// Minimum throttle for a child region is 1/4 of the root region throttle
if (multiplier <= 0.25f)
multiplier = 0.25f;
cadu.throttles = ControllingClient.GetThrottlesPacked(multiplier);
cadu.Velocity = Velocity;
AgentPosition agentpos = new AgentPosition();
agentpos.CopyFrom(cadu);
m_scene.SendOutChildAgentUpdates(agentpos, this);
}
}