330 lines
15 KiB
C#
330 lines
15 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|