当前位置: 首页>>代码示例>>C#>>正文


C# LLAgent.SetParent方法代码示例

本文整理汇总了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
            }
        }
开发者ID:thoys,项目名称:simian,代码行数:57,代码来源:Movement.cs

示例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);
        }
开发者ID:thoys,项目名称:simian,代码行数:95,代码来源:Movement.cs


注:本文中的LLAgent.SetParent方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。