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); } } }
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); }
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); } }
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); } } }
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; }