private void UnregisterAlternativeAppearance(WardrobeParam param)
        {
            _wardrobesStatus.Record();

            if (param.EnableOtherAlter)
            {
                _wardrobesStatus.UnregisterAlter(param.AlterType, param.Type);
            }

            if (param.Masks != null)
            {
                foreach (var mask in param.Masks)
                {
                    _wardrobesStatus.UnregisterMask(mask.Item1, param.Type);
                }
            }

            if (param.HasHideAvatar)
            {
                foreach (var pos in param.HidePositions)
                {
                    _wardrobesStatus.UnregisterHide(pos, param.Type);
                    ReInterpretMaskAppearance(_wardrobes[(int)pos], true);
                }
            }
        }
Exemple #2
0
        public void AddWardrobe(WardrobeParam param)
        {
            // 先移除对应位置
            RemoveWardrobe(param.Type, false);

            _wardrobes[(int)param.Type] = param;

            // 蒙皮or硬挂
            PutOn(param.DefaultGameObject, (int)param.Type, param.IsSkinned, param.NeedMappingBones);
            if (param.HasAlterAppearance)
            {
                PutOn(param.AlternativeGameObject, (int)param.Type + AlternativeStartNum, param.IsSkinned, param.NeedMappingBones);
            }

            // 设置显示状态,由其他位置决定
            RefreshSingleWardrobeDefault(param,
                                         _wardrobesStatus.GetDefaultEnabled(param.Type));
            RefreshSingleWardrobeAlter(param,
                                       _wardrobesStatus.GetAlterEnabled(param.Type));
            RefreshSingleWardrobeMask(param,
                                      _wardrobesStatus.GetFirstMaskProvider(param.Type),
                                      _wardrobesStatus.GetMaskEnabled(param.Type));

            // 影响其他位置的显示状态
            RegisterAlternativeAppearance(param);
            // 影响其他位置的显示
            ShowAccordingToStatus();

            // 背包挂点
            AddBag(param);
        }
Exemple #3
0
        private void RewindWardrobeInBody(int id, Wardrobe pos)
        {
            if (id < 0) //脱
            {
                if (FirstPersonIncluded)
                {
                    _p1Avatar.RemoveWardrobe(pos);
                    _mountWardrobeHandlers[(int)pos, ValidP1Index].SetInfo(null);
                    UpdateRenderBelowAnimatorP1();
                }

                if (ThirdPersonIncluded)
                {
                    _p3Avatar.RemoveWardrobe(pos);
                    _mountWardrobeHandlers[(int)pos, ValidP3Index].SetInfo(null);
                    UpdateRenderBelowAnimatorP3();
                }
                if (!P3HaveInit)
                {
                    UndressInitAvatar(pos);
                }
            }
            else //穿
            {
                if (!P3HaveInit)
                {
                    DressInitAvatar(id);
                    return;
                }

                var assetData = SingletonManager.Get <AvatarAssetConfigManager>().GetAvatarAssetItemById(id);
                if (assetData == null)
                {
                    return;
                }

                if (FirstPersonIncluded)
                {
                    var param = new WardrobeParam(assetData);
                    if (!param.HaveP1Avatar) // 当前部位没有一人称换装,脱掉之前的部位换装
                    {
                        _p1Avatar.RemoveWardrobe(pos);
                        _mountWardrobeHandlers[(int)pos, ValidP1Index].SetInfo(null);
                    }
                    else
                    {
                        LoadResource(_p1Index, param);
                    }
                }

                if (ThirdPersonIncluded)
                {
                    LoadResource(_p3Index, new WardrobeParam(assetData));
                }
            }

            Logger.DebugFormat("rewindWardrobe:     pos  {0}      id  {1}", pos, id);
        }
 private void RefreshSingleWardrobeAlter(WardrobeParam param, bool enable)
 {
     if (enable)
     {
         EnableRender(param.AlternativeGameObject);
     }
     else
     {
         DisableRender(param.AlternativeGameObject);
     }
 }
 private void RefreshSingleWardrobeDefault(WardrobeParam param, bool enable)
 {
     if (enable)
     {
         ActiveGameObject(param.DefaultGameObject);
         AddBag(param);
     }
     else
     {
         UnactiveGameobject(param.DefaultGameObject);
         RemoveBag(param.Type);
     }
 }
Exemple #6
0
            public void OnLoadSucc <T>(T source, UnityObject obj)
            {
                if (_param == null)
                {
                    _dataSource.AddRecycleObject(obj);
                    return;
                }

                if (obj.Address.Equals(_param.P3DefaultResAddr) ||
                    obj.Address.Equals(_param.P1DefaultResAddr))
                {
                    if (_param.DefaultGameObject == null)
                    {
                        _param.DefaultGameObject = obj;
                        SetObjParam(_param.DefaultGameObject, UnityLayerManager.GetLayerIndex(EUnityLayerName.Player));
                    }
                    else
                    {
                        _dataSource.AddRecycleObject(obj);
                    }
                }
                else if (_param.HasAlterAppearance && obj.Address.Equals(_param.AlterResAddr))
                {
                    if (_param.AlternativeGameObject == null)
                    {
                        _param.AlternativeGameObject = obj;
                        SetObjParam(_param.AlternativeGameObject, UnityLayerManager.GetLayerIndex(EUnityLayerName.Player));
                    }
                    else
                    {
                        _dataSource.AddRecycleObject(obj);
                    }
                }
                else
                {
                    _dataSource.AddRecycleObject(obj);
                }

                if (_param.DefaultGameObject != null &&
                    _param.HasAlterAppearance == (_param.AlternativeGameObject != null))
                {
                    _param.PrepareMasks();
                    if (_loadFinishHandle != null)
                    {
                        _loadFinishHandle.Invoke(_param);
                    }
                    _dataSource.FinishLoadResource(_param, _index);
                    _param = null;
                }
            }
        public void AddWardrobe(WardrobeParam param)
        {
            if (null != param.DefaultGameObject && null != param.DefaultGameObject.AsGameObject)
            {
                Logger.InfoFormat("CharacterLog-- CharacterAvatar Add Wardrobe:  {0}", param.DefaultGameObject.AsGameObject.name);
            }

            // 先移除对应位置
            RemoveWardrobe(param.Type, false);

            _wardrobes[(int)param.Type] = param;

            // 蒙皮or硬挂
            PutOn(param.DefaultGameObject, (int)param.Type, param.IsSkinned, param.NeedMappingBones);
            EffectUtility.ReflushGodModeEffect(_rootGo, param.DefaultGameObject);
            EffectUtility.RegistEffect(_rootGo, param.DefaultGameObject.AsGameObject);

            if (param.HasAlterAppearance)
            {
                PutOn(param.AlternativeGameObject, (int)param.Type + AlternativeStartNum, param.IsSkinned, param.NeedMappingBones);
                EffectUtility.ReflushGodModeEffect(_rootGo, param.AlternativeGameObject);
            }

            // 设置显示状态,由其他位置决定
            RefreshSingleWardrobeDefault(param,
                                         _wardrobesStatus.GetDefaultEnabled(param.Type));
            RefreshSingleWardrobeAlter(param,
                                       _wardrobesStatus.GetAlterEnabled(param.Type));
            RefreshSingleWardrobeMask(param,
                                      _wardrobesStatus.GetFirstMaskProvider(param.Type),
                                      _wardrobesStatus.GetMaskEnabled(param.Type));

            // 影响其他位置的显示状态
            RegisterAlternativeAppearance(param);
            // 影响其他位置的显示
            ShowAccordingToStatus();

            // 背包挂点
            AddBag(param);

            //通知TA
            TaaHelper();

            //force set lod by addWardrobe
            ForceCurrentLod();

            // avatar effect
            SetBindingPointBones(param);
        }
 private void ReInterpretMaskAppearance(WardrobeParam param, bool show)
 {
     if (param.Masks == null)
     {
         return;
     }
     foreach (var mask in param.Masks)
     {
         if (show)
         {
             _wardrobesStatus.RegisterMask(mask.Item1, param.Type);
         }
         else
         {
             _wardrobesStatus.UnregisterMask(mask.Item1, param.Type);
         }
     }
 }
Exemple #9
0
        private void LoadResource(int index, WardrobeParam param)
        {
            var mount = _mountWardrobeHandlers[(int)param.Type, index];

            mount.SetInfo(param);

            if (index == ValidP3Index)
            {
                _loadRequestBatch.Add(CreateLoadRequest(param.P3DefaultResAddr, mount));
                if (param.HasAlterAppearance)
                {
                    _loadRequestBatch.Add(CreateLoadRequest(param.AlterResAddr, mount));
                }
            }
            else if (index == ValidP1Index)
            {
                _loadRequestBatch.Add(CreateLoadRequest(param.P1DefaultResAddr, mount));
            }
        }
        private void FinishLoadResource(WardrobeParam param, int index)
        {
            if (index == _p1Index && FirstPersonIncluded)
            {
                if (IsFirstPerson)
                {
                    AppearanceUtils.EnableRender(param.DefaultGameObject);
                    AppearanceUtils.EnableRender(param.AlternativeGameObject);
                }
                else
                {
                    AppearanceUtils.DisableRender(param.DefaultGameObject);
                    AppearanceUtils.DisableRender(param.AlternativeGameObject);
                }

                AppearanceUtils.DisableShadow(param.DefaultGameObject);
                AppearanceUtils.DisableShadow(param.AlternativeGameObject);

                _p1Avatar.AddWardrobe(param);
                UpdateRenderBelowAnimatorP1();
            }

            if (index == _p3Index && ThirdPersonIncluded)
            {
                if (IsFirstPerson)
                {
                    AppearanceUtils.DisableRender(param.DefaultGameObject);
                    AppearanceUtils.DisableRender(param.AlternativeGameObject);
                }
                else
                {
                    AppearanceUtils.EnableRender(param.DefaultGameObject);
                    AppearanceUtils.EnableRender(param.AlternativeGameObject);
                }

                _p3Avatar.AddWardrobe(param);
                UpdateRenderBelowAnimatorP3();
            }

            ChangeWardrobeShader(param.DefaultGameObject, index);
            ChangeWardrobeShader(param.AlternativeGameObject, index);
        }
        private void AddBag(WardrobeParam param)
        {
            if (param.Type == Wardrobe.Bag && _bagChanged != null)
            {
                var attachment6 = BoneMount.FindChildBone(param.DefaultGameObject, BoneName.WeaponAttachment6);
                var attachment7 = BoneMount.FindChildBone(param.DefaultGameObject, BoneName.WeaponAttachment7);

                if (attachment6 != null)
                {
                    _attachment6Parent       = attachment6.parent;
                    _attachment6ParentInChar = GetBoneOfTheSameName(_attachment6Parent, _allBonesDictionary);
                }
                if (attachment7 != null)
                {
                    _attachment7Parent       = attachment7.parent;
                    _attachment7ParentInChar = GetBoneOfTheSameName(_attachment7Parent, _allBonesDictionary);
                }
                _bagChanged.Invoke();
            }
        }
 private void RefreshSingleWardrobeMask(WardrobeParam param, Wardrobe provider, bool enable)
 {
     if (enable)
     {
         var maskProvider = _wardrobes[(int)provider];
         foreach (var mask in maskProvider.Masks)
         {
             if (mask.Item1 == param.Type)
             {
                 SetMaskTexture(param.DefaultGameObject, mask.Item2);
                 SetMaskTexture(param.AlternativeGameObject, mask.Item2);
                 break;
             }
         }
     }
     else
     {
         SetMaskTexture(param.DefaultGameObject, null);
         SetMaskTexture(param.AlternativeGameObject, null);
     }
 }
        private void LoadResource(int index, WardrobeParam param)
        {
            var mount = _mountWardrobeHandlers[(int)param.Type, index];

            mount.SetInfo(param);

            if (index == ValidP3Index)
            {
                Logger.InfoFormat("CharacterLog-- Will Load P3Default AssetBundle:  {0}", param.P3DefaultResAddr);
                _loadRequestBatch.Add(CreateLoadRequest(param.P3DefaultResAddr, mount));
                if (param.HasAlterAppearance)
                {
                    Logger.InfoFormat("CharacterLog-- Will Load P3Alter AssetBundle:  {0}", param.AlterResAddr);
                    _loadRequestBatch.Add(CreateLoadRequest(param.AlterResAddr, mount));
                }
            }
            else if (index == ValidP1Index)
            {
                _loadRequestBatch.Add(CreateLoadRequest(param.P1DefaultResAddr, mount));
            }
        }
        private void SetBindingPointBones(WardrobeParam param)
        {
            if (null == param)
            {
                return;
            }

            if (null != param.DefaultGameObject &&
                null != param.DefaultGameObject.AsGameObject)
            {
                var comps = param.DefaultGameObject.AsGameObject.GetComponentsInChildren <BindingPointToBone>();
                if (null != comps && comps.Length != 0)
                {
                    foreach (var effect in comps)
                    {
                        effect.SetAvatarBones(_allBonesDictionary);
                    }
                    Logger.InfoFormat("SetBindingPointBones -- ObjName:  {0}",
                                      param.DefaultGameObject.AsGameObject.name);
                }
            }

            if (null != param.AlternativeGameObject &&
                null != param.AlternativeGameObject.AsGameObject)
            {
                var comps = param.AlternativeGameObject.AsGameObject.GetComponentsInChildren <BindingPointToBone>();
                if (null != comps && comps.Length != 0)
                {
                    foreach (var effect in comps)
                    {
                        effect.SetAvatarBones(_allBonesDictionary);
                    }
                    Logger.InfoFormat("SetBindingPointBones -- ObjName:  {0}",
                                      param.AlternativeGameObject.AsGameObject.name);
                }
            }
        }
            public void OnLoadSuccess <T>(T source, UnityObject obj)
            {
                if (_param == null)
                {
                    _dataSource.AddRecycleObject(obj);
                    return;
                }

                if (null == obj || null == obj.AsGameObject)
                {
                    _dataSource.AddRecycleObject(_param.DefaultGameObject);
                    _dataSource.AddRecycleObject(_param.AlternativeGameObject);
                    return;
                }

                if (!obj.AsGameObject.activeSelf)
                {
                    Logger.ErrorFormat("unityObj:  {0}  is unActive", obj.Address);
                    return;
                }

                Logger.InfoFormat("CharacterLog-- Wardrobe Load Success: {0}", obj.Address);

                if (obj.Address.Equals(_param.P3DefaultResAddr) ||
                    obj.Address.Equals(_param.P1DefaultResAddr))
                {
                    if (_param.DefaultGameObject == null)
                    {
                        _param.DefaultGameObject = obj;
                        SetObjParam(_param.DefaultGameObject, UnityLayerManager.GetLayerIndex(EUnityLayerName.Player));
                    }
                    else
                    {
                        _dataSource.AddRecycleObject(obj);
                    }
                }
                else if (_param.HasAlterAppearance && obj.Address.Equals(_param.AlterResAddr))
                {
                    if (_param.AlternativeGameObject == null)
                    {
                        _param.AlternativeGameObject = obj;
                        SetObjParam(_param.AlternativeGameObject, UnityLayerManager.GetLayerIndex(EUnityLayerName.Player));
                    }
                    else
                    {
                        _dataSource.AddRecycleObject(obj);
                    }
                }
                else
                {
                    _dataSource.AddRecycleObject(obj);
                }

                if (_param.DefaultGameObject != null &&
                    _param.HasAlterAppearance == (_param.AlternativeGameObject != null))
                {
                    _param.PrepareMasks();
                    if (_loadFinishHandle != null)
                    {
                        _loadFinishHandle.Invoke(_param);
                    }
                    _dataSource.FinishLoadResource(_param, _index);
                    _param = null;
                }
            }
 public void SetInfo(WardrobeParam param)
 {
     _param = param;
 }