Exemple #1
0
        /// <summary>
        /// draw sigle ik Chain
        /// </summary>
        /// <param name="globalPmdModelLibIkChain"></param>
        /// <param name="color"></param>
        internal void DrawIKChain(Transform[] boneFinalPos, IkChain singleIkChain, Color color)
        {
            //disable zbuffer
            device.DepthStencilState = DepthStencilState.None;

            int BoneCount = singleIkChain.IkNodeCount;

            for (int i = 0; i < BoneCount; i++)
            {
                //draw ball
                DrawSphere(boneFinalPos[singleIkChain.IkNodes[i]].Pos, color);
                //if it has a child
                if (i < BoneCount - 1)
                {
                    DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Pos,
                             boneFinalPos[singleIkChain.IkNodes[i + 1]].Pos, color);
                }
                else
                {
                    //DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Translation,
                    //boneFinalPos[singleIkChain.IkTarget].Translation, color);
                }
            }
            DrawSphere(boneFinalPos[singleIkChain.IkTarget].Pos, Color.Black);
            //enable zbuffer test
            device.DepthStencilState = DepthStencilState.Default;
        }
    public bool Setup(Animator animator, IkChain chain, Type componentType, string weightProperty, string weightOffsetProperty, string targetOffsetProperty)
    {
        if (!chain.HasValidData())
        {
            return(false);
        }

        // Target
        m_TargetOffset = chain.target.offset;

        if (chain.target.readFrom == TargetType.Stream)
        {
            m_EffectorStreamHandle = animator.BindStreamTransform(chain.target.target);
            m_UseStreamEffector    = true;
        }
        else
        {
            m_EffectorSceneHandle = animator.BindSceneTransform(chain.target.target);
            m_UseStreamEffector   = false;
        }


        // Weight
        if (chain.weight.useAnimatorProperty && chain.weight.propertyName != "")
        {
            m_AnimatorWeight      = animator.BindStreamProperty(animator.transform, typeof(Animator), chain.weight.propertyName);
            m_UseAnimatorProperty = true;
        }

        m_WeightHandle         = animator.BindSceneProperty(animator.transform, componentType, weightProperty);
        m_AnimatorWeightOffset = animator.BindSceneProperty(animator.transform, componentType, weightOffsetProperty);


        // Driven
        m_IkType = chain.driven.type;

        if (m_IkType == IkType.Generic)
        {
            var end   = chain.driven.genericEndJoint;
            var mid   = end.parent;
            var start = mid.parent;

            m_StartHandle = animator.BindStreamTransform(start);
            m_MidHandle   = animator.BindStreamTransform(mid);
            m_EndHandle   = animator.BindStreamTransform(end);
        }
        else
        {
            m_HumanLimb = chain.driven.humanoidLimb;
        }

        return(true);
    }
 protected override Validation <string, PickupAction> CreateService(
     string key, string displayName, ILoggerFactory loggerFactory)
 {
     return(new PickupAction(
                key,
                displayName,
                toSet(Optional(Tags).Flatten()),
                IkChain.TrimToOption(),
                AnimatorPath.TrimToOption(),
                StatesPath.TrimToOption(),
                ActionState.TrimToOption(),
                Active,
                loggerFactory)
     {
         PickupDistance = PickupDistance,
         Animation = Animation
     });
 }
Exemple #4
0
        internal void DrawIKChain(Transform[] boneFinalPos, Transform[] boneLocalBone, IkChain singleIkChain, Color color)
        {
            //disable zbuffer
            device.DepthStencilState = DepthStencilState.None;

            int BoneCount = singleIkChain.IkNodeCount;

            for (int i = 0; i < BoneCount; i++)
            {
                Vector3 dir = new Vector3(0, 0, 1);
                //draw ball
                DrawSphere(boneFinalPos[singleIkChain.IkNodes[i]].Pos, color);
                //if it has a child
                if (i < BoneCount - 1)
                {
                    //dir = boneLocalBone[i + 1].Pos - boneLocalBone[i].Pos;

                    DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Pos,
                             boneFinalPos[singleIkChain.IkNodes[i + 1]].Pos, color);

                    //dir
                    dir = Vector3.Transform(dir, boneFinalPos[singleIkChain.IkNodes[i]].Rot);
                    DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Pos,
                             boneFinalPos[singleIkChain.IkNodes[i]].Pos + dir, Color.Red);
                }
                else
                {
                    //DrawLine(boneFinalPos[singleIkChain.IkNodes[i]].Translation,
                    //boneFinalPos[singleIkChain.IkTarget].Translation, color);
                }
            }
            DrawSphere(boneFinalPos[singleIkChain.IkTarget].Pos, Color.Black);
            //enable zbuffer test
            device.DepthStencilState = DepthStencilState.Default;
        }