本文整理汇总了C#中LLAgent.SetParent方法的典型用法代码示例。如果您正苦于以下问题:C# LLAgent.SetParent方法的具体用法?C# LLAgent.SetParent怎么用?C# LLAgent.SetParent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LLAgent
的用法示例。
在下文中一共展示了LLAgent.SetParent方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AgentRequestSitHandler
private void AgentRequestSitHandler(Packet packet, LLAgent agent)
{
AgentRequestSitPacket request = (AgentRequestSitPacket)packet;
agent.RequestedSitTarget = request.TargetObject.TargetID;
agent.RequestedSitOffset = request.TargetObject.Offset;
//TODO: move to AgentSitHandler when we figure out how to make the client send AgentSit
ISceneEntity seat;
if (m_scene.TryGetEntity(agent.RequestedSitTarget, out seat) && seat is ILinkable)
{
agent.SetParent((ILinkable)seat, false, false);
AvatarSitResponsePacket response = new AvatarSitResponsePacket();
response.SitObject.ID = agent.RequestedSitTarget;
if (seat is LLPrimitive)
{
LLPrimitive prim = (LLPrimitive)seat;
if (prim.SitPosition != Vector3.Zero)
{
// llSitTarget is set
response.SitTransform.SitPosition = prim.SitPosition;
response.SitTransform.SitRotation = prim.SitRotation;
agent.RelativePosition = LLUtil.GetSitTarget(prim.SitPosition, agent.Scale);
agent.RelativeRotation = prim.SitRotation;
}
else
{
// No sit target set
Vector3 sitPos = LLUtil.GetSitTarget(agent.RequestedSitOffset, agent.Scale);
response.SitTransform.SitPosition = sitPos;
response.SitTransform.SitRotation = Quaternion.Identity;
agent.RelativePosition = sitPos;
agent.RelativeRotation = Quaternion.Identity;
}
}
m_udp.SendPacket(agent, response, ThrottleCategory.Task, false);
m_scene.EntityAddOrUpdate(this, agent, UpdateFlags.Parent, 0);
agent.Animations.SetDefaultAnimation(OpenMetaverse.Animations.SIT, 1);
m_scene.SendPresenceAnimations(this, agent);
if (m_lslScriptEngine != null)
m_lslScriptEngine.PostObjectEvent(seat.ID, "changed", new object[] { CHANGED_LINK }, new DetectParams[0]);
}
else
{
//TODO: send error message
}
}
示例2: AgentUpdateHandler
private void AgentUpdateHandler(Packet packet, LLAgent agent)
{
AgentUpdatePacket update = (AgentUpdatePacket)packet;
// Update rotation if the agent is not sitting on anything
if (agent.Parent == null)
agent.RelativeRotation = update.AgentData.BodyRotation;
agent.CameraPosition = update.AgentData.CameraCenter;
agent.CameraAtAxis = update.AgentData.CameraAtAxis;
agent.CameraLeftAxis = update.AgentData.CameraLeftAxis;
agent.CameraUpAxis = update.AgentData.CameraUpAxis;
agent.DrawDistance = update.AgentData.Far;
agent.ControlFlags = (AgentManager.ControlFlags)update.AgentData.ControlFlags;
agent.State = (AgentState)update.AgentData.State;
agent.HideTitle = update.AgentData.Flags != 0;
#region Standing
ILinkable parent = agent.Parent;
if (parent != null && (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP) == AgentManager.ControlFlags.AGENT_CONTROL_STAND_UP)
{
agent.SetParent(null, true, true);
agent.RelativePosition = parent.ScenePosition
+ Vector3.Transform(agent.SitPosition, Matrix4.CreateFromQuaternion(agent.SitRotation))
+ Vector3.UnitZ;
agent.Animations.ResetDefaultAnimation();
m_scene.SendPresenceAnimations(this, agent);
agent.CollisionsEnabled = true;
agent.DynamicsEnabled = true;
m_scene.EntityAddOrUpdate(this, agent, UpdateFlags.Position | UpdateFlags.Rotation, (uint)LLUpdateFlags.PrimFlags);
return;
}
#endregion Standing
#region Inputs
// Create forward and left vectors from the current avatar rotation
Matrix4 rotMatrix = Matrix4.CreateFromQuaternion(agent.RelativeRotation);
Vector3 fwd = Vector3.Transform(Vector3.UnitX, rotMatrix);
Vector3 left = Vector3.Transform(Vector3.UnitY, rotMatrix);
// Check control flags
bool heldForward = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_AT_POS;
bool heldBack = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG;
bool heldLeft = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS;
bool heldRight = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG;
//bool heldTurnLeft = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT;
//bool heldTurnRight = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT;
bool heldUp = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) == AgentManager.ControlFlags.AGENT_CONTROL_UP_POS;
bool heldDown = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG;
bool flying = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) == AgentManager.ControlFlags.AGENT_CONTROL_FLY;
//bool mouselook = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) == AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK;
bool nudgeForward = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS;
bool nudgeBack = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG;
bool nudgeLeft = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS;
bool nudgeRight = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG;
bool nudgeUp = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS;
bool nudgeDown = (agent.ControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG;
// direction in which the avatar is trying to move
Vector3 move = Vector3.Zero;
if (heldForward) { move.X += fwd.X; move.Y += fwd.Y; }
else if (nudgeForward) { move.X += fwd.X * 0.5f; move.Y += fwd.Y * 0.5f; }
if (heldBack) { move.X -= fwd.X; move.Y -= fwd.Y; }
else if (nudgeBack) { move.X -= fwd.X * 0.5f; move.Y -= fwd.Y * 0.5f; }
if (heldLeft) { move.X += left.X; move.Y += left.Y; }
else if (nudgeLeft) { move.X += left.X * 0.5f; move.Y += left.Y * 0.5f; }
if (heldRight) { move.X -= left.X; move.Y -= left.Y; }
else if (nudgeRight) { move.X -= left.X * 0.5f; move.Y -= left.Y * 0.5f; }
if (heldUp) { move.Z += 1f; }
else if (nudgeUp) { move.Z += 0.5f; }
if (heldDown) { move.Z -= 1f; }
else if (nudgeDown) { move.Z -= 0.5f; }
bool jumping = agent.JumpStart != 0;
float speed = (flying ? FLY_SPEED : agent.IsRunning && !jumping ? RUN_SPEED : WALK_SPEED);
if ((heldForward || heldBack) && (heldLeft || heldRight))
speed /= SQRT_TWO;
#endregion Inputs
agent.InputVelocity = move * speed;
agent.LastMovementState = agent.MovementState;
agent.MovementState = (flying ? MovementState.Flying : agent.IsRunning && !jumping ? MovementState.Running : MovementState.Walking);
}