Ejemplo n.º 1
0
 public PlayerHandBehaviours(PlayerBehaviours abb, PropHandler ph, FBIKChain hc, IKEffector iKEffector) : base(abb, ph)
 {
     handChain    = hc;
     hp           = ac.humanoidParts;
     handEffector = iKEffector;
     //Muscle handMuscle = ph.attachedMuscleGroup.muscles[ph.attachedMuscleGroup.muscles.Length - 1];// 最后一个位置即为 最末尾的 hand 的 muscle
 }
Ejemplo n.º 2
0
        static bool Prefix(MotionIKUI __instance, ChaControl _chara, Motion.IK _ik, FullBodyBipedIK _fullBodyIK, KinematicCtrl _kinematicCtrl, int _charaID)
        {
            if (_ik == null || _fullBodyIK == null || _kinematicCtrl == null)
            {
                return(false);
            }
            var hEditInstance = Singleton <HEditGlobal> .Instance;

            var nowPartCharaInfo = hEditInstance.nowPartCharaInfo;

            hEditInstance.nowPartCharaInfo = null;
            if (_ik.isUse)
            {
                _kinematicCtrl.Active(PoseInfo.ModeEN.IK, false);
            }

            var effectors = new IKEffector[] { _fullBodyIK.solver.bodyEffector,
                                               _fullBodyIK.solver.leftShoulderEffector, _fullBodyIK.solver.leftHandEffector,
                                               _fullBodyIK.solver.rightShoulderEffector, _fullBodyIK.solver.rightHandEffector,
                                               _fullBodyIK.solver.leftThighEffector, _fullBodyIK.solver.leftFootEffector,
                                               _fullBodyIK.solver.rightThighEffector, _fullBodyIK.solver.rightFootEffector };

            var chains = new FBIKChain[] { _fullBodyIK.solver.leftArmChain, _fullBodyIK.solver.rightArmChain,
                                           _fullBodyIK.solver.leftLegChain, _fullBodyIK.solver.rightLegChain };

            for (int i = 0; i < EffectorIndices.Length; i++)
            {
                var targetIndex = EffectorIndices[i];
                var effector    = effectors[i];
                var area        = _ik.areas[targetIndex];
                SetIKUse(__instance, targetIndex, effector, area.isUse, _kinematicCtrl, false);
                SetIKWeight(__instance, targetIndex, effector, area.isUse, area.weight, false);
                hEditInstance.SetIKParent(_chara, _kinematicCtrl, area.parentCharaID, area.parentArea, targetIndex);
                hEditInstance.SetIKPos(_kinematicCtrl.lstIKBone[targetIndex].changeAmount, area.amount);
            }

            for (int i = 0; i < ChainIndices.Length; i++)
            {
                var targetIndex = ChainIndices[i];
                var chain       = chains[i];
                var area        = _ik.areas[targetIndex];
                SetIKUse(__instance, targetIndex, chain, area.isUse, _kinematicCtrl, false);
                SetIKWeight(__instance, targetIndex, chain, area.isUse, area.weight, false);
                hEditInstance.SetIKParent(_chara, _kinematicCtrl, area.parentCharaID, area.parentArea, targetIndex);
                hEditInstance.SetIKPos(_kinematicCtrl.lstIKBone[targetIndex].changeAmount, area.amount);
            }

            if (!_ik.isUse)
            {
                _kinematicCtrl.Active(PoseInfo.ModeEN.None, false);
            }
            else if (__instance.CharaInfoData != null && __instance.CharaInfoData.useCharaID != _charaID)
            {
                hEditInstance.KinematicCtrlAllVisible(_kinematicCtrl, false);
            }
            hEditInstance.nowPartCharaInfo = nowPartCharaInfo;
            return(false);
        }
Ejemplo n.º 3
0
 private static OCIChar.IKInfo AddIKTarget(
     OCIChar _ociChar,
     IKCtrl _ikCtrl,
     int _no,
     FBIKChain _chain,
     bool _usedRot,
     Transform _bone)
 {
     OCIChar.IKInfo ikInfo = AddObjectAssist.AddIKTarget(_ociChar, _ikCtrl, _no, (Transform)((IKConstraintBend)_chain.bendConstraint).bendGoal, _usedRot, _bone, false);
     ((IKConstraintBend)_chain.bendConstraint).weight   = (__Null)1.0;
     ((IKConstraintBend)_chain.bendConstraint).bendGoal = (__Null)ikInfo.targetObject;
     return(ikInfo);
 }
Ejemplo n.º 4
0
            internal Limb(LimbName limbpart, GameObject anchorObj, Transform animPos, IKEffector effector, Transform origTarget,
                          BaseData targetBone, FBIKChain chain = null, BaseData parentJointBone = null, IKEffector parentJointEffector = null,
                          Transform parentJointAnimPos         = null, bool fix = false)
            {
                LimbPart   = limbpart;
                AnchorObj  = anchorObj;
                AnimPos    = animPos;
                Effector   = effector;
                Chain      = chain;
                OrigTarget = origTarget;
                TargetBone = targetBone;
                Fixed      = fix;

                ParentJointBone     = parentJointBone;
                ParentJointEffector = parentJointEffector;
                ParentJointAnimPos  = parentJointAnimPos;
            }
Ejemplo n.º 5
0
 private static void SetIKWeight(MotionIKUI instance, int area, FBIKChain chain, bool isOn, float value, bool isSave)
 {
     SetIKWeightChainMethod.Invoke(instance, new object[] { area, chain, isOn, value, isSave });
 }
Ejemplo n.º 6
0
 private static void SetIKUse(MotionIKUI instance, int area, FBIKChain chain, bool isOn, KinematicCtrl kinematicCtrl, bool isSave)
 {
     SetIKUseChainMethod.Invoke(instance, new object[] { area, chain, isOn, kinematicCtrl, isSave });
 }
Ejemplo n.º 7
0
            public static void Execute(FullBodyBipedIK ik, List <List <string> > dataList)
            {
                Transform[]           componentsInChildren = (Transform[])((Component)ik).GetComponentsInChildren <Transform>(true);
                int                   num1           = 0;
                List <List <string> > stringListList = dataList;
                int                   index1         = num1;
                int                   count1         = index1 + 1;
                List <string>         stringList1    = stringListList[index1];
                int                   num2           = 0;
                // ISSUE: variable of the null type
                __Null        solver1     = ik.solver;
                List <string> stringList2 = stringList1;
                int           index2      = num2;
                int           num3        = index2 + 1;
                double        num4        = (double)float.Parse(stringList2[index2]);

                ((IKSolver)solver1).IKPositionWeight = (__Null)num4;
                // ISSUE: variable of the null type
                __Null        solver2     = ik.solver;
                List <string> stringList3 = stringList1;
                int           index3      = num3;
                int           num5        = index3 + 1;
                int           num6        = int.Parse(stringList3[index3]);

                ((IKSolverFullBody)solver2).iterations = (__Null)num6;
                int num7 = 0;

                foreach (List <string> stringList4 in dataList.Skip <List <string> >(count1))
                {
                    if (((IKSolverFullBody)ik.solver).effectors.Length > num7)
                    {
                        ++num7;
                        int num8 = 0;
                        // ISSUE: variable of the null type
                        __Null                solver3           = ik.solver;
                        List <string>         stringList5       = stringList4;
                        int                   index4            = num8;
                        int                   num9              = index4 + 1;
                        FullBodyBipedEffector bodyBipedEffector = Illusion.Utils.Enum <FullBodyBipedEffector> .Cast(stringList5[index4]);

                        IKEffector eff = ((IKSolverFullBodyBiped)solver3).GetEffector(bodyBipedEffector);
                        if (eff != null)
                        {
                            IKEffector    ikEffector1 = eff;
                            List <string> stringList6 = stringList4;
                            int           index5      = num9;
                            int           num10       = index5 + 1;
                            double        num11       = (double)float.Parse(stringList6[index5]);
                            ikEffector1.positionWeight = (__Null)num11;
                            IKEffector    ikEffector2 = eff;
                            List <string> stringList7 = stringList4;
                            int           index6      = num10;
                            int           num12       = index6 + 1;
                            double        num13       = (double)float.Parse(stringList7[index6]);
                            ikEffector2.rotationWeight = (__Null)num13;
                            List <string> stringList8 = stringList4;
                            int           index7      = num12;
                            int           num14       = index7 + 1;
                            string        findFrame   = stringList8[index7];
                            if (findFrame == "null")
                            {
                                eff.target = null;
                            }
                            else
                            {
                                ((IEnumerable <Transform>)componentsInChildren).FirstOrDefault <Transform>((Func <Transform, bool>)(p => ((Object)p).get_name() == findFrame)).SafeProc <Transform>((Action <Transform>)(frame => eff.target = (__Null)frame));
                            }
                            if (Object.op_Inequality((Object)eff.target, (Object)null))
                            {
                                // ISSUE: variable of the null type
                                __Null        target1     = eff.target;
                                List <string> stringList9 = stringList4;
                                int           index8      = num14;
                                int           num15       = index8 + 1;
                                Vector3       vector3_1   = stringList9[index8].GetVector3();
                                ((Transform)target1).set_localPosition(vector3_1);
                                // ISSUE: variable of the null type
                                __Null        target2      = eff.target;
                                List <string> stringList10 = stringList4;
                                int           index9       = num15;
                                int           num16        = index9 + 1;
                                Vector3       vector3_2    = stringList10[index9].GetVector3();
                                ((Transform)target2).set_localEulerAngles(vector3_2);
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                int count2 = count1 + num7;
                int num17  = 0;

                foreach (List <string> stringList4 in dataList.Skip <List <string> >(count2))
                {
                    if (((IKSolverFullBody)ik.solver).chain.Length <= num17)
                    {
                        break;
                    }
                    FBIKChain     fbikChain1  = (FBIKChain)((IKSolverFullBody)ik.solver).chain[num17++];
                    int           num8        = 0;
                    FBIKChain     fbikChain2  = fbikChain1;
                    List <string> stringList5 = stringList4;
                    int           index4      = num8;
                    int           num9        = index4 + 1;
                    double        num10       = (double)float.Parse(stringList5[index4]);
                    fbikChain2.pull = (__Null)num10;
                    FBIKChain     fbikChain3  = fbikChain1;
                    List <string> stringList6 = stringList4;
                    int           index5      = num9;
                    int           num11       = index5 + 1;
                    double        num12       = (double)float.Parse(stringList6[index5]);
                    fbikChain3.reach = (__Null)num12;
                    FBIKChain     fbikChain4  = fbikChain1;
                    List <string> stringList7 = stringList4;
                    int           index6      = num11;
                    int           num13       = index6 + 1;
                    double        num14       = (double)float.Parse(stringList7[index6]);
                    fbikChain4.push = (__Null)num14;
                    FBIKChain     fbikChain5  = fbikChain1;
                    List <string> stringList8 = stringList4;
                    int           index7      = num13;
                    int           num15       = index7 + 1;
                    double        num16       = (double)float.Parse(stringList8[index7]);
                    fbikChain5.pushParent = (__Null)num16;
                    FBIKChain           fbikChain6  = fbikChain1;
                    List <string>       stringList9 = stringList4;
                    int                 index8      = num15;
                    int                 num18       = index8 + 1;
                    FBIKChain.Smoothing smoothing1  = Illusion.Utils.Enum <FBIKChain.Smoothing> .Cast(stringList9[index8]);

                    fbikChain6.reachSmoothing = (__Null)smoothing1;
                    FBIKChain           fbikChain7   = fbikChain1;
                    List <string>       stringList10 = stringList4;
                    int                 index9       = num18;
                    int                 num19        = index9 + 1;
                    FBIKChain.Smoothing smoothing2   = Illusion.Utils.Enum <FBIKChain.Smoothing> .Cast(stringList10[index9]);

                    fbikChain7.pushSmoothing = (__Null)smoothing2;
                    // ISSUE: variable of the null type
                    __Null        bendConstraint = fbikChain1.bendConstraint;
                    List <string> stringList11   = stringList4;
                    int           index10        = num19;
                    int           num20          = index10 + 1;
                    double        num21          = (double)float.Parse(stringList11[index10]);
                    ((IKConstraintBend)bendConstraint).weight = (__Null)num21;
                    List <string> stringList12 = stringList4;
                    int           index11      = num20;
                    int           num22        = index11 + 1;
                    string        findFrame    = stringList12[index11];
                    if (findFrame == "null")
                    {
                        ((IKConstraintBend)fbikChain1.bendConstraint).bendGoal = null;
                    }
                    else
                    {
                        ((IKConstraintBend)fbikChain1.bendConstraint).bendGoal = (__Null)((IEnumerable <Transform>)componentsInChildren).FirstOrDefault <Transform>((Func <Transform, bool>)(p => ((Object)p).get_name() == findFrame));
                    }
                    if (Object.op_Inequality((Object)((IKConstraintBend)fbikChain1.bendConstraint).bendGoal, (Object)null))
                    {
                        // ISSUE: variable of the null type
                        __Null        bendGoal1    = ((IKConstraintBend)fbikChain1.bendConstraint).bendGoal;
                        List <string> stringList13 = stringList4;
                        int           index12      = num22;
                        int           num23        = index12 + 1;
                        Vector3       vector3_1    = stringList13[index12].GetVector3();
                        ((Transform)bendGoal1).set_localPosition(vector3_1);
                        // ISSUE: variable of the null type
                        __Null        bendGoal2    = ((IKConstraintBend)fbikChain1.bendConstraint).bendGoal;
                        List <string> stringList14 = stringList4;
                        int           index13      = num23;
                        int           num24        = index13 + 1;
                        Vector3       vector3_2    = stringList14[index13].GetVector3();
                        ((Transform)bendGoal2).set_localEulerAngles(vector3_2);
                    }
                }
            }