Files
back_cantanBuilding/Assets/Scripts/SandDig/GameBroadLogic_LoadEntity.cs
2026-05-26 16:15:54 +08:00

330 lines
15 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// 上面宝箱上的任务道具加载
/// </summary>
/// <param name="address"></param>
/// <param name="data"></param>
private void LoadAndInstantiateTaskProp(string address, PropData data)
{
//DiggingGameManager.LogError("开始 上面宝箱上的任务道具加载::: id:" + data.PropId);
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject propEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().PropContainer.transform, false);
propEntity.name = address;
PropItem propScript = propEntity.AddComponent<PropItem>();
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);
}
};
}
/// <summary>
/// 已经完成的任务道具加载
/// </summary>
/// <param name="address"></param>
/// <param name="data"></param>
private void LoadAndInstantiateGetedTaskProp(string address, PropData propData, float ItemFxScale)
{
DiggingGameManager.LogError("开始已经完成的任务道具加载:::id::" + propData.PropId);
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
DiggingGameManager.LogError("已经完成的任务道具加载:::id::" + propData.PropId);
GameObject propEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().PropContainer.transform, false);
propEntity.name = address;
PropSparkItem propSparkItem = propEntity.AddComponent<PropSparkItem>();
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);
}
};
}
/// <summary>
/// 棋盘背景格子加载
/// </summary>
/// <param name="address"></param>
/// <param name="data"></param>
private void LoadAndInstantiateBroad(string address, BroadData data)
{
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject broadEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().BroadContainer.transform, false);
BroadItem broadScript = broadEntity.AddComponent<BroadItem>();
broadScript.Data = data;
_allBroads.Add(broadScript);
broadEntity.transform.localPosition = data.LocalPos;
// 释放资源
Addressables.Release(handle);
}
else
{
DiggingGameManager.LogError("Failed to load asset: " + address);
}
};
}
/// <summary>
/// 棋子显示
/// </summary>
/// <param name="address"></param>
/// <param name="data"></param>
private void LoadAndInstantiateGrid(string address, GridData data)
{
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject gridEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().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<GridItem>();
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);
}
};
}
/// <summary>
/// 格子下配置的普通道具显示
/// </summary>
/// <param name="address"></param>
/// <param name="gridData"></param>
private void LoadAndInstantiateGridProp(string address, GridPropData gridData)
{
//DiggingGameManager.LogError("开始格子下道具实体:::id::" + gridData.PropId);
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject gridPropEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().GridPropContainer.transform, false);
GridPropItem gridPropScript = gridPropEntity.AddComponent<GridPropItem>();
int columns = GContext.container.Resolve<DiggingGameManager>().GetGridWidth();
var showTime = GContext.container.Resolve<Tables>().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);
}
};
}
/// <summary>
/// 格子下模板道具加载
/// </summary>
/// <param name="address"></param>
/// <param name="gridData"></param>
/// <param name="prop"></param>
/// <param name="urlType"></param>
private void LoadAndInstantiateTempGridProp(string address, GridPropData gridData, PropTempData prop, UrlType urlType)
{
//DiggingGameManager.LogError("开始创建道具模板实体, id:::" + gridData.PropId);
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject gridPropEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().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<GridPropItem>();
int columns = GContext.container.Resolve<DiggingGameManager>().GetGridWidth();
var showTime = GContext.container.Resolve<Tables>().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<SpecialEventItem>();
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);
}
};
}
/// <summary>
/// 特殊事件显示
/// </summary>
/// <param name="address"></param>
/// <param name="spData"></param>
private void LoadAndInstantiateSpecialEvent(string address, GridPropData spData)
{
//DiggingGameManager.LogError("开始特殊事件实体::: id:" + spData.PropId);
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject gridPropEntity = GameObject.Instantiate(obj.Result, GContext.container.Resolve<DiggingGameManager>().GridPropContainer.transform, false);
gridPropEntity.name = address;
SpecialEventItem spPropScript = gridPropEntity.AddComponent<SpecialEventItem>();
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<GameObject> LoadGameObject(string address, Transform parent)
{
TaskCompletionSource<GameObject> taskCompletion = new TaskCompletionSource<GameObject>();
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += (AsyncOperationHandle<GameObject> 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;
}
}
}