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