diff --git a/Unity/Assets/UMAssets/Scripts/XeApp/Game/Common/CostumeSelectDivaResrouce.cs b/Unity/Assets/UMAssets/Scripts/XeApp/Game/Common/CostumeSelectDivaResrouce.cs index de1b7db6..87433fde 100644 --- a/Unity/Assets/UMAssets/Scripts/XeApp/Game/Common/CostumeSelectDivaResrouce.cs +++ b/Unity/Assets/UMAssets/Scripts/XeApp/Game/Common/CostumeSelectDivaResrouce.cs @@ -1,4 +1,5 @@ +using System; using System.Collections; using System.Collections.Generic; using System.Text; @@ -87,7 +88,53 @@ private void ReleaseBasic() //[IteratorStateMachineAttribute] // RVA: 0x7361F4 Offset: 0x7361F4 VA: 0x7361F4 // // RVA: 0xE68ACC Offset: 0xE68ACC VA: 0xE68ACC - //public IEnumerator Co_LoadFacialClip(DivaResource.MenuFacialType type) { } + public IEnumerator Co_LoadFacialClip(DivaResource.MenuFacialType type) + { + AssetBundleLoadAllAssetOperationBase operation; + List originalFacesName; + List overrideFacesId; + + //0xE6ADAC + ReleaseFacial(); + if(commonFacialResource == null) + commonFacialResource = new List(); + if(specialFacialResource == null) + specialFacialResource = new List(); + if(type < MenuFacialType.Result) + { + bundleName.SetFormat("mn/ft.xab", Array.Empty()); + } + else + { + bundleName.SetFormat("re/ft.xab", Array.Empty()); + } + operation = AssetBundleManager.LoadAllAssetAsync(bundleName.ToString()); + yield return operation; + assetName.SetFormat("facial_table", Array.Empty()); + TextAsset facialTableAsset = operation.GetAsset(assetName.ToString()); + originalFacesName = new List(); + overrideFacesId = new List(); + FacialNameDatabase.CreateFacialOverrideList(facialTableAsset, m_loadedDivaId, ref originalFacesName, ref overrideFacesId); + AssetBundleManager.UnloadAssetBundle(bundleName.ToString(), false); + bundleName.SetFormat("dv/ca/{0:D3}.xab", m_loadedDivaId); + operation = AssetBundleManager.LoadAllAssetAsync(bundleName.ToString()); + yield return operation; + for(int i = 0; i < DivaCommonFacialAnimNames.Length; i++) + { + assetName.SetFormat("diva_{0:D3}_{1}", m_loadedDivaId, DivaCommonFacialAnimNames[i]); + commonFacialResource.Add(new FacialOverrideResouece() { originalName = DivaCommonFacialAnimNames[i], overrideClip = operation.GetAsset(assetName.ToString()) }); + } + specialFacialResource = new List(); + for(int i = 0; i < originalFacesName.Count; i++) + { + if(overrideFacesId[i] > 0) + { + assetName.SetFormat("diva_{0:D3}_{1}", m_loadedDivaId, FacialNameDatabase.ToString(overrideFacesId[i])); + specialFacialResource.Add(new FacialOverrideResouece() { originalName = originalFacesName[i], overrideClip = operation.GetAsset(assetName.ToString()) }); + } + } + AssetBundleManager.UnloadAssetBundle(bundleName.ToString(), false); + } //// RVA: 0xE68B94 Offset: 0xE68B94 VA: 0xE68B94 private void ReleaseFacial() @@ -191,7 +238,7 @@ public IEnumerator Co_LoadCostume(int modelId, UnityAction coroutineEnd) if (cosMaster.GLEEPAFMPLO_HasTextureBundle) { mtlList.Clear(); - operation.ForEach((Object obj) => + operation.ForEach((UnityEngine.Object obj) => { //0xE69244 if(obj is Material) @@ -211,7 +258,7 @@ public IEnumerator Co_LoadCostume(int modelId, UnityAction coroutineEnd) yield return Co.R(operation); List list = new List(); - operation.ForEach((Object obj) => + operation.ForEach((UnityEngine.Object obj) => { //0xE693BC if(obj is Texture) diff --git a/Unity/Assets/UMAssets/Scripts/XeApp/Game/Menu/CostumeSelectScene.cs b/Unity/Assets/UMAssets/Scripts/XeApp/Game/Menu/CostumeSelectScene.cs index 3fb35520..b63cca55 100644 --- a/Unity/Assets/UMAssets/Scripts/XeApp/Game/Menu/CostumeSelectScene.cs +++ b/Unity/Assets/UMAssets/Scripts/XeApp/Game/Menu/CostumeSelectScene.cs @@ -397,6 +397,7 @@ private IEnumerator Co_LoadDivaResource(int divaId) voicePlayIndex = 0; divaResource.Initialize(divaId); yield return Co.R(divaResource.Co_LoadBasicResource()); + yield return Co.R(divaResource.Co_LoadFacialClip(DivaResource.MenuFacialType.Costume)); yield return Co.R(divaResource.Co_LoadMotion()); while (isWaitLoadCueSheet) yield return null;