public override void OnExit() { if (GameFlowHotfixController.PreviousActiveStateName != null) { PartitionObject.FlushAllAndUnload(); } base.OnExit(); CombatLogic.Instance.ExitCombat(); if (GameFlowHotfixController.PreviousActiveStateName != null) { if (PSPoolManager.Instance != null) { PSPoolManager.Instance.CompressPool(); PSPoolManager.Instance.UnloadStandardCombatFX(); } EB.Assets.UnloadBundle("SpiritAnimaFx"); } //暴力释放掉战斗场景资源 if (m_ThemeLoadManager != null) { F_Clear(m_ThemeLoadManager.GetSceneRoot().m_LevelAssets); } EventManager.instance.Raise(eSimpleEventID.Combat_Exit); }
//Mount public bool Mount(string name, string assetName) { if (_mountPartition != null && _mountPartition.Name == name && _mountPartition.AssetName == assetName) { return(false); } if (_mountPartition == null) { _mountPartition = CreatePartitionObject(name, assetName); } else { if (_mountObject != null) { transform.parent = _mountObject.transform.parent; _mountPartition.UnregisterObject(_mountObject); _mountObject = null; _animator = null; } _mountPartition.Name = name; _mountPartition.AssetName = assetName; } _mountPartition.LoadAsset(OnAssetLoaded, gameObject); return(true); }
/// <summary> /// only put in one transform child partition example:Wing /// Anchor Name = name /// </summary> void UpdateChildrenPartition(PartitionObject partition, string name, string assetName, GameObject partitionObj) { Transform partitionAnchorDataTransform = transform.Find(name); if (partitionAnchorDataTransform == null) { EB.Debug.LogWarning("UpdateChildrenPartition:Partition Anchor Data lost Need to Add!!", assetName); partition.UnregisterObject(partitionObj); return; } ChildPartitionAnchorDataComponent anchordata = partitionAnchorDataTransform.GetComponent <ChildPartitionAnchorDataComponent>(); Transform partitionAnchor = anchordata.mAnchorBone; if (partitionAnchor == null) { EB.Debug.LogWarning("UpdateChildrenPartition:Partition Anchor Bone: anchordata.mAnchorBone lost!!", assetName); partition.UnregisterObject(partitionObj); return; } //Vector3 pos = partitionObj.transform.localPosition; //partitionObj.transform.parent = partitionAnchor; partitionObj.transform.SetParent(partitionAnchor, false); partitionObj.transform.localPosition = partitionAnchorDataTransform.localPosition; partitionObj.transform.localScale = partitionAnchorDataTransform.localScale; partitionObj.CustomSetActive(!SyncLoad); partition.RegisterMeshObjects(partitionObj); SetLayer(partitionObj, gameObject.layer); }
/// <summary> /// 更新部件 /// </summary> void UpdatePartitions() { Dictionary <string, PartitionObject> .Enumerator enumerator = m_Partitions.GetEnumerator(); //应该是不存在的~因为这个属性不存在 Transform prevTransform = gameObject.transform.Find(PreviewTransformName); if (prevTransform != null) { #if UNITY_EDITOR GameObject.DestroyImmediate(prevTransform.gameObject); #else GameObject.Destroy(prevTransform.gameObject); #endif } while (enumerator.MoveNext()) { PartitionObject partition = enumerator.Current.Value; if (partition != null) { m_ToLoad.Add(partition.AssetName); partition.LoadAsset(OnAssetLoaded, gameObject); } } enumerator.Dispose(); }
public void Online() { var result = (string?)PartitionObject.InvokeMethod("Online", Array.Empty <object>()); if (result != null) { throw new DiskOperationException(result); } }
PartitionObject CreatePartitionObject(string name, string assetName) { PartitionObject partition = new PartitionObject(); partition.Name = name; partition.AssetName = assetName; return(partition); }
public void UpdateEquipmentColor(string name, int colorIndex) { if (!m_Partitions.ContainsKey(name)) { EB.Debug.LogError(string.Format("[AvatarComponent]Current character does NOT contain partition named {0}", name)); return; } PartitionObject partition = m_Partitions[name]; partition.UpdateEquipmentColor(colorIndex); }
public void AssignDriveLetter() { var inParams = PartitionObject.GetMethodParameters("AddAccessPath"); inParams["AssignDriveLetter"] = true; var outParams = PartitionObject.InvokeMethod("AddAccessPath", inParams, null) !; var code = Convert.ToInt32(outParams["ReturnValue"]); if (code != 0 && code != 42012) { throw new DiskOperationException("Could not assign drive letter", new Win32Exception(code)); } // return code 42012 is ok for some reason, don't ask me why }
public string[] GetAccessPaths() { var inParams = PartitionObject.GetMethodParameters("GetAccessPaths"); var outParams = PartitionObject.InvokeMethod("GetAccessPaths", inParams, null); if (outParams == null) { return(Array.Empty <string>()); } var paths = (string[])outParams["AccessPaths"]; var mappedPaths = paths.Select(p => p.Replace('?', '.')).ToArray(); return(mappedPaths); }
public override void OnEnter() { LoadingLogic.AddCustomProgress(10); hudLoaded = false; sceneLoaded = false; PartitionObject.FlushAllAndUnload(); base.OnEnter(); FusionAudio.PostGlobalMusicEvent("MUS_CampaignView_Demo", true); Hotfix_LT.Messenger.AddListener <EnemyController, eBattleType>("AttackEnemyImediatly", AttackEnemyImediatly); Hotfix_LT.Messenger.Raise("LTSpeedSnatchEvent.IdleFollow"); MainlandViewAction(); LTWelfareModel.Instance.SetMaxCampaignLevel();//更新通关的最大章节 }
public void AddPartition(string partitionName, string assetName) { PartitionObject partition = null; if (m_Partitions.ContainsKey(partitionName)) { partition = m_Partitions[partitionName]; if (partition == null) { partition = CreatePartitionObject(partitionName, assetName); m_Partitions[partitionName] = partition; } else { m_Partitions[partitionName].AssetName = assetName; } } else { partition = CreatePartitionObject(partitionName, assetName); m_Partitions.Add(partitionName, partition); } }
public bool LoadEquipment(string name, string assetName) { if (m_Partitions.ContainsKey(name)) { PartitionObject partition1 = m_Partitions[name]; if (partition1.AssetName.Equals(assetName)) { return(false); } } AddPartition(name, assetName); PartitionObject partition = m_Partitions[name]; if (partition == null) { return(false); } partition.AssetName = assetName; m_ToLoad.Add(partition.AssetName); partition.LoadAsset(OnAssetLoaded, gameObject); return(true); }
public void RefreshVolume() { VolumeObject = PartitionObject.GetRelated("MSFT_Volume").OfType <ManagementObject>().FirstOrDefault(); }
public void PreviewCharacter(List <PartitionInfo> infos) { Transform[] skeletonBones = gameObject.GetComponentsInChildren <Transform>(); int skeletonCount = skeletonBones.Length; m_SkeletonBonesDic.Clear(); for (int i = 0; i < skeletonCount; i++) { m_SkeletonBonesDic.Add(skeletonBones[i].name, skeletonBones[i]); } Transform prevTransform = gameObject.transform.Find(PreviewTransformName); if (prevTransform != null) { GameObject.DestroyImmediate(prevTransform.gameObject); } for (int i = 0; i < infos.Count; i++) { PartitionInfo info = infos[i]; PartitionObject partition = new PartitionObject(); partition.Name = info.Name; partition.AssetName = info.AssetName; m_Partitions.Add(info.Name, partition); if (info.AssetObject == null) { info.AssetObject = PartitionAssetManager.Instance.GetAssetObject(info.AssetName); if (info.AssetObject == null) { string assetPath = PartitionAssetManager.Instance.GetAssetPath(info.AssetName); if (!string.IsNullOrEmpty(assetPath)) { info.AssetObject = AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject)) as GameObject; if (info.AssetObject != null) { PartitionAssetManager.Instance.RegisterAssetObject(info.AssetName, info.AssetObject); } } } } GameObject partitionObject = GameObject.Instantiate(info.AssetObject) as GameObject; List <PartitionInfo> linkedPartitionInfos = null; CharacterPartitionLink partitionLink = partitionObject.GetComponent <CharacterPartitionLink>(); if (partitionLink != null) { linkedPartitionInfos = new List <PartitionInfo>(); foreach (PartitionInfo linkedInfo in partitionLink.LinkedPartitions) { linkedPartitionInfos.Add(linkedInfo); } } UpdatePartition(info.Name, info.AssetName, partitionObject, false); if (linkedPartitionInfos != null) { for (int j = 0; j < linkedPartitionInfos.Count; j++) { PartitionInfo linkedInfo = linkedPartitionInfos[j]; if (linkedInfo.AssetObject == null) { linkedInfo.AssetObject = PartitionAssetManager.Instance.GetAssetObject(linkedInfo.AssetName); } GameObject linkedObj = GameObject.Instantiate(linkedInfo.AssetObject) as GameObject; UpdatePartition(info.Name, linkedInfo.AssetName, linkedObj, true); } } } }
/// <summary> /// need combine bone partition example:Armor /// 合并骨骼部件 /// </summary> /// <param name="partition"></param> /// <param name="name"></param> /// <param name="assetName"></param> /// <param name="partitionObj">部件数据组件</param> /// <param name="isLinkObj"></param> void UpdateCombineBonePartition(PartitionObject partition, string name, string assetName, GameObject partitionObj, bool isLinkObj = false) { if (gameObject == null) { EB.Debug.LogError("This AvatarComponent has been destroyed!"); return; } //获取数据组件身上挂载的部件预置体相应的蒙皮 SkinnedMeshRenderer[] meshes = partitionObj.GetComponentsInChildren <SkinnedMeshRenderer>(); if (meshes == null || meshes.Length == 0) { if (partitionObj.GetComponentInChildren <CharacterPartitionLink>() == null) { EB.Debug.LogWarning("UpdatePartition: SkinnedMeshRenderer not found in {0}", assetName); } partition.UnregisterObject(partitionObj); return; } for (int meshIndex = meshes.Length - 1; meshIndex >= 0; meshIndex--) { SkinnedMeshRenderer smr = meshes[meshIndex]; Transform root = null; m_CombinedBones.Clear(); Transform[] bones = smr.bones; //reskin this thing to the new skeleton if (!m_SkeletonBonesDic.ContainsKey(smr.rootBone.name)) { EB.Debug.LogError("No rootBone for {0}", assetName); return; } root = m_SkeletonBonesDic[smr.rootBone.name]; if (!m_SkeletonBonesDic.ContainsKey(RootBoneTransformName)) //for Optimized Game Object { smr.bones = new Transform[0]; } else { int boneCount = bones.Length; for (int boneIndex = 0; boneIndex < boneCount; boneIndex++) { Transform bone = bones[boneIndex]; Transform combinedBone = null; if (m_SkeletonBonesDic.TryGetValue(bone.name, out combinedBone) && combinedBone != null) { m_CombinedBones.Add(combinedBone); } } smr.bones = m_CombinedBones.ToArray(); } smr.rootBone = root; smr.transform.SetParent(gameObject.transform); smr.gameObject.CustomSetActive(!SyncLoad); partition.RegisterMeshObjects(smr.gameObject); smr.gameObject.layer = gameObject.layer; CheckRender(); } }
/// <summary> /// 更新部件 /// </summary> /// <param name="name">部件名称</param> /// <param name="assetName">资源名称</param> /// <param name="partitionObj">部件数据对象</param> /// <param name="isLinkObj">是否有部件信息组件</param> void UpdatePartition(string name, string assetName, GameObject partitionObj, bool isLinkObj = false) { if (!m_Partitions.ContainsKey(name)) { EB.Debug.LogError(string.Format("更新部件,发现这个部件不存在部件列表当中,: {0} ,部件的资源名称: {1}!", name, assetName)); } PartitionObject partition = m_Partitions[name]; if (partition == null) { return; } if (!isLinkObj) //现在默认都是没有部件列表的组件了,每次都进去 { partition.ClearMeshObjects(); } //initialize character partition: load skinnedmeshes and set materials CharacterPartition characterPartition = partitionObj.GetComponent <CharacterPartition>(); if (characterPartition != null) { characterPartition.Initialize(); } ColorCustomization customization = partitionObj.GetComponent <ColorCustomization>(); if (customization != null) { customization.ApplyColor(); } bool isChildrenPatition = IsChildrenPartition(name, assetName); //日志 EB.Debug.LogObjectMgrAsset("<color=#00ff00>更新合并部件的骨骼:{0}</color>,,assetName:<color=#00ff00>{1}</color>是否为这个角色的子级:<color=#00ff00>{2}</color>,isLinkObj:<color=#00ff00>{3}</color>" , name, assetName, isChildrenPatition, isLinkObj); // if (isChildrenPatition) { //更新部件,先注掉,因为业务逻辑已经过老了 UpdateChildrenPartition(partition, name, assetName, partitionObj); } else { try { UpdateCombineBonePartition(partition, name, assetName, partitionObj, isLinkObj); } catch (System.NullReferenceException e) { EB.Debug.LogError(e.ToString()); } partition.UnregisterObject(partitionObj); } if (SyncLoad && m_ToLoad.Count == 0) { var iter = m_Partitions.GetEnumerator(); while (iter.MoveNext()) { iter.Current.Value.ShowMeshObjects(); } iter.Dispose(); } CharacterColorScale colorScale = GetComponent <CharacterColorScale>(); if (colorScale != null) { colorScale.ForceUpdateColorScale(); } }