using Script.RuntimeScript.model.Data; using System.Text; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine; using Script.RuntimeScript.GameLogic; using asap.core; using System.Threading.Tasks; using cfg; namespace Script.RuntimeScript { public partial class GameBroadLogic { /// /// 上面宝箱上的任务道具加载 /// /// /// private void LoadAndInstantiateTaskProp(string address, PropData data) { //DiggingGameManager.LogError("开始 上面宝箱上的任务道具加载::: id:" + data.PropId); AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject propEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().PropContainer.transform, false); propEntity.name = address; PropItem propScript = propEntity.AddComponent(); propScript.Data = data; Vector3 LocalPos = data.LocalPos; LocalPos.z = 0; //LocalPos.y += 0.5f; propScript.transform.localPosition = LocalPos; _allProps.Add(propScript); if (data.IsOk) //已经获得的道具 隐藏起来 { propScript.gameObject.SetActive(false); } // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } /// /// 已经完成的任务道具加载 /// /// /// private void LoadAndInstantiateGetedTaskProp(string address, PropData propData, float ItemFxScale) { DiggingGameManager.LogError("开始已经完成的任务道具加载:::id::" + propData.PropId); AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { DiggingGameManager.LogError("已经完成的任务道具加载:::id::" + propData.PropId); GameObject propEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().PropContainer.transform, false); propEntity.name = address; PropSparkItem propSparkItem = propEntity.AddComponent(); propSparkItem.Init(ItemFxScale); Vector3 LocalPos = propData.LocalPos; LocalPos.z = 0; //LocalPos.y += 0.5f; //LocalPos.z += SandDigEventConst.TargetPropOffsetZ; propEntity.transform.localPosition = LocalPos; propEntity.transform.localScale = Vector3.one * SandDigEventConst.GetScale; propEntity.transform.localEulerAngles = Vector3.zero; // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } /// /// 棋盘背景格子加载 /// /// /// private void LoadAndInstantiateBroad(string address, BroadData data) { AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject broadEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().BroadContainer.transform, false); BroadItem broadScript = broadEntity.AddComponent(); broadScript.Data = data; _allBroads.Add(broadScript); broadEntity.transform.localPosition = data.LocalPos; // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } /// /// 棋子显示 /// /// /// private void LoadAndInstantiateGrid(string address, GridData data) { AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject gridEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().GridContainer.transform, false); StringBuilder strB = new StringBuilder(); strB.Append("grid _"); strB.Append(data.Row); strB.Append("_"); strB.Append(data.Col); gridEntity.name = strB.ToString(); GridItem gridScript = gridEntity.AddComponent(); gridScript.Data = data; _allGrids.Add(gridScript); gridEntity.transform.localPosition = data.LocalPos; gridEntity.SetActive(!data.IsOpen); if (!data.IsOpen && data.DoubleClick) { if (data.hasClickCount > 0) { gridScript.SetMash(GridMeshType.Mesh2); } } _gridLoadedCount++; CheakAllGridPrefabLoaded(); // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } /// /// 格子下配置的普通道具显示 /// /// /// private void LoadAndInstantiateGridProp(string address, GridPropData gridData) { //DiggingGameManager.LogError("开始格子下道具实体:::id::" + gridData.PropId); AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject gridPropEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().GridPropContainer.transform, false); GridPropItem gridPropScript = gridPropEntity.AddComponent(); int columns = GContext.container.Resolve().GetGridWidth(); var showTime = GContext.container.Resolve().TbGlobalConfig.DiggingPropShowTime; columns = columns - 3; if (columns < 0) { columns = 0; } if (columns >= showTime.Count) { columns = showTime.Count - 1; } gridPropScript.Init(gridData, showTime[columns]); _allGridProps.Add(gridPropScript); gridPropEntity.transform.localPosition = new Vector3(gridData.ParentGird.Row, gridData.ParentGird.Col, 0); gridPropEntity.transform.localEulerAngles = new Vector3(0, 0, -gridData.PropDirection); gridPropEntity.SetActive(!gridData.IsCanOpen()); gridPropEntity.name = address; //DiggingGameManager.LogError("格子下道具实体:::id::" + gridData.PropId + " x::" + gridPropEntity.transform.localPosition.x + " y:::" + gridPropEntity.transform.localPosition); // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } /// /// 格子下模板道具加载 /// /// /// /// /// private void LoadAndInstantiateTempGridProp(string address, GridPropData gridData, PropTempData prop, UrlType urlType) { //DiggingGameManager.LogError("开始创建道具模板实体, id:::" + gridData.PropId); AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject gridPropEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().GridPropContainer.transform, false); //DiggingGameManager.LogError("创建道具模板实体,位置 x:" + prop.x + " y:" + prop.y + " id:::" + gridData.PropId); gridPropEntity.name = address; if (urlType == UrlType.GridProp) { GridPropItem gridPropScript = gridPropEntity.AddComponent(); int columns = GContext.container.Resolve().GetGridWidth(); var showTime = GContext.container.Resolve().TbGlobalConfig.DiggingPropShowTime; columns = columns - 3; if (columns < 0) { columns = 0; } if (columns >= showTime.Count) { columns = showTime.Count - 1; } gridPropScript.Init(gridData, showTime[columns]); _allGridProps.Add(gridPropScript); gridPropEntity.transform.localEulerAngles = new Vector3(0, 0, -gridData.PropDirection); } else if (urlType == UrlType.SpecialEvent) { SpecialEventItem spPropScript = gridPropEntity.AddComponent(); spPropScript.Data = gridData; _allSpecialGridProps.Add(spPropScript); } gridPropEntity.transform.localPosition = new Vector3(gridData.ParentGird.Row, gridData.ParentGird.Col, 0); gridPropEntity.SetActive(!gridData.IsCanOpen()); // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } /// /// 特殊事件显示 /// /// /// private void LoadAndInstantiateSpecialEvent(string address, GridPropData spData) { //DiggingGameManager.LogError("开始特殊事件实体::: id:" + spData.PropId); AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject gridPropEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve().GridPropContainer.transform, false); gridPropEntity.name = address; SpecialEventItem spPropScript = gridPropEntity.AddComponent(); spPropScript.Data = spData; _allSpecialGridProps.Add(spPropScript); gridPropEntity.transform.localPosition = new Vector3(spData.ParentGird.Row, spData.ParentGird.Col, 0); gridPropEntity.SetActive(!spData.IsCanOpen()); //DiggingGameManager.LogError("特殊事件实体::: id:" + spData.PropId + " x::" + gridPropEntity.transform.localPosition.x + " y:::" + gridPropEntity.transform.localPosition); // 释放资源 Addressables.Release(handle); } else { DiggingGameManager.LogError("Failed to load asset: " + address); } }; } public async Task LoadGameObject(string address, Transform parent) { TaskCompletionSource taskCompletion = new TaskCompletionSource(); AsyncOperationHandle handle = Addressables.LoadAssetAsync(address); handle.Completed += (AsyncOperationHandle obj) => { if (obj.Status == AsyncOperationStatus.Succeeded) { GameObject gridPropEntity = GameObject.Instantiate(obj.Result, parent); gridPropEntity.name = address; //DiggingGameManager.LogError("特殊事件实体::: id:" + spData.PropId + " x::" + gridPropEntity.transform.localPosition.x + " y:::" + gridPropEntity.transform.localPosition); taskCompletion.SetResult(gridPropEntity); // 释放资源 Addressables.Release(handle); } else { taskCompletion.SetResult(null); DiggingGameManager.LogError("Failed to load asset: " + address); } }; return await taskCompletion.Task; } } }