init
This commit is contained in:
@@ -0,0 +1,408 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Config;
|
||||
using GameFramework.Resource;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 全局配置组件。
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[AddComponentMenu("Game Framework/Config")]
|
||||
public sealed class ConfigComponent : GameFrameworkComponent
|
||||
{
|
||||
private const int DefaultPriority = 0;
|
||||
|
||||
private IConfigManager m_ConfigManager = null;
|
||||
private EventComponent m_EventComponent = null;
|
||||
|
||||
[SerializeField]
|
||||
private bool m_EnableLoadConfigUpdateEvent = false;
|
||||
|
||||
[SerializeField]
|
||||
private bool m_EnableLoadConfigDependencyAssetEvent = false;
|
||||
|
||||
[SerializeField]
|
||||
private string m_ConfigHelperTypeName = "UnityGameFramework.Runtime.DefaultConfigHelper";
|
||||
|
||||
[SerializeField]
|
||||
private ConfigHelperBase m_CustomConfigHelper = null;
|
||||
|
||||
[SerializeField]
|
||||
private int m_CachedBytesSize = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 获取全局配置项数量。
|
||||
/// </summary>
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_ConfigManager.Count;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓冲二进制流的大小。
|
||||
/// </summary>
|
||||
public int CachedBytesSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_ConfigManager.CachedBytesSize;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 游戏框架组件初始化。
|
||||
/// </summary>
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
m_ConfigManager = GameFrameworkEntry.GetModule<IConfigManager>();
|
||||
if (m_ConfigManager == null)
|
||||
{
|
||||
Log.Fatal("Config manager is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
m_ConfigManager.ReadDataSuccess += OnReadDataSuccess;
|
||||
m_ConfigManager.ReadDataFailure += OnReadDataFailure;
|
||||
|
||||
if (m_EnableLoadConfigUpdateEvent)
|
||||
{
|
||||
m_ConfigManager.ReadDataUpdate += OnReadDataUpdate;
|
||||
}
|
||||
|
||||
if (m_EnableLoadConfigDependencyAssetEvent)
|
||||
{
|
||||
m_ConfigManager.ReadDataDependencyAsset += OnReadDataDependencyAsset;
|
||||
}
|
||||
}
|
||||
|
||||
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_ConfigManager.SetResourceManager(baseComponent.EditorResourceHelper);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ConfigManager.SetResourceManager(GameFrameworkEntry.GetModule<IResourceManager>());
|
||||
}
|
||||
|
||||
ConfigHelperBase configHelper = Helper.CreateHelper(m_ConfigHelperTypeName, m_CustomConfigHelper);
|
||||
if (configHelper == null)
|
||||
{
|
||||
Log.Error("Can not create config helper.");
|
||||
return;
|
||||
}
|
||||
|
||||
configHelper.name = "Config Helper";
|
||||
Transform transform = configHelper.transform;
|
||||
transform.SetParent(this.transform);
|
||||
transform.localScale = Vector3.one;
|
||||
|
||||
m_ConfigManager.SetDataProviderHelper(configHelper);
|
||||
m_ConfigManager.SetConfigHelper(configHelper);
|
||||
if (m_CachedBytesSize > 0)
|
||||
{
|
||||
EnsureCachedBytesSize(m_CachedBytesSize);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 确保二进制流缓存分配足够大小的内存并缓存。
|
||||
/// </summary>
|
||||
/// <param name="ensureSize">要确保二进制流缓存分配内存的大小。</param>
|
||||
public void EnsureCachedBytesSize(int ensureSize)
|
||||
{
|
||||
m_ConfigManager.EnsureCachedBytesSize(ensureSize);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 释放缓存的二进制流。
|
||||
/// </summary>
|
||||
public void FreeCachedBytes()
|
||||
{
|
||||
m_ConfigManager.FreeCachedBytes();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
public void ReadData(string configAssetName)
|
||||
{
|
||||
m_ConfigManager.ReadData(configAssetName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="priority">加载全局配置资源的优先级。</param>
|
||||
public void ReadData(string configAssetName, int priority)
|
||||
{
|
||||
m_ConfigManager.ReadData(configAssetName, priority);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
public void ReadData(string configAssetName, object userData)
|
||||
{
|
||||
m_ConfigManager.ReadData(configAssetName, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="priority">加载全局配置资源的优先级。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
public void ReadData(string configAssetName, int priority, object userData)
|
||||
{
|
||||
m_ConfigManager.ReadData(configAssetName, priority, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configString">要解析的全局配置字符串。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public bool ParseData(string configString)
|
||||
{
|
||||
return m_ConfigManager.ParseData(configString);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configString">要解析的全局配置字符串。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public bool ParseData(string configString, object userData)
|
||||
{
|
||||
return m_ConfigManager.ParseData(configString, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configBytes">要解析的全局配置二进制流。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public bool ParseData(byte[] configBytes)
|
||||
{
|
||||
return m_ConfigManager.ParseData(configBytes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configBytes">要解析的全局配置二进制流。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public bool ParseData(byte[] configBytes, object userData)
|
||||
{
|
||||
return m_ConfigManager.ParseData(configBytes, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configBytes">要解析的全局配置二进制流。</param>
|
||||
/// <param name="startIndex">全局配置二进制流的起始位置。</param>
|
||||
/// <param name="length">全局配置二进制流的长度。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public bool ParseData(byte[] configBytes, int startIndex, int length)
|
||||
{
|
||||
return m_ConfigManager.ParseData(configBytes, startIndex, length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configBytes">要解析的全局配置二进制流。</param>
|
||||
/// <param name="startIndex">全局配置二进制流的起始位置。</param>
|
||||
/// <param name="length">全局配置二进制流的长度。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public bool ParseData(byte[] configBytes, int startIndex, int length, object userData)
|
||||
{
|
||||
return m_ConfigManager.ParseData(configBytes, startIndex, length, userData);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查是否存在指定全局配置项。
|
||||
/// </summary>
|
||||
/// <param name="configName">要检查全局配置项的名称。</param>
|
||||
/// <returns>指定的全局配置项是否存在。</returns>
|
||||
public bool HasConfig(string configName)
|
||||
{
|
||||
return m_ConfigManager.HasConfig(configName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取布尔值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <returns>读取的布尔值。</returns>
|
||||
public bool GetBool(string configName)
|
||||
{
|
||||
return m_ConfigManager.GetBool(configName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取布尔值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
|
||||
/// <returns>读取的布尔值。</returns>
|
||||
public bool GetBool(string configName, bool defaultValue)
|
||||
{
|
||||
return m_ConfigManager.GetBool(configName, defaultValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取整数值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <returns>读取的整数值。</returns>
|
||||
public int GetInt(string configName)
|
||||
{
|
||||
return m_ConfigManager.GetInt(configName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取整数值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
|
||||
/// <returns>读取的整数值。</returns>
|
||||
public int GetInt(string configName, int defaultValue)
|
||||
{
|
||||
return m_ConfigManager.GetInt(configName, defaultValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取浮点数值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <returns>读取的浮点数值。</returns>
|
||||
public float GetFloat(string configName)
|
||||
{
|
||||
return m_ConfigManager.GetFloat(configName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取浮点数值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
|
||||
/// <returns>读取的浮点数值。</returns>
|
||||
public float GetFloat(string configName, float defaultValue)
|
||||
{
|
||||
return m_ConfigManager.GetFloat(configName, defaultValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取字符串值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <returns>读取的字符串值。</returns>
|
||||
public string GetString(string configName)
|
||||
{
|
||||
return m_ConfigManager.GetString(configName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从指定全局配置项中读取字符串值。
|
||||
/// </summary>
|
||||
/// <param name="configName">要获取全局配置项的名称。</param>
|
||||
/// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
|
||||
/// <returns>读取的字符串值。</returns>
|
||||
public string GetString(string configName, string defaultValue)
|
||||
{
|
||||
return m_ConfigManager.GetString(configName, defaultValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加指定全局配置项。
|
||||
/// </summary>
|
||||
/// <param name="configName">要增加全局配置项的名称。</param>
|
||||
/// <param name="boolValue">全局配置项布尔值。</param>
|
||||
/// <param name="intValue">全局配置项整数值。</param>
|
||||
/// <param name="floatValue">全局配置项浮点数值。</param>
|
||||
/// <param name="stringValue">全局配置项字符串值。</param>
|
||||
/// <returns>是否增加全局配置项成功。</returns>
|
||||
public bool AddConfig(string configName, bool boolValue, int intValue, float floatValue, string stringValue)
|
||||
{
|
||||
return m_ConfigManager.AddConfig(configName, boolValue, intValue, floatValue, stringValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除指定全局配置项。
|
||||
/// </summary>
|
||||
/// <param name="configName">要移除全局配置项的名称。</param>
|
||||
/// <returns>是否移除全局配置项成功。</returns>
|
||||
public bool RemoveConfig(string configName)
|
||||
{
|
||||
return m_ConfigManager.RemoveConfig(configName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清空所有全局配置项。
|
||||
/// </summary>
|
||||
public void RemoveAllConfigs()
|
||||
{
|
||||
m_ConfigManager.RemoveAllConfigs();
|
||||
}
|
||||
|
||||
private void OnReadDataSuccess(object sender, ReadDataSuccessEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadConfigSuccessEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnReadDataFailure(object sender, ReadDataFailureEventArgs e)
|
||||
{
|
||||
Log.Warning("Load config failure, asset name '{0}', error message '{1}'.", e.DataAssetName, e.ErrorMessage);
|
||||
m_EventComponent.Fire(this, LoadConfigFailureEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnReadDataUpdate(object sender, ReadDataUpdateEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadConfigUpdateEventArgs.Create(e));
|
||||
}
|
||||
|
||||
private void OnReadDataDependencyAsset(object sender, ReadDataDependencyAssetEventArgs e)
|
||||
{
|
||||
m_EventComponent.Fire(this, LoadConfigDependencyAssetEventArgs.Create(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3e847b2b3e22e9b4792ca7ea6e1714c6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,68 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Config;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 全局配置辅助器基类。
|
||||
/// </summary>
|
||||
public abstract class ConfigHelperBase : MonoBehaviour, IDataProviderHelper<IConfigManager>, IConfigHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="configAsset">全局配置资源。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否读取全局配置成功。</returns>
|
||||
public abstract bool ReadData(IConfigManager configManager, string configAssetName, object configAsset, object userData);
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="configBytes">全局配置二进制流。</param>
|
||||
/// <param name="startIndex">全局配置二进制流的起始位置。</param>
|
||||
/// <param name="length">全局配置二进制流的长度。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否读取全局配置成功。</returns>
|
||||
public abstract bool ReadData(IConfigManager configManager, string configAssetName, byte[] configBytes, int startIndex, int length, object userData);
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configString">要解析的全局配置字符串。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public abstract bool ParseData(IConfigManager configManager, string configString, object userData);
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configBytes">要解析的全局配置二进制流。</param>
|
||||
/// <param name="startIndex">全局配置二进制流的起始位置。</param>
|
||||
/// <param name="length">全局配置二进制流的长度。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public abstract bool ParseData(IConfigManager configManager, byte[] configBytes, int startIndex, int length, object userData);
|
||||
|
||||
/// <summary>
|
||||
/// 释放全局配置资源。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configAsset">要释放的全局配置资源。</param>
|
||||
public abstract void ReleaseDataAsset(IConfigManager configManager, object configAsset);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5588940f3b356ec4b9cee3c5b4a905f2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,181 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Config;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认全局配置辅助器。
|
||||
/// </summary>
|
||||
public class DefaultConfigHelper : ConfigHelperBase
|
||||
{
|
||||
private static readonly string[] ColumnSplitSeparator = new string[] { "\t" };
|
||||
private static readonly string BytesAssetExtension = ".bytes";
|
||||
private const int ColumnCount = 4;
|
||||
|
||||
private ResourceComponent m_ResourceComponent = null;
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="configAsset">全局配置资源。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否读取全局配置成功。</returns>
|
||||
public override bool ReadData(IConfigManager configManager, string configAssetName, object configAsset, object userData)
|
||||
{
|
||||
TextAsset configTextAsset = configAsset as TextAsset;
|
||||
if (configTextAsset != null)
|
||||
{
|
||||
if (configAssetName.EndsWith(BytesAssetExtension, StringComparison.Ordinal))
|
||||
{
|
||||
return configManager.ParseData(configTextAsset.bytes, userData);
|
||||
}
|
||||
else
|
||||
{
|
||||
return configManager.ParseData(configTextAsset.text, userData);
|
||||
}
|
||||
}
|
||||
|
||||
Log.Warning("Config asset '{0}' is invalid.", configAssetName);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configAssetName">全局配置资源名称。</param>
|
||||
/// <param name="configBytes">全局配置二进制流。</param>
|
||||
/// <param name="startIndex">全局配置二进制流的起始位置。</param>
|
||||
/// <param name="length">全局配置二进制流的长度。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否读取全局配置成功。</returns>
|
||||
public override bool ReadData(IConfigManager configManager, string configAssetName, byte[] configBytes, int startIndex, int length, object userData)
|
||||
{
|
||||
if (configAssetName.EndsWith(BytesAssetExtension, StringComparison.Ordinal))
|
||||
{
|
||||
return configManager.ParseData(configBytes, startIndex, length, userData);
|
||||
}
|
||||
else
|
||||
{
|
||||
return configManager.ParseData(Utility.Converter.GetString(configBytes, startIndex, length), userData);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configString">要解析的全局配置字符串。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public override bool ParseData(IConfigManager configManager, string configString, object userData)
|
||||
{
|
||||
try
|
||||
{
|
||||
int position = 0;
|
||||
string configLineString = null;
|
||||
while ((configLineString = configString.ReadLine(ref position)) != null)
|
||||
{
|
||||
if (configLineString[0] == '#')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
string[] splitedLine = configLineString.Split(ColumnSplitSeparator, StringSplitOptions.None);
|
||||
if (splitedLine.Length != ColumnCount)
|
||||
{
|
||||
Log.Warning("Can not parse config line string '{0}' which column count is invalid.", configLineString);
|
||||
return false;
|
||||
}
|
||||
|
||||
string configName = splitedLine[1];
|
||||
string configValue = splitedLine[3];
|
||||
if (!configManager.AddConfig(configName, configValue))
|
||||
{
|
||||
Log.Warning("Can not add config with config name '{0}' which may be invalid or duplicate.", configName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
Log.Warning("Can not parse config string with exception '{0}'.", exception);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解析全局配置。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configBytes">要解析的全局配置二进制流。</param>
|
||||
/// <param name="startIndex">全局配置二进制流的起始位置。</param>
|
||||
/// <param name="length">全局配置二进制流的长度。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
/// <returns>是否解析全局配置成功。</returns>
|
||||
public override bool ParseData(IConfigManager configManager, byte[] configBytes, int startIndex, int length, object userData)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (MemoryStream memoryStream = new MemoryStream(configBytes, startIndex, length, false))
|
||||
{
|
||||
using (BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.UTF8))
|
||||
{
|
||||
while (binaryReader.BaseStream.Position < binaryReader.BaseStream.Length)
|
||||
{
|
||||
string configName = binaryReader.ReadString();
|
||||
string configValue = binaryReader.ReadString();
|
||||
if (!configManager.AddConfig(configName, configValue))
|
||||
{
|
||||
Log.Warning("Can not add config with config name '{0}' which may be invalid or duplicate.", configName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
Log.Warning("Can not parse config bytes with exception '{0}'.", exception);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 释放全局配置资源。
|
||||
/// </summary>
|
||||
/// <param name="configManager">全局配置管理器。</param>
|
||||
/// <param name="configAsset">要释放的全局配置资源。</param>
|
||||
public override void ReleaseDataAsset(IConfigManager configManager, object configAsset)
|
||||
{
|
||||
m_ResourceComponent.UnloadAsset(configAsset);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
m_ResourceComponent = GameEntry.GetComponent<ResourceComponent>();
|
||||
if (m_ResourceComponent == null)
|
||||
{
|
||||
Log.Fatal("Resource component is invalid.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c039b1ea5c75e24fa12a58ab3227ab7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,119 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置时加载依赖资源事件。
|
||||
/// </summary>
|
||||
public sealed class LoadConfigDependencyAssetEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置失败事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadConfigDependencyAssetEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载全局配置时加载依赖资源事件的新实例。
|
||||
/// </summary>
|
||||
public LoadConfigDependencyAssetEventArgs()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
DependencyAssetName = null;
|
||||
LoadedCount = 0;
|
||||
TotalCount = 0;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载全局配置失败事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取全局配置资源名称。
|
||||
/// </summary>
|
||||
public string ConfigAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取被加载的依赖资源名称。
|
||||
/// </summary>
|
||||
public string DependencyAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前已加载依赖资源数量。
|
||||
/// </summary>
|
||||
public int LoadedCount
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取总共加载依赖资源数量。
|
||||
/// </summary>
|
||||
public int TotalCount
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载全局配置时加载依赖资源事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载全局配置时加载依赖资源事件。</returns>
|
||||
public static LoadConfigDependencyAssetEventArgs Create(ReadDataDependencyAssetEventArgs e)
|
||||
{
|
||||
LoadConfigDependencyAssetEventArgs loadConfigDependencyAssetEventArgs = ReferencePool.Acquire<LoadConfigDependencyAssetEventArgs>();
|
||||
loadConfigDependencyAssetEventArgs.ConfigAssetName = e.DataAssetName;
|
||||
loadConfigDependencyAssetEventArgs.DependencyAssetName = e.DependencyAssetName;
|
||||
loadConfigDependencyAssetEventArgs.LoadedCount = e.LoadedCount;
|
||||
loadConfigDependencyAssetEventArgs.TotalCount = e.TotalCount;
|
||||
loadConfigDependencyAssetEventArgs.UserData = e.UserData;
|
||||
return loadConfigDependencyAssetEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载全局配置时加载依赖资源事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
DependencyAssetName = null;
|
||||
LoadedCount = 0;
|
||||
TotalCount = 0;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 224a6c56bac19dc47b5a08f772e59af1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置失败事件。
|
||||
/// </summary>
|
||||
public sealed class LoadConfigFailureEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置失败事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadConfigFailureEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载全局配置失败事件的新实例。
|
||||
/// </summary>
|
||||
public LoadConfigFailureEventArgs()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
ErrorMessage = null;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载全局配置失败事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取全局配置资源名称。
|
||||
/// </summary>
|
||||
public string ConfigAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取错误信息。
|
||||
/// </summary>
|
||||
public string ErrorMessage
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载全局配置失败事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载全局配置失败事件。</returns>
|
||||
public static LoadConfigFailureEventArgs Create(ReadDataFailureEventArgs e)
|
||||
{
|
||||
LoadConfigFailureEventArgs loadConfigFailureEventArgs = ReferencePool.Acquire<LoadConfigFailureEventArgs>();
|
||||
loadConfigFailureEventArgs.ConfigAssetName = e.DataAssetName;
|
||||
loadConfigFailureEventArgs.ErrorMessage = e.ErrorMessage;
|
||||
loadConfigFailureEventArgs.UserData = e.UserData;
|
||||
return loadConfigFailureEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载全局配置失败事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
ErrorMessage = null;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ca7b842aaf795c6428b7a23287dec802
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置成功事件。
|
||||
/// </summary>
|
||||
public sealed class LoadConfigSuccessEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置成功事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadConfigSuccessEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载全局配置成功事件编号的新实例。
|
||||
/// </summary>
|
||||
public LoadConfigSuccessEventArgs()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
Duration = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载全局配置成功事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取全局配置资源名称。
|
||||
/// </summary>
|
||||
public string ConfigAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载持续时间。
|
||||
/// </summary>
|
||||
public float Duration
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载全局配置成功事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载全局配置成功事件。</returns>
|
||||
public static LoadConfigSuccessEventArgs Create(ReadDataSuccessEventArgs e)
|
||||
{
|
||||
LoadConfigSuccessEventArgs loadConfigSuccessEventArgs = ReferencePool.Acquire<LoadConfigSuccessEventArgs>();
|
||||
loadConfigSuccessEventArgs.ConfigAssetName = e.DataAssetName;
|
||||
loadConfigSuccessEventArgs.Duration = e.Duration;
|
||||
loadConfigSuccessEventArgs.UserData = e.UserData;
|
||||
return loadConfigSuccessEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载全局配置成功事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
Duration = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8edee6cdf050d4f47ac48581f944d4ae
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,95 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置更新事件。
|
||||
/// </summary>
|
||||
public sealed class LoadConfigUpdateEventArgs : GameEventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 加载全局配置失败事件编号。
|
||||
/// </summary>
|
||||
public static readonly int EventId = typeof(LoadConfigUpdateEventArgs).GetHashCode();
|
||||
|
||||
/// <summary>
|
||||
/// 初始化加载全局配置更新事件的新实例。
|
||||
/// </summary>
|
||||
public LoadConfigUpdateEventArgs()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
Progress = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载全局配置失败事件编号。
|
||||
/// </summary>
|
||||
public override int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
return EventId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取全局配置资源名称。
|
||||
/// </summary>
|
||||
public string ConfigAssetName
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取加载全局配置进度。
|
||||
/// </summary>
|
||||
public float Progress
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户自定义数据。
|
||||
/// </summary>
|
||||
public object UserData
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建加载全局配置更新事件。
|
||||
/// </summary>
|
||||
/// <param name="e">内部事件。</param>
|
||||
/// <returns>创建的加载全局配置更新事件。</returns>
|
||||
public static LoadConfigUpdateEventArgs Create(ReadDataUpdateEventArgs e)
|
||||
{
|
||||
LoadConfigUpdateEventArgs loadConfigUpdateEventArgs = ReferencePool.Acquire<LoadConfigUpdateEventArgs>();
|
||||
loadConfigUpdateEventArgs.ConfigAssetName = e.DataAssetName;
|
||||
loadConfigUpdateEventArgs.Progress = e.Progress;
|
||||
loadConfigUpdateEventArgs.UserData = e.UserData;
|
||||
return loadConfigUpdateEventArgs;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清理加载全局配置更新事件。
|
||||
/// </summary>
|
||||
public override void Clear()
|
||||
{
|
||||
ConfigAssetName = null;
|
||||
Progress = 0f;
|
||||
UserData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 07c976efcbda2464bb7ef36e80504f3a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user