public static void InitIKTarget(OCIChar _ociChar, bool _addInfo)
        {
            IKSolverFullBodyBiped solver     = (IKSolverFullBodyBiped)_ociChar.finalIK.solver;
            BipedReferences       references = (BipedReferences)_ociChar.finalIK.references;

            _ociChar.ikCtrl = _ociChar.preparation.IKCtrl;
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 0, solver.get_bodyEffector(), false, (Transform)references.pelvis);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 1, solver.get_leftShoulderEffector(), false, (Transform)references.leftUpperArm);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 2, solver.get_leftArmChain(), false, (Transform)references.leftForearm);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 3, solver.get_leftHandEffector(), true, (Transform)references.leftHand);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 4, solver.get_rightShoulderEffector(), false, (Transform)references.rightUpperArm);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 5, solver.get_rightArmChain(), false, (Transform)references.rightForearm);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 6, solver.get_rightHandEffector(), true, (Transform)references.rightHand);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 7, solver.get_leftThighEffector(), false, (Transform)references.leftThigh);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 8, solver.get_leftLegChain(), false, (Transform)references.leftCalf);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 9, solver.get_leftFootEffector(), true, (Transform)references.leftFoot);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 10, solver.get_rightThighEffector(), false, (Transform)references.rightThigh);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 11, solver.get_rightLegChain(), false, (Transform)references.rightCalf);
            AddObjectAssist.AddIKTarget(_ociChar, _ociChar.ikCtrl, 12, solver.get_rightFootEffector(), true, (Transform)references.rightFoot);
            if (!_addInfo)
            {
                return;
            }
            _ociChar.ikCtrl.InitTarget();
        }
        private static void ArrangeNamesLoop(Transform _target)
        {
            string name = ((Object)_target).get_name();

            if (Regex.Match(name, "c_J_hairF[CLRU]+[a-b]_(\\d*)", RegexOptions.IgnoreCase).Success)
            {
                ((Object)_target).set_name(name.Replace("c_J_hairF", "c_J_hair_F"));
            }
            else if (Regex.Match(name, "c_J_hairB[CLRU]+[a-b]_(\\d*)", RegexOptions.IgnoreCase).Success)
            {
                ((Object)_target).set_name(name.Replace("c_J_hairB", "c_J_hair_B"));
            }
            if (_target.get_childCount() == 0)
            {
                return;
            }
            IEnumerator enumerator = _target.GetEnumerator();

            try
            {
                while (enumerator.MoveNext())
                {
                    AddObjectAssist.ArrangeNamesLoop((Transform)enumerator.Current);
                }
            }
            finally
            {
                if (enumerator is IDisposable disposable)
                {
                    disposable.Dispose();
                }
            }
        }
Exemple #3
0
        public void Duplicate()
        {
            Dictionary <int, ObjectInfo> _dicObject = new Dictionary <int, ObjectInfo>();
            Dictionary <int, Studio.Studio.DuplicateParentInfo> dictionary = new Dictionary <int, Studio.Studio.DuplicateParentInfo>();

            TreeNodeObject[] selectNodes = this.treeNodeCtrl.selectNodes;
            for (int index = 0; index < selectNodes.Length; ++index)
            {
                this.SavePreprocessingLoop(selectNodes[index]);
                ObjectCtrlInfo objectCtrlInfo = (ObjectCtrlInfo)null;
                if (this.dicInfo.TryGetValue(selectNodes[index], out objectCtrlInfo))
                {
                    _dicObject.Add(objectCtrlInfo.objectInfo.dicKey, objectCtrlInfo.objectInfo);
                    if (objectCtrlInfo.parentInfo != null)
                    {
                        dictionary.Add(objectCtrlInfo.objectInfo.dicKey, new Studio.Studio.DuplicateParentInfo(objectCtrlInfo.parentInfo, objectCtrlInfo.treeNodeObject.parent));
                    }
                }
            }
            if (_dicObject.Count == 0)
            {
                return;
            }
            byte[] buffer = (byte[])null;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (BinaryWriter _writer = new BinaryWriter((Stream)memoryStream))
                {
                    this.sceneInfo.Save(_writer, _dicObject);
                    buffer = memoryStream.ToArray();
                }
            }
            using (MemoryStream memoryStream = new MemoryStream(buffer))
            {
                using (BinaryReader _reader = new BinaryReader((Stream)memoryStream))
                    this.sceneInfo.Import(_reader, this.sceneInfo.version);
            }
            foreach (KeyValuePair <int, ObjectInfo> keyValuePair in this.sceneInfo.dicImport)
            {
                Studio.Studio.DuplicateParentInfo duplicateParentInfo = (Studio.Studio.DuplicateParentInfo)null;
                if (dictionary.TryGetValue(this.sceneInfo.dicChangeKey[keyValuePair.Key], out duplicateParentInfo))
                {
                    AddObjectAssist.LoadChild(keyValuePair.Value, duplicateParentInfo.info, duplicateParentInfo.node);
                }
                else
                {
                    AddObjectAssist.LoadChild(keyValuePair.Value, (ObjectCtrlInfo)null, (TreeNodeObject)null);
                }
            }
            if (this._routeControl.visible)
            {
                this._routeControl.Init();
            }
            this.treeNodeCtrl.RefreshHierachy();
            this._cameraSelector.Init();
        }
 public static void LoadChild(
     List <ObjectInfo> _child,
     ObjectCtrlInfo _parent,
     TreeNodeObject _parentNode)
 {
     foreach (ObjectInfo _child1 in _child)
     {
         AddObjectAssist.LoadChild(_child1, _parent, _parentNode);
     }
 }
 public static void LoadChild(
     Dictionary <int, ObjectInfo> _child,
     ObjectCtrlInfo _parent     = null,
     TreeNodeObject _parentNode = null)
 {
     foreach (KeyValuePair <int, ObjectInfo> keyValuePair in _child)
     {
         AddObjectAssist.LoadChild(keyValuePair.Value, _parent, _parentNode);
     }
 }
Exemple #6
0
 public bool ImportScene(string _path)
 {
     if (!File.Exists(_path) || !this.sceneInfo.Import(_path))
     {
         return(false);
     }
     AddObjectAssist.LoadChild(this.sceneInfo.dicImport, (ObjectCtrlInfo)null, (TreeNodeObject)null);
     this.treeNodeCtrl.RefreshHierachy();
     this._cameraSelector.Init();
     return(true);
 }
 private static void TransformLoop(Transform _src, List <Transform> _list)
 {
     if (Object.op_Equality((Object)_src, (Object)null))
     {
         return;
     }
     _list.Add(_src);
     for (int index = 0; index < _src.get_childCount(); ++index)
     {
         AddObjectAssist.TransformLoop(_src.GetChild(index), _list);
     }
 }
Exemple #8
0
        public static OCIRoute Load(
            OIRouteInfo _info,
            ObjectCtrlInfo _parent,
            TreeNodeObject _parentNode)
        {
            ChangeAmount _source  = _info.changeAmount.Clone();
            OCIRoute     ociRoute = AddObjectRoute.Load(_info, _parent, _parentNode, false, -1);

            _info.changeAmount.Copy(_source, true, true, true);
            AddObjectAssist.LoadChild(_info.child, (ObjectCtrlInfo)ociRoute, (TreeNodeObject)null);
            return(ociRoute);
        }
        public static OCIItem Load(
            OIItemInfo _info,
            ObjectCtrlInfo _parent,
            TreeNodeObject _parentNode)
        {
            ChangeAmount _source = _info.changeAmount.Clone();
            OCIItem      ociItem = AddObjectItem.Load(_info, _parent, _parentNode, false, -1);

            _info.changeAmount.Copy(_source, true, true, true);
            AddObjectAssist.LoadChild(_info.child, (ObjectCtrlInfo)ociItem, (TreeNodeObject)null);
            return(ociItem);
        }
Exemple #10
0
        public static OCIFolder Load(
            OIFolderInfo _info,
            ObjectCtrlInfo _parent,
            TreeNodeObject _parentNode)
        {
            ChangeAmount _source   = _info.changeAmount.Clone();
            OCIFolder    ociFolder = AddObjectFolder.Load(_info, _parent, _parentNode, false, -1);

            _info.changeAmount.Copy(_source, true, true, true);
            AddObjectAssist.LoadChild(_info.child, (ObjectCtrlInfo)ociFolder, (TreeNodeObject)null);
            return(ociFolder);
        }
 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);
 }
 private static OCIChar.IKInfo AddIKTarget(
     OCIChar _ociChar,
     IKCtrl _ikCtrl,
     int _no,
     IKEffector _effector,
     bool _usedRot,
     Transform _bone)
 {
     OCIChar.IKInfo ikInfo = AddObjectAssist.AddIKTarget(_ociChar, _ikCtrl, _no, (Transform)_effector.target, _usedRot, _bone, true);
     _effector.positionWeight = (__Null)1.0;
     _effector.rotationWeight = !_usedRot ? (__Null)0.0 : (__Null)1.0;
     _effector.target         = (__Null)ikInfo.targetObject;
     return(ikInfo);
 }
        public static OCICharFemale Load(
            OICharInfo _info,
            ObjectCtrlInfo _parent,
            TreeNodeObject _parentNode)
        {
            OCICharFemale ociCharFemale = AddObjectFemale.Add(Singleton <Character> .Instance.CreateChara((byte)1, Singleton <Scene> .Instance.commonSpace, -1, _info.charFile), _info, _parent, _parentNode, false, -1);

            foreach (KeyValuePair <int, List <ObjectInfo> > keyValuePair in _info.child)
            {
                KeyValuePair <int, List <ObjectInfo> > v = keyValuePair;
                AddObjectAssist.LoadChild(v.Value, (ObjectCtrlInfo)ociCharFemale, ociCharFemale.dicAccessoryPoint.First <KeyValuePair <TreeNodeObject, int> >((Func <KeyValuePair <TreeNodeObject, int>, bool>)(x => x.Value == v.Key)).Key);
            }
            return(ociCharFemale);
        }
        public static void ArrangeNames(Transform _target)
        {
            IEnumerator enumerator = _target.GetEnumerator();

            try
            {
                while (enumerator.MoveNext())
                {
                    AddObjectAssist.ArrangeNamesLoop((Transform)enumerator.Current);
                }
            }
            finally
            {
                if (enumerator is IDisposable disposable)
                {
                    disposable.Dispose();
                }
            }
        }
Exemple #15
0
        public bool LoadScene(string _path)
        {
            if (!File.Exists(_path))
            {
                return(false);
            }
            this.InitScene(false);
            this.sceneInfo = new SceneInfo();
            if (!this.sceneInfo.Load(_path))
            {
                return(false);
            }
            AddObjectAssist.LoadChild(this.sceneInfo.dicObject, (ObjectCtrlInfo)null, (TreeNodeObject)null);
            ChangeAmount _source = this.sceneInfo.caMap.Clone();

            this.AddMap(this.sceneInfo.map, false, false, true);
            this.mapList.UpdateInfo();
            this.sceneInfo.caMap.Copy(_source, true, true, true);
            Singleton <MapCtrl> .Instance.Reflect();

            this.bgmCtrl.Play(this.bgmCtrl.no);
            this.envCtrl.Play(this.envCtrl.no);
            this.outsideSoundCtrl.Play(this.outsideSoundCtrl.fileName);
            this.m_BackgroundCtrl.Load(this.sceneInfo.background);
            this.m_BackgroundList.UpdateUI();
            this._frameCtrl.Load(this.sceneInfo.frame);
            this._frameList.UpdateUI();
            this.m_SystemButtonCtrl.UpdateInfo();
            this.treeNodeCtrl.RefreshHierachy();
            if (this.sceneInfo.cameraSaveData != null)
            {
                this.m_CameraCtrl.Import(this.sceneInfo.cameraSaveData);
            }
            this.cameraLightCtrl.Reflect();
            this._cameraSelector.Init();
            this.sceneInfo.dataVersion = this.sceneInfo.version;
            this.rootButtonCtrl.OnClick(-1);
            return(true);
        }
        public static void InitHairBone(OCIChar _ociChar, Dictionary <int, Info.BoneInfo> _dicBoneInfo)
        {
            GameObject referenceInfo = _ociChar.charReference.GetReferenceInfo(ChaReference.RefObjKey.HeadParent);
            Dictionary <int, OCIChar.BoneInfo> dictionary = new Dictionary <int, OCIChar.BoneInfo>();

            foreach (KeyValuePair <int, Info.BoneInfo> keyValuePair in _dicBoneInfo.Where <KeyValuePair <int, Info.BoneInfo> >((Func <KeyValuePair <int, Info.BoneInfo>, bool>)(b => MathfEx.RangeEqualOn <int>(7, b.Value.group, 9))))
            {
                GameObject loop = referenceInfo.get_transform().FindLoop(keyValuePair.Value.bone);
                if (!Object.op_Equality((Object)loop, (Object)null))
                {
                    OCIChar.BoneInfo boneInfo1 = (OCIChar.BoneInfo)null;
                    if (dictionary.TryGetValue(keyValuePair.Value.sync, out boneInfo1))
                    {
                        boneInfo1.AddSyncBone(loop);
                    }
                    else
                    {
                        OIBoneInfo _boneInfo = (OIBoneInfo)null;
                        if (!_ociChar.oiCharInfo.bones.TryGetValue(keyValuePair.Key, out _boneInfo))
                        {
                            _boneInfo = new OIBoneInfo(Studio.Studio.GetNewIndex());
                            _ociChar.oiCharInfo.bones.Add(keyValuePair.Key, _boneInfo);
                        }
                        _boneInfo.group = OIBoneInfo.BoneGroup.Hair;
                        _boneInfo.level = keyValuePair.Value.level;
                        GuideObject      _guideObject = AddObjectAssist.AddBoneGuide(loop.get_transform(), _boneInfo.dicKey, _ociChar.guideObject, keyValuePair.Value.name);
                        OCIChar.BoneInfo boneInfo2    = new OCIChar.BoneInfo(_guideObject, _boneInfo, keyValuePair.Key);
                        _ociChar.listBones.Add(boneInfo2);
                        _guideObject.SetActive(false, true);
                        if (keyValuePair.Value.sync != -1)
                        {
                            dictionary.Add(keyValuePair.Key, boneInfo2);
                        }
                    }
                }
            }
            _ociChar.UpdateFKColor(OIBoneInfo.BoneGroup.Hair);
        }
        private static OCICharFemale Add(
            ChaControl _female,
            OICharInfo _info,
            ObjectCtrlInfo _parent,
            TreeNodeObject _parentNode,
            bool _addInfo,
            int _initialPosition)
        {
            OCICharFemale ociCharFemale = new OCICharFemale();
            ChaFileStatus _status       = new ChaFileStatus();

            _status.Copy(_female.fileStatus);
            _female.ChangeNowCoordinate(false, true);
            _female.Load(true);
            _female.InitializeExpression(1, true);
            ociCharFemale.charInfo         = _female;
            ociCharFemale.charReference    = (ChaReference)_female;
            ociCharFemale.preparation      = (Preparation)_female.objAnim.GetComponent <Preparation>();
            ociCharFemale.finalIK          = _female.fullBodyIK;
            ociCharFemale.charInfo.hideMoz = false;
            for (int index = 0; index < 2; ++index)
            {
                GameObject gameObject = _female.objHair.SafeGet <GameObject>(index);
                if (Object.op_Inequality((Object)gameObject, (Object)null))
                {
                    AddObjectAssist.ArrangeNames(gameObject.get_transform());
                }
            }
            AddObjectAssist.SetupAccessoryDynamicBones((OCIChar)ociCharFemale);
            AddObjectAssist.DisableComponent((OCIChar)ociCharFemale);
            ociCharFemale.objectInfo = (ObjectInfo)_info;
            GuideObject guideObject = Singleton <GuideObjectManager> .Instance.Add(((Component)_female).get_transform(), _info.dicKey);

            guideObject.scaleSelect   = 0.1f;
            guideObject.scaleRot      = 0.05f;
            guideObject.isActiveFunc += new GuideObject.IsActiveFunc(((ObjectCtrlInfo)ociCharFemale).OnSelect);
            guideObject.SetVisibleCenter(true);
            ociCharFemale.guideObject               = guideObject;
            ociCharFemale.optionItemCtrl            = (OptionItemCtrl)((Component)_female).get_gameObject().AddComponent <OptionItemCtrl>();
            ociCharFemale.optionItemCtrl.animator   = _female.animBody;
            ociCharFemale.optionItemCtrl.oiCharInfo = _info;
            _info.changeAmount.onChangeScale       += new Action <Vector3>(ociCharFemale.optionItemCtrl.ChangeScale);
            ociCharFemale.charAnimeCtrl             = ociCharFemale.preparation?.CharAnimeCtrl;
            if (Object.op_Implicit((Object)ociCharFemale.charAnimeCtrl))
            {
                ociCharFemale.charAnimeCtrl.oiCharInfo = _info;
            }
            ociCharFemale.yureCtrl = ociCharFemale.preparation.YureCtrl;
            ociCharFemale.yureCtrl.Init((OCIChar)ociCharFemale);
            if (_info.animeInfo.group == 0 && _info.animeInfo.category == 2 && _info.animeInfo.no == 11)
            {
                int   group               = _info.animeInfo.group;
                int   category            = _info.animeInfo.category;
                int   no                  = _info.animeInfo.no;
                float animeNormalizedTime = _info.animeNormalizedTime;
                ociCharFemale.LoadAnime(0, 1, 0, 0.0f);
                _female.animBody.Update(0.0f);
                _info.animeInfo.group     = group;
                _info.animeInfo.category  = category;
                _info.animeInfo.no        = no;
                _info.animeNormalizedTime = animeNormalizedTime;
            }
            IKSolver ikSolver = ((IK)ociCharFemale.finalIK).GetIKSolver();

            if (!ikSolver.get_initiated())
            {
                ikSolver.Initiate(((Component)ociCharFemale.finalIK).get_transform());
            }
            if (_addInfo)
            {
                Studio.Studio.AddInfo((ObjectInfo)_info, (ObjectCtrlInfo)ociCharFemale);
            }
            else
            {
                Studio.Studio.AddObjectCtrlInfo((ObjectCtrlInfo)ociCharFemale);
            }
            TreeNodeObject _parent1       = !Object.op_Inequality((Object)_parentNode, (Object)null) ? (_parent == null ? (TreeNodeObject)null : _parent.treeNodeObject) : _parentNode;
            TreeNodeObject treeNodeObject = Studio.Studio.AddNode(_info.charFile.parameter.fullname, _parent1);

            treeNodeObject.enableChangeParent      = true;
            treeNodeObject.treeState               = _info.treeState;
            treeNodeObject.onVisible              += new TreeNodeObject.OnVisibleFunc(((ObjectCtrlInfo)ociCharFemale).OnVisible);
            treeNodeObject.enableVisible           = true;
            treeNodeObject.visible                 = _info.visible;
            guideObject.guideSelect.treeNodeObject = treeNodeObject;
            ociCharFemale.treeNodeObject           = treeNodeObject;
            _info.changeAmount.OnChange();
            AddObjectAssist.InitBone((OCIChar)ociCharFemale, _female.objBodyBone.get_transform(), Singleton <Info> .Instance.dicBoneInfo);
            AddObjectAssist.InitIKTarget((OCIChar)ociCharFemale, _addInfo);
            AddObjectAssist.InitLookAt((OCIChar)ociCharFemale);
            AddObjectAssist.InitAccessoryPoint((OCIChar)ociCharFemale);
            ociCharFemale.voiceCtrl.ociChar = (OCIChar)ociCharFemale;
            ociCharFemale.InitKinematic(((Component)_female).get_gameObject(), ociCharFemale.finalIK, _female.neckLookCtrl, (DynamicBone[])null, AddObjectFemale.GetSkirtDynamic(_female.objClothes));
            treeNodeObject.enableAddChild = false;
            Studio.Studio.AddCtrlInfo((ObjectCtrlInfo)ociCharFemale);
            _parent?.OnLoadAttach(!Object.op_Inequality((Object)_parentNode, (Object)null) ? _parent.treeNodeObject : _parentNode, (ObjectCtrlInfo)ociCharFemale);
            if (_initialPosition == 1)
            {
                _info.changeAmount.pos = Singleton <Studio.Studio> .Instance.cameraCtrl.targetPos;
            }
            ociCharFemale.LoadAnime(_info.animeInfo.group, _info.animeInfo.category, _info.animeInfo.no, _info.animeNormalizedTime);
            for (int index = 0; index < 5; ++index)
            {
                ociCharFemale.ActiveIK((OIBoneInfo.BoneGroup)(1 << index), _info.activeIK[index], false);
            }
            ociCharFemale.ActiveKinematicMode(OICharInfo.KinematicMode.IK, _info.enableIK, true);
            // ISSUE: object of a compiler-generated type is created
            foreach (\u003C\u003E__AnonType18 <OIBoneInfo.BoneGroup, int> anonType18 in ((IEnumerable <OIBoneInfo.BoneGroup>)FKCtrl.parts).Select <OIBoneInfo.BoneGroup, \u003C\u003E__AnonType18 <OIBoneInfo.BoneGroup, int> >((Func <OIBoneInfo.BoneGroup, int, \u003C\u003E__AnonType18 <OIBoneInfo.BoneGroup, int> >)((p, i) => new \u003C\u003E__AnonType18 <OIBoneInfo.BoneGroup, int>(p, i))))
            {
                ociCharFemale.ActiveFK(anonType18.p, ociCharFemale.oiCharInfo.activeFK[anonType18.i], false);
            }
            ociCharFemale.ActiveKinematicMode(OICharInfo.KinematicMode.FK, _info.enableFK, true);
            for (int categoryNo = 0; categoryNo < _info.expression.Length; ++categoryNo)
            {
                ociCharFemale.charInfo.EnableExpressionCategory(categoryNo, _info.expression[categoryNo]);
            }
            ociCharFemale.animeSpeed        = ociCharFemale.animeSpeed;
            ociCharFemale.animeOptionParam1 = ociCharFemale.animeOptionParam1;
            ociCharFemale.animeOptionParam2 = ociCharFemale.animeOptionParam2;
            foreach (byte num in _female.fileStatus.siruLv)
            {
                num = (byte)0;
            }
            _status.visibleSonAlways = _info.visibleSon;
            ociCharFemale.SetSonLength(_info.sonLength);
            ociCharFemale.SetVisibleSimple(_info.visibleSimple);
            ociCharFemale.SetSimpleColor(_info.simpleColor);
            AddObjectAssist.UpdateState((OCIChar)ociCharFemale, _status);
            return(ociCharFemale);
        }
        public static void InitBone(
            OCIChar _ociChar,
            Transform _transformRoot,
            Dictionary <int, Info.BoneInfo> _dicBoneInfo)
        {
            Dictionary <int, OCIChar.BoneInfo> dictionary = new Dictionary <int, OCIChar.BoneInfo>();

            foreach (KeyValuePair <int, Info.BoneInfo> keyValuePair in _dicBoneInfo)
            {
                if (_ociChar.sex != 1 || keyValuePair.Value.level != 2)
                {
                    GameObject loop;
                    switch (keyValuePair.Value.group)
                    {
                    case 7:
                    case 8:
                    case 9:
                        loop = _ociChar.charReference.GetReferenceInfo(ChaReference.RefObjKey.HeadParent).get_transform().FindLoop(keyValuePair.Value.bone);
                        break;

                    default:
                        loop = _transformRoot.FindLoop(keyValuePair.Value.bone);
                        if (Object.op_Equality((Object)loop, (Object)null))
                        {
                            Debug.LogWarning((object)keyValuePair.Value.bone);
                            break;
                        }
                        break;
                    }
                    if (!Object.op_Equality((Object)loop, (Object)null))
                    {
                        OCIChar.BoneInfo boneInfo1 = (OCIChar.BoneInfo)null;
                        if (dictionary.TryGetValue(keyValuePair.Value.sync, out boneInfo1))
                        {
                            boneInfo1.AddSyncBone(loop);
                        }
                        else
                        {
                            OIBoneInfo _boneInfo = (OIBoneInfo)null;
                            if (!_ociChar.oiCharInfo.bones.TryGetValue(keyValuePair.Key, out _boneInfo))
                            {
                                _boneInfo = new OIBoneInfo(Studio.Studio.GetNewIndex());
                                _ociChar.oiCharInfo.bones.Add(keyValuePair.Key, _boneInfo);
                            }
                            switch (keyValuePair.Value.group)
                            {
                            case 0:
                            case 1:
                            case 2:
                            case 3:
                            case 4:
                                _boneInfo.group = (OIBoneInfo.BoneGroup)(1 << keyValuePair.Value.group | 1);
                                break;

                            case 7:
                            case 8:
                            case 9:
                                _boneInfo.group = OIBoneInfo.BoneGroup.Hair;
                                break;

                            case 10:
                                _boneInfo.group = OIBoneInfo.BoneGroup.Neck;
                                break;

                            case 11:
                            case 12:
                                _boneInfo.group = OIBoneInfo.BoneGroup.Breast;
                                break;

                            case 13:
                                _boneInfo.group = OIBoneInfo.BoneGroup.Skirt;
                                break;

                            default:
                                _boneInfo.group = (OIBoneInfo.BoneGroup)(1 << keyValuePair.Value.group);
                                break;
                            }
                            _boneInfo.level = keyValuePair.Value.level;
                            GuideObject _guideObject = AddObjectAssist.AddBoneGuide(loop.get_transform(), _boneInfo.dicKey, _ociChar.guideObject, keyValuePair.Value.name);
                            switch (_boneInfo.group)
                            {
                            case OIBoneInfo.BoneGroup.RightHand:
                            case OIBoneInfo.BoneGroup.LeftHand:
                                _guideObject.scaleSelect = 0.025f;
                                break;
                            }
                            OCIChar.BoneInfo boneInfo2 = new OCIChar.BoneInfo(_guideObject, _boneInfo, keyValuePair.Key);
                            _ociChar.listBones.Add(boneInfo2);
                            _guideObject.SetActive(false, true);
                            if (keyValuePair.Value.no == 65)
                            {
                                _ociChar.transSon = loop.get_transform();
                            }
                            if (keyValuePair.Value.sync != -1)
                            {
                                dictionary.Add(keyValuePair.Key, boneInfo2);
                            }
                        }
                    }
                }
            }
            _ociChar.UpdateFKColor(FKCtrl.parts);
        }