// Token: 0x06000052 RID: 82 RVA: 0x000070F0 File Offset: 0x000052F0
 public static void Postfix(ItemFKCtrl __instance, OCIItem _ociItem, Info.ItemLoadInfo _loadInfo, bool _isNew)
 {
     try
     {
         IList list = (IList)__instance.GetPrivate("listBones");
         if (list.Count > 0)
         {
             FieldInfo  field  = list[0].GetType().GetField("changeAmount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);
             MethodInfo method = list[0].GetType().GetMethod("Update", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);
             foreach (object obj in list)
             {
                 ChangeAmount changeAmount = (ChangeAmount)field.GetValue(obj);
                 changeAmount.onChangeRot = (Action)Delegate.CreateDelegate(typeof(Action), obj, method);
                 changeAmount.onChangeRot();
             }
         }
     }
     catch (Exception)
     {
     }
 }
        private static Info.ItemLoadInfo GetLoadInfo(int _group, int _category, int _no)
        {
            Dictionary <int, Dictionary <int, Info.ItemLoadInfo> > dictionary1 = (Dictionary <int, Dictionary <int, Info.ItemLoadInfo> >)null;

            if (!Singleton <Info> .Instance.dicItemLoadInfo.TryGetValue(_group, out dictionary1))
            {
                return((Info.ItemLoadInfo)null);
            }
            Dictionary <int, Info.ItemLoadInfo> dictionary2 = (Dictionary <int, Info.ItemLoadInfo>)null;

            if (!dictionary1.TryGetValue(_category, out dictionary2))
            {
                return((Info.ItemLoadInfo)null);
            }
            Info.ItemLoadInfo itemLoadInfo = (Info.ItemLoadInfo)null;
            if (dictionary2.TryGetValue(_no, out itemLoadInfo))
            {
                return(itemLoadInfo);
            }
            Debug.LogWarning((object)string.Format("存在しない番号[{0}]", (object)_no));
            return((Info.ItemLoadInfo)null);
        }
示例#3
0
        public void InitBone(OCIItem _ociItem, Info.ItemLoadInfo _loadInfo, bool _isNew)
        {
            Transform transform = _ociItem.objectItem.get_transform();

            _ociItem.listBones = new List <OCIChar.BoneInfo>();
            foreach (string bone in _loadInfo.bones)
            {
                GameObject loop = transform.FindLoop(bone);
                if (Object.op_Equality((Object)loop, (Object)null))
                {
                    Debug.LogWarning((object)string.Format("無い : {0}", (object)bone));
                }
                else
                {
                    OIBoneInfo _boneInfo = (OIBoneInfo)null;
                    if (!_ociItem.itemInfo.bones.TryGetValue(bone, out _boneInfo))
                    {
                        _boneInfo = new OIBoneInfo(Studio.Studio.GetNewIndex());
                        _ociItem.itemInfo.bones.Add(bone, _boneInfo);
                    }
                    GuideObject _guideObject = Singleton <GuideObjectManager> .Instance.Add(loop.get_transform(), _boneInfo.dicKey);

                    _guideObject.enablePos    = false;
                    _guideObject.enableScale  = false;
                    _guideObject.enableMaluti = false;
                    _guideObject.calcScale    = false;
                    _guideObject.scaleRate    = 0.5f;
                    _guideObject.scaleRot     = 0.025f;
                    _guideObject.scaleSelect  = 0.05f;
                    _guideObject.parentGuide  = _ociItem.guideObject;
                    _ociItem.listBones.Add(new OCIChar.BoneInfo(_guideObject, _boneInfo, -1));
                    _guideObject.SetActive(false, true);
                    this.listBones.Add(new ItemFKCtrl.TargetInfo(loop, _boneInfo.changeAmount, _isNew));
                }
            }
            this.count = this.listBones.Count;
        }
        // Token: 0x06000051 RID: 81 RVA: 0x00006D0C File Offset: 0x00004F0C
        public static bool Prefix(ItemFKCtrl __instance, OCIItem _ociItem, Info.ItemLoadInfo _loadInfo, bool _isNew)
        {
            bool result;

            try
            {
                if ((_loadInfo != null && _loadInfo.bones.Count > 0) ||
                    (_ociItem.animator != null && _ociItem.animator.enabled))
                {
                    result = true;
                }
                else
                {
                    Transform           transform = _ociItem.objectItem.transform;
                    HashSet <Transform> hashSet   = new HashSet <Transform>();
                    foreach (Renderer renderer in transform.GetComponentsInChildren <Renderer>(true))
                    {
                        SkinnedMeshRenderer skinnedMeshRenderer;
                        if ((skinnedMeshRenderer = (renderer as SkinnedMeshRenderer)) != null)
                        {
                            foreach (Transform transform2 in skinnedMeshRenderer.bones)
                            {
                                if (!(transform2 == null) && !hashSet.Contains(transform2) && !(transform2 == transform))
                                {
                                    hashSet.Add(transform2);
                                }
                            }
                        }
                        else if (renderer is MeshRenderer && !hashSet.Contains(renderer.transform))
                        {
                            if (!renderer.name.Substring(0, renderer.name.Length - 1).EndsWith("MeshPart"))
                            {
                                if (renderer.transform != transform)
                                {
                                    hashSet.Add(renderer.transform);
                                }
                            }
                            else if (!hashSet.Contains(renderer.transform.parent) && renderer.transform.parent != transform)
                            {
                                hashSet.Add(renderer.transform.parent);
                            }
                        }
                    }
                    _ociItem.listBones = new List <OCIChar.BoneInfo>();
                    IList           list        = (IList)__instance.GetPrivate("listBones");
                    ConstructorInfo constructor = list.GetType().GetGenericArguments()[0].GetConstructor(new Type[]
                    {
                        typeof(GameObject),
                        typeof(ChangeAmount),
                        typeof(bool)
                    });
                    int num = 0;
                    foreach (Transform transform3 in hashSet)
                    {
                        OIBoneInfo oiboneInfo = null;
                        string     pathFrom   = transform3.GetPathFrom(transform);
                        if (!_ociItem.itemInfo.bones.TryGetValue(pathFrom, out oiboneInfo))
                        {
                            oiboneInfo = new OIBoneInfo(Studio.Studio.GetNewIndex())
                            {
                                changeAmount =
                                {
                                    pos   = transform3.localPosition,
                                    rot   = transform3.localEulerAngles,
                                    scale = transform3.localScale
                                }
                            };
                            _ociItem.itemInfo.bones.Add(pathFrom, oiboneInfo);
                        }
                        GuideObject guideObject = Singleton <GuideObjectManager> .Instance.Add(transform3, oiboneInfo.dicKey);

                        guideObject.enablePos    = false;
                        guideObject.enableScale  = false;
                        guideObject.enableMaluti = false;
                        guideObject.calcScale    = false;
                        guideObject.scaleRate    = 0.5f;
                        guideObject.scaleRot     = 0.025f;
                        guideObject.scaleSelect  = 0.05f;
                        guideObject.parentGuide  = _ociItem.guideObject;
                        _ociItem.listBones.Add(new OCIChar.BoneInfo(guideObject, oiboneInfo));
                        guideObject.SetActive(false, true);
                        object value = constructor.Invoke(new object[]
                        {
                            transform3.gameObject,
                            oiboneInfo.changeAmount,
                            _isNew
                        });
                        list.Add(value);
                        num++;
                    }
                    __instance.GetType().GetProperty("count", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).SetValue(__instance, num, null);
                    if (_isNew)
                    {
                        __instance.ExecuteDelayed(delegate
                        {
                            _ociItem.ActiveFK(false);
                        }, 1);
                    }
                    else
                    {
                        __instance.ExecuteDelayed(delegate
                        {
                            _ociItem.ActiveFK(_ociItem.itemFKCtrl.enabled);
                        }, 1);
                    }
                    result = false;
                }
            }
            catch (Exception)
            {
                result = false;
            }
            return(result);
        }
        public static OCIItem Load(
            OIItemInfo _info,
            ObjectCtrlInfo _parent,
            TreeNodeObject _parentNode,
            bool _addInfo,
            int _initialPosition)
        {
            OCIItem _ociItem = new OCIItem();

            Info.ItemLoadInfo loadInfo = AddObjectItem.GetLoadInfo(_info.group, _info.category, _info.no);
            if (loadInfo == null)
            {
                Debug.LogWarningFormat("存在しない : G[{0}] : C[{1}] : N[{2}]", new object[3]
                {
                    (object)_info.group,
                    (object)_info.category,
                    (object)_info.no
                });
                loadInfo = AddObjectItem.GetLoadInfo(0, 0, 399);
            }
            _ociItem.objectInfo = (ObjectInfo)_info;
            GameObject gameObject = CommonLib.LoadAsset <GameObject>(loadInfo.bundlePath, loadInfo.fileName, true, loadInfo.manifest);

            if (Object.op_Equality((Object)gameObject, (Object)null))
            {
                Debug.LogError((object)string.Format("読み込み失敗 : {0} : {1} : {2}", (object)loadInfo.manifest, (object)loadInfo.bundlePath, (object)loadInfo.fileName));
                Studio.Studio.DeleteIndex(_info.dicKey);
                return((OCIItem)null);
            }
            gameObject.get_transform().SetParent(Singleton <Scene> .Instance.commonSpace.get_transform());
            _ociItem.objectItem    = gameObject;
            _ociItem.itemComponent = (ItemComponent)gameObject.GetComponent <ItemComponent>();
            _ociItem.arrayRender   = ((IEnumerable <Renderer>)gameObject.GetComponentsInChildren <Renderer>()).Where <Renderer>((Func <Renderer, bool>)(v => v.get_enabled())).ToArray <Renderer>();
            ParticleSystem[] componentsInChildren = (ParticleSystem[])gameObject.GetComponentsInChildren <ParticleSystem>();
            if (!((IList <ParticleSystem>)componentsInChildren).IsNullOrEmpty <ParticleSystem>())
            {
                _ociItem.arrayParticle = ((IEnumerable <ParticleSystem>)componentsInChildren).Where <ParticleSystem>((Func <ParticleSystem, bool>)(v => v.get_isPlaying())).ToArray <ParticleSystem>();
            }
            MeshCollider component = (MeshCollider)gameObject.GetComponent <MeshCollider>();

            if (Object.op_Implicit((Object)component))
            {
                ((Collider)component).set_enabled(false);
            }
            _ociItem.dynamicBones = (DynamicBone[])gameObject.GetComponentsInChildren <DynamicBone>();
            GuideObject guideObject = Singleton <GuideObjectManager> .Instance.Add(gameObject.get_transform(), _info.dicKey);

            guideObject.isActive      = false;
            guideObject.scaleSelect   = 0.1f;
            guideObject.scaleRot      = 0.05f;
            guideObject.isActiveFunc += new GuideObject.IsActiveFunc(((ObjectCtrlInfo)_ociItem).OnSelect);
            guideObject.enableScale   = !Object.op_Inequality((Object)_ociItem.itemComponent, (Object)null) || _ociItem.itemComponent.isScale;
            guideObject.SetVisibleCenter(true);
            _ociItem.guideObject = guideObject;
            if (Object.op_Inequality((Object)_ociItem.itemComponent, (Object)null) && Object.op_Inequality((Object)_ociItem.itemComponent.childRoot, (Object)null))
            {
                _ociItem.childRoot = _ociItem.itemComponent.childRoot;
            }
            if (Object.op_Equality((Object)_ociItem.childRoot, (Object)null))
            {
                _ociItem.childRoot = gameObject.get_transform();
            }
            _ociItem.animator = (Animator)gameObject.GetComponentInChildren <Animator>();
            if (Object.op_Implicit((Object)_ociItem.animator))
            {
                ((Behaviour)_ociItem.animator).set_enabled(Object.op_Inequality((Object)_ociItem.itemComponent, (Object)null) && _ociItem.itemComponent.isAnime);
            }
            if (Object.op_Inequality((Object)_ociItem.itemComponent, (Object)null))
            {
                _ociItem.itemComponent.SetGlass();
                _ociItem.itemComponent.SetEmission();
                if (_addInfo && _ociItem.itemComponent.check)
                {
                    Color[] defColorMain = _ociItem.itemComponent.defColorMain;
                    for (int index = 0; index < 3; ++index)
                    {
                        _info.colors[index].mainColor = defColorMain[index];
                    }
                    Color[] defColorPattern = _ociItem.itemComponent.defColorPattern;
                    for (int index = 0; index < 3; ++index)
                    {
                        _info.colors[index].pattern.color = defColorPattern[index];
                        _info.colors[index].metallic      = _ociItem.itemComponent.info[index].defMetallic;
                        _info.colors[index].glossiness    = _ociItem.itemComponent.info[index].defGlossiness;
                        _info.colors[index].pattern.clamp = _ociItem.itemComponent.info[index].defClamp;
                        _info.colors[index].pattern.uv    = _ociItem.itemComponent.info[index].defUV;
                        _info.colors[index].pattern.rot   = _ociItem.itemComponent.info[index].defRot;
                    }
                    _info.colors[3].mainColor = _ociItem.itemComponent.defGlass;
                    _info.emissionColor       = _ociItem.itemComponent.DefEmissionColor;
                    _info.emissionPower       = _ociItem.itemComponent.defEmissionStrength;
                    _info.lightCancel         = _ociItem.itemComponent.defLightCancel;
                }
                _ociItem.itemComponent.SetupSea();
            }
            _ociItem.particleComponent = (ParticleComponent)gameObject.GetComponent <ParticleComponent>();
            if (Object.op_Inequality((Object)_ociItem.particleComponent, (Object)null) && _addInfo)
            {
                _info.colors[0].mainColor = _ociItem.particleComponent.defColor01;
            }
            _ociItem.iconComponent = (IconComponent)gameObject.GetComponent <IconComponent>();
            if (Object.op_Inequality((Object)_ociItem.iconComponent, (Object)null))
            {
                _ociItem.iconComponent.Layer = LayerMask.NameToLayer("Studio/Camera");
            }
            _ociItem.VisibleIcon    = Singleton <Studio.Studio> .Instance.workInfo.visibleGimmick;
            _ociItem.panelComponent = (PanelComponent)gameObject.GetComponent <PanelComponent>();
            if (_addInfo && Object.op_Inequality((Object)_ociItem.panelComponent, (Object)null))
            {
                _info.colors[0].mainColor     = _ociItem.panelComponent.defColor;
                _info.colors[0].pattern.uv    = _ociItem.panelComponent.defUV;
                _info.colors[0].pattern.clamp = _ociItem.panelComponent.defClamp;
                _info.colors[0].pattern.rot   = _ociItem.panelComponent.defRot;
            }
            _ociItem.seComponent = (SEComponent)gameObject.GetComponent <SEComponent>();
            if (_addInfo && Object.op_Inequality((Object)_ociItem.itemComponent, (Object)null) && !((IList <ItemComponent.OptionInfo>)_ociItem.itemComponent.optionInfos).IsNullOrEmpty <ItemComponent.OptionInfo>())
            {
                _info.option = Enumerable.Repeat <bool>(true, _ociItem.itemComponent.optionInfos.Length).ToList <bool>();
            }
            if (_addInfo)
            {
                Studio.Studio.AddInfo((ObjectInfo)_info, (ObjectCtrlInfo)_ociItem);
            }
            else
            {
                Studio.Studio.AddObjectCtrlInfo((ObjectCtrlInfo)_ociItem);
            }
            TreeNodeObject _parent1       = !Object.op_Inequality((Object)_parentNode, (Object)null) ? (_parent == null ? (TreeNodeObject)null : _parent.treeNodeObject) : _parentNode;
            TreeNodeObject treeNodeObject = Studio.Studio.AddNode(loadInfo.name, _parent1);

            treeNodeObject.treeState               = _info.treeState;
            treeNodeObject.onVisible              += new TreeNodeObject.OnVisibleFunc(((ObjectCtrlInfo)_ociItem).OnVisible);
            treeNodeObject.enableVisible           = true;
            treeNodeObject.visible                 = _info.visible;
            guideObject.guideSelect.treeNodeObject = treeNodeObject;
            _ociItem.treeNodeObject                = treeNodeObject;
            if (!loadInfo.bones.IsNullOrEmpty <string>())
            {
                _ociItem.itemFKCtrl = (ItemFKCtrl)gameObject.AddComponent <ItemFKCtrl>();
                _ociItem.itemFKCtrl.InitBone(_ociItem, loadInfo, _addInfo);
            }
            else
            {
                _ociItem.itemFKCtrl = (ItemFKCtrl)null;
            }
            if (_initialPosition == 1)
            {
                _info.changeAmount.pos = Singleton <Studio.Studio> .Instance.cameraCtrl.targetPos;
            }
            _info.changeAmount.OnChange();
            Studio.Studio.AddCtrlInfo((ObjectCtrlInfo)_ociItem);
            _parent?.OnLoadAttach(!Object.op_Inequality((Object)_parentNode, (Object)null) ? _parent.treeNodeObject : _parentNode, (ObjectCtrlInfo)_ociItem);
            if (Object.op_Implicit((Object)_ociItem.animator))
            {
                if (_info.animePattern != 0)
                {
                    _ociItem.SetAnimePattern(_info.animePattern);
                }
                _ociItem.animator.set_speed(_info.animeSpeed);
                if ((double)_info.animeNormalizedTime != 0.0 && _ociItem.animator.get_layerCount() != 0)
                {
                    _ociItem.animator.Update(1f);
                    AnimatorStateInfo animatorStateInfo = _ociItem.animator.GetCurrentAnimatorStateInfo(0);
                    _ociItem.animator.Play(((AnimatorStateInfo) ref animatorStateInfo).get_shortNameHash(), 0, _info.animeNormalizedTime);
                }
            }
            _ociItem.SetupPatternTex();
            _ociItem.SetMainTex();
            _ociItem.UpdateColor();
            _ociItem.ActiveFK(_ociItem.itemInfo.enableFK);
            _ociItem.UpdateFKColor();
            _ociItem.ActiveDynamicBone(_ociItem.itemInfo.enableDynamicBone);
            _ociItem.UpdateOption();
            _ociItem.particleComponent?.PlayOnLoad();
            return(_ociItem);
        }