- 引入 UnityGameFramework
- 使用 Luban 替代原来的 UGF 的数据表
This commit is contained in:
@@ -0,0 +1,399 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.DataTable;
|
||||
using GameFramework.Resource;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 数据表组件。
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[AddComponentMenu("Game Framework/Data Table")]
|
||||
public sealed class DataTableComponent : GameFrameworkComponent
|
||||
{
|
||||
private const int DefaultPriority = 0;
|
||||
|
||||
private IDataTableManager m_DataTableManager = null;
|
||||
private EventComponent m_EventComponent = null;
|
||||
|
||||
[SerializeField]
|
||||
private bool m_EnableLoadDataTableUpdateEvent = false;
|
||||
|
||||
[SerializeField]
|
||||
private bool m_EnableLoadDataTableDependencyAssetEvent = false;
|
||||
|
||||
[SerializeField]
|
||||
private string m_DataTableHelperTypeName = "UnityGameFramework.Runtime.DefaultDataTableHelper";
|
||||
|
||||
[SerializeField]
|
||||
private DataTableHelperBase m_CustomDataTableHelper = null;
|
||||
|
||||
[SerializeField]
|
||||
private int m_CachedBytesSize = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据表数量。
|
||||
/// </summary>
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_DataTableManager.Count;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓冲二进制流的大小。
|
||||
/// </summary>
|
||||
public int CachedBytesSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_DataTableManager.CachedBytesSize;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 游戏框架组件初始化。
|
||||
/// </summary>
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
m_DataTableManager = GameFrameworkEntry.GetModule<IDataTableManager>();
|
||||
if (m_DataTableManager == null)
|
||||
{
|
||||
Log.Fatal("Data table manager is invalid.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
BaseComponent baseComponent = GameEntry.GetComponent<BaseComponent>();
|
||||
if (baseComponent == null)
|
||||
{
|
||||
Log.Fatal("Base component is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
m_EventComponent = GameEntry.GetComponent<EventComponent>();
|
||||
if (m_EventComponent == null)
|
||||
{
|
||||
Log.Fatal("Event component is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (baseComponent.EditorResourceMode)
|
||||
{
|
||||
m_DataTableManager.SetResourceManager(baseComponent.EditorResourceHelper);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_DataTableManager.SetResourceManager(GameFrameworkEntry.GetModule<IResourceManager>());
|
||||
}
|
||||
|
||||
DataTableHelperBase dataTableHelper = Helper.CreateHelper(m_DataTableHelperTypeName, m_CustomDataTableHelper);
|
||||
if (dataTableHelper == null)
|
||||
{
|
||||
Log.Error("Can not create data table helper.");
|
||||
return;
|
||||
}
|
||||
|
||||
dataTableHelper.name = "Data Table Helper";
|
||||
Transform transform = dataTableHelper.transform;
|
||||
transform.SetParent(this.transform);
|
||||
transform.localScale = Vector3.one;
|
||||
|
||||
m_DataTableManager.SetDataProviderHelper(dataTableHelper);
|
||||
m_DataTableManager.SetDataTableHelper(dataTableHelper);
|
||||
if (m_CachedBytesSize > 0)
|
||||
{
|
||||
EnsureCachedBytesSize(m_CachedBytesSize);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 确保二进制流缓存分配足够大小的内存并缓存。
|
||||
/// </summary>
|
||||
/// <param name="ensureSize">要确保二进制流缓存分配内存的大小。</param>
|
||||
public void EnsureCachedBytesSize(int ensureSize)
|
||||
{
|
||||
m_DataTableManager.EnsureCachedBytesSize(ensureSize);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 释放缓存的二进制流。
|
||||
/// </summary>
|
||||
public void FreeCachedBytes()
|
||||
{
|
||||
m_DataTableManager.FreeCachedBytes();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <returns>是否存在数据表。</returns>
|
||||
public bool HasDataTable<T>() where T : IDataRow
|
||||
{
|
||||
return m_DataTableManager.HasDataTable<T>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <returns>是否存在数据表。</returns>
|
||||
public bool HasDataTable(Type dataRowType)
|
||||
{
|
||||
return m_DataTableManager.HasDataTable(dataRowType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>是否存在数据表。</returns>
|
||||
public bool HasDataTable<T>(string name) where T : IDataRow
|
||||
{
|
||||
return m_DataTableManager.HasDataTable<T>(name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>是否存在数据表。</returns>
|
||||
public bool HasDataTable(Type dataRowType, string name)
|
||||
{
|
||||
return m_DataTableManager.HasDataTable(dataRowType, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <returns>要获取的数据表。</returns>
|
||||
public IDataTable<T> GetDataTable<T>() where T : IDataRow
|
||||
{
|
||||
return m_DataTableManager.GetDataTable<T>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <returns>要获取的数据表。</returns>
|
||||
public DataTableBase GetDataTable(Type dataRowType)
|
||||
{
|
||||
return m_DataTableManager.GetDataTable(dataRowType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>要获取的数据表。</returns>
|
||||
public IDataTable<T> GetDataTable<T>(string name) where T : IDataRow
|
||||
{
|
||||
return m_DataTableManager.GetDataTable<T>(name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>要获取的数据表。</returns>
|
||||
public DataTableBase GetDataTable(Type dataRowType, string name)
|
||||
{
|
||||
return m_DataTableManager.GetDataTable(dataRowType, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有数据表。
|
||||
/// </summary>
|
||||
public DataTableBase[] GetAllDataTables()
|
||||
{
|
||||
return m_DataTableManager.GetAllDataTables();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有数据表。
|
||||
/// </summary>
|
||||
/// <param name="results">所有数据表。</param>
|
||||
public void GetAllDataTables(List<DataTableBase> results)
|
||||
{
|
||||
m_DataTableManager.GetAllDataTables(results);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <returns>要创建的数据表。</returns>
|
||||
public IDataTable<T> CreateDataTable<T>() where T : class, IDataRow, new()
|
||||
{
|
||||
return CreateDataTable<T>(null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <returns>要创建的数据表。</returns>
|
||||
public DataTableBase CreateDataTable(Type dataRowType)
|
||||
{
|
||||
return CreateDataTable(dataRowType, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>要创建的数据表。</returns>
|
||||
public IDataTable<T> CreateDataTable<T>(string name) where T : class, IDataRow, new()
|
||||
{
|
||||
IDataTable<T> dataTable = m_DataTableManager.CreateDataTable<T>(name);
|
||||
DataTableBase dataTableBase = (DataTableBase)dataTable;
|
||||
dataTableBase.ReadDataSuccess += OnReadDataSuccess;
|
||||
dataTableBase.ReadDataFailure += OnReadDataFailure;
|
||||
|
||||
if (m_EnableLoadDataTableUpdateEvent)
|
||||
{
|
||||
dataTableBase.ReadDataUpdate += OnReadDataUpdate;
|
||||
}
|
||||
|
||||
if (m_EnableLoadDataTableDependencyAssetEvent)
|
||||
{
|
||||
dataTableBase.ReadDataDependencyAsset += OnReadDataDependencyAsset;
|
||||
}
|
||||
|
||||
return dataTable;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>要创建的数据表。</returns>
|
||||
public DataTableBase CreateDataTable(Type dataRowType, string name)
|
||||
{
|
||||
DataTableBase dataTable = m_DataTableManager.CreateDataTable(dataRowType, name);
|
||||
dataTable.ReadDataSuccess += OnReadDataSuccess;
|
||||
dataTable.ReadDataFailure += OnReadDataFailure;
|
||||
|
||||
if (m_EnableLoadDataTableUpdateEvent)
|
||||
{
|
||||
dataTable.ReadDataUpdate += OnReadDataUpdate;
|
||||
}
|
||||
|
||||
if (m_EnableLoadDataTableDependencyAssetEvent)
|
||||
{
|
||||
dataTable.ReadDataDependencyAsset += OnReadDataDependencyAsset;
|
||||
}
|
||||
|
||||
return dataTable;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销毁数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <returns>是否销毁数据表成功。</returns>
|
||||
public bool DestroyDataTable<T>() where T : IDataRow, new()
|
||||
{
|
||||
return m_DataTableManager.DestroyDataTable<T>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销毁数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <returns>是否销毁数据表成功。</returns>
|
||||
public bool DestroyDataTable(Type dataRowType)
|
||||
{
|
||||
return m_DataTableManager.DestroyDataTable(dataRowType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销毁数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>是否销毁数据表成功。</returns>
|
||||
public bool DestroyDataTable<T>(string name) where T : IDataRow
|
||||
{
|
||||
return m_DataTableManager.DestroyDataTable<T>(name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销毁数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataRowType">数据表行的类型。</param>
|
||||
/// <param name="name">数据表名称。</param>
|
||||
/// <returns>是否销毁数据表成功。</returns>
|
||||
public bool DestroyDataTable(Type dataRowType, string name)
|
||||
{
|
||||
return m_DataTableManager.DestroyDataTable(dataRowType, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销毁数据表。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">数据表行的类型。</typeparam>
|
||||
/// <param name="dataTable">要销毁的数据表。</param>
|
||||
/// <returns>是否销毁数据表成功。</returns>
|
||||
public bool DestroyDataTable<T>(IDataTable<T> dataTable) where T : IDataRow
|
||||
{
|
||||
return m_DataTableManager.DestroyDataTable(dataTable);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销毁数据表。
|
||||
/// </summary>
|
||||
/// <param name="dataTable">要销毁的数据表。</param>
|
||||
/// <returns>是否销毁数据表成功。</returns>
|
||||
public bool DestroyDataTable(DataTableBase dataTable)
|
||||
{
|
||||
return m_DataTableManager.DestroyDataTable(dataTable);
|
||||
}
|
||||
|
||||
private void OnReadDataSuccess(object sender, ReadDataSuccessEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadDataTableSuccessEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnReadDataFailure(object sender, ReadDataFailureEventArgs e)
|
||||
{
|
||||
Log.Warning("Load data table failure, asset name '{0}', error message '{1}'.", e.DataAssetName, e.ErrorMessage);
|
||||
m_EventComponent.Fire(this, LoadDataTableFailureEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnReadDataUpdate(object sender, ReadDataUpdateEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadDataTableUpdateEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnReadDataDependencyAsset(object sender, ReadDataDependencyAssetEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadDataTableDependencyAssetEventArgs.Create(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user