Full Code of EllanJiang/GameFramework for AI

master d0c010b05167 cached
335 files
1.9 MB
476.5k tokens
3032 symbols
1 requests
Download .txt
Showing preview only (2,096K chars total). Download the full file or copy to clipboard to get everything.
Repository: EllanJiang/GameFramework
Branch: master
Commit: d0c010b05167
Files: 335
Total size: 1.9 MB

Directory structure:
gitextract_cx5fvckj/

├── .gitignore
├── GameFramework/
│   ├── Base/
│   │   ├── DataProvider/
│   │   │   ├── DataProvider.cs
│   │   │   ├── DataProviderCreator.cs
│   │   │   ├── IDataProvider.cs
│   │   │   ├── IDataProviderHelper.cs
│   │   │   ├── ReadDataDependencyAssetEventArgs.cs
│   │   │   ├── ReadDataFailureEventArgs.cs
│   │   │   ├── ReadDataSuccessEventArgs.cs
│   │   │   └── ReadDataUpdateEventArgs.cs
│   │   ├── DataStruct/
│   │   │   └── TypeNamePair.cs
│   │   ├── EventPool/
│   │   │   ├── BaseEventArgs.cs
│   │   │   ├── EventPool.Event.cs
│   │   │   ├── EventPool.cs
│   │   │   └── EventPoolMode.cs
│   │   ├── GameFrameworkAction.cs
│   │   ├── GameFrameworkEntry.cs
│   │   ├── GameFrameworkEventArgs.cs
│   │   ├── GameFrameworkException.cs
│   │   ├── GameFrameworkFunc.cs
│   │   ├── GameFrameworkLinkedList.cs
│   │   ├── GameFrameworkLinkedListRange.cs
│   │   ├── GameFrameworkModule.cs
│   │   ├── GameFrameworkMultiDictionary.cs
│   │   ├── GameFrameworkSerializer.cs
│   │   ├── Log/
│   │   │   ├── GameFrameworkLog.ILogHelper.cs
│   │   │   ├── GameFrameworkLog.cs
│   │   │   └── GameFrameworkLogLevel.cs
│   │   ├── ReferencePool/
│   │   │   ├── IReference.cs
│   │   │   ├── ReferencePool.ReferenceCollection.cs
│   │   │   ├── ReferencePool.cs
│   │   │   └── ReferencePoolInfo.cs
│   │   ├── TaskPool/
│   │   │   ├── ITaskAgent.cs
│   │   │   ├── StartTaskStatus.cs
│   │   │   ├── TaskBase.cs
│   │   │   ├── TaskInfo.cs
│   │   │   ├── TaskPool.cs
│   │   │   └── TaskStatus.cs
│   │   ├── Variable/
│   │   │   ├── GenericVariable.cs
│   │   │   └── Variable.cs
│   │   └── Version/
│   │       ├── Version.IVersionHelper.cs
│   │       └── Version.cs
│   ├── Config/
│   │   ├── ConfigManager.ConfigData.cs
│   │   ├── ConfigManager.cs
│   │   ├── IConfigHelper.cs
│   │   └── IConfigManager.cs
│   ├── DataNode/
│   │   ├── DataNodeManager.DataNode.cs
│   │   ├── DataNodeManager.cs
│   │   ├── IDataNode.cs
│   │   └── IDataNodeManager.cs
│   ├── DataTable/
│   │   ├── DataTableBase.cs
│   │   ├── DataTableManager.DataTable.cs
│   │   ├── DataTableManager.cs
│   │   ├── IDataRow.cs
│   │   ├── IDataTable.cs
│   │   ├── IDataTableHelper.cs
│   │   └── IDataTableManager.cs
│   ├── Debugger/
│   │   ├── DebuggerManager.DebuggerWindowGroup.cs
│   │   ├── DebuggerManager.cs
│   │   ├── IDebuggerManager.cs
│   │   ├── IDebuggerWindow.cs
│   │   └── IDebuggerWindowGroup.cs
│   ├── Download/
│   │   ├── Constant.cs
│   │   ├── DownloadAgentHelperCompleteEventArgs.cs
│   │   ├── DownloadAgentHelperErrorEventArgs.cs
│   │   ├── DownloadAgentHelperUpdateBytesEventArgs.cs
│   │   ├── DownloadAgentHelperUpdateLengthEventArgs.cs
│   │   ├── DownloadFailureEventArgs.cs
│   │   ├── DownloadManager.DownloadAgent.cs
│   │   ├── DownloadManager.DownloadCounter.DownloadCounterNode.cs
│   │   ├── DownloadManager.DownloadCounter.cs
│   │   ├── DownloadManager.DownloadTask.cs
│   │   ├── DownloadManager.DownloadTaskStatus.cs
│   │   ├── DownloadManager.cs
│   │   ├── DownloadStartEventArgs.cs
│   │   ├── DownloadSuccessEventArgs.cs
│   │   ├── DownloadUpdateEventArgs.cs
│   │   ├── IDownloadAgentHelper.cs
│   │   └── IDownloadManager.cs
│   ├── Entity/
│   │   ├── EntityManager.EntityGroup.cs
│   │   ├── EntityManager.EntityInfo.cs
│   │   ├── EntityManager.EntityInstanceObject.cs
│   │   ├── EntityManager.EntityStatus.cs
│   │   ├── EntityManager.ShowEntityInfo.cs
│   │   ├── EntityManager.cs
│   │   ├── HideEntityCompleteEventArgs.cs
│   │   ├── IEntity.cs
│   │   ├── IEntityGroup.cs
│   │   ├── IEntityGroupHelper.cs
│   │   ├── IEntityHelper.cs
│   │   ├── IEntityManager.cs
│   │   ├── ShowEntityDependencyAssetEventArgs.cs
│   │   ├── ShowEntityFailureEventArgs.cs
│   │   ├── ShowEntitySuccessEventArgs.cs
│   │   └── ShowEntityUpdateEventArgs.cs
│   ├── Event/
│   │   ├── EventManager.cs
│   │   ├── GameEventArgs.cs
│   │   └── IEventManager.cs
│   ├── FileSystem/
│   │   ├── CommonFileSystemStream.cs
│   │   ├── FileInfo.cs
│   │   ├── FileSystem.BlockData.cs
│   │   ├── FileSystem.HeaderData.cs
│   │   ├── FileSystem.StringData.cs
│   │   ├── FileSystem.cs
│   │   ├── FileSystemAccess.cs
│   │   ├── FileSystemManager.cs
│   │   ├── FileSystemStream.cs
│   │   ├── IFileSystem.cs
│   │   ├── IFileSystemHelper.cs
│   │   └── IFileSystemManager.cs
│   ├── Fsm/
│   │   ├── Fsm.cs
│   │   ├── FsmBase.cs
│   │   ├── FsmManager.cs
│   │   ├── FsmState.cs
│   │   ├── IFsm.cs
│   │   └── IFsmManager.cs
│   ├── GameFramework.csproj
│   ├── Localization/
│   │   ├── ILocalizationHelper.cs
│   │   ├── ILocalizationManager.cs
│   │   ├── Language.cs
│   │   └── LocalizationManager.cs
│   ├── Network/
│   │   ├── AddressFamily.cs
│   │   ├── INetworkChannel.cs
│   │   ├── INetworkChannelHelper.cs
│   │   ├── INetworkManager.cs
│   │   ├── IPacketHandler.cs
│   │   ├── IPacketHeader.cs
│   │   ├── NetworkClosedEventArgs.cs
│   │   ├── NetworkConnectedEventArgs.cs
│   │   ├── NetworkCustomErrorEventArgs.cs
│   │   ├── NetworkErrorCode.cs
│   │   ├── NetworkErrorEventArgs.cs
│   │   ├── NetworkManager.ConnectState.cs
│   │   ├── NetworkManager.HeartBeatState.cs
│   │   ├── NetworkManager.NetworkChannelBase.cs
│   │   ├── NetworkManager.ReceiveState.cs
│   │   ├── NetworkManager.SendState.cs
│   │   ├── NetworkManager.TcpNetworkChannel.cs
│   │   ├── NetworkManager.TcpWithSyncReceiveNetworkChannel.cs
│   │   ├── NetworkManager.cs
│   │   ├── NetworkMissHeartBeatEventArgs.cs
│   │   ├── Packet.cs
│   │   └── ServiceType.cs
│   ├── ObjectPool/
│   │   ├── IObjectPool.cs
│   │   ├── IObjectPoolManager.cs
│   │   ├── ObjectBase.cs
│   │   ├── ObjectInfo.cs
│   │   ├── ObjectPoolBase.cs
│   │   ├── ObjectPoolManager.Object.cs
│   │   ├── ObjectPoolManager.ObjectPool.cs
│   │   ├── ObjectPoolManager.cs
│   │   └── ReleaseObjectFilterCallback.cs
│   ├── Procedure/
│   │   ├── IProcedureManager.cs
│   │   ├── ProcedureBase.cs
│   │   └── ProcedureManager.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Resource/
│   │   ├── ApplyResourcesCompleteCallback.cs
│   │   ├── CheckResourcesCompleteCallback.cs
│   │   ├── CheckVersionListResult.cs
│   │   ├── Constant.cs
│   │   ├── DecryptResourceCallback.cs
│   │   ├── HasAssetResult.cs
│   │   ├── ILoadResourceAgentHelper.cs
│   │   ├── IResourceGroup.cs
│   │   ├── IResourceGroupCollection.cs
│   │   ├── IResourceHelper.cs
│   │   ├── IResourceManager.cs
│   │   ├── InitResourcesCompleteCallback.cs
│   │   ├── LoadAssetCallbacks.cs
│   │   ├── LoadAssetDependencyAssetCallback.cs
│   │   ├── LoadAssetFailureCallback.cs
│   │   ├── LoadAssetSuccessCallback.cs
│   │   ├── LoadAssetUpdateCallback.cs
│   │   ├── LoadBinaryCallbacks.cs
│   │   ├── LoadBinaryFailureCallback.cs
│   │   ├── LoadBinarySuccessCallback.cs
│   │   ├── LoadBytesCallbacks.cs
│   │   ├── LoadBytesFailureCallback.cs
│   │   ├── LoadBytesSuccessCallback.cs
│   │   ├── LoadResourceAgentHelperErrorEventArgs.cs
│   │   ├── LoadResourceAgentHelperLoadCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperParseBytesCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperReadBytesCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperReadFileCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperUpdateEventArgs.cs
│   │   ├── LoadResourceProgress.cs
│   │   ├── LoadResourceStatus.cs
│   │   ├── LoadSceneCallbacks.cs
│   │   ├── LoadSceneDependencyAssetCallback.cs
│   │   ├── LoadSceneFailureCallback.cs
│   │   ├── LoadSceneSuccessCallback.cs
│   │   ├── LoadSceneUpdateCallback.cs
│   │   ├── LocalVersionList.FileSystem.cs
│   │   ├── LocalVersionList.Resource.cs
│   │   ├── LocalVersionList.cs
│   │   ├── PackageVersionList.Asset.cs
│   │   ├── PackageVersionList.FileSystem.cs
│   │   ├── PackageVersionList.Resource.cs
│   │   ├── PackageVersionList.ResourceGroup.cs
│   │   ├── PackageVersionList.cs
│   │   ├── PackageVersionListSerializer.cs
│   │   ├── ReadOnlyVersionListSerializer.cs
│   │   ├── ReadWriteVersionListSerializer.cs
│   │   ├── ResourceApplyFailureEventArgs.cs
│   │   ├── ResourceApplyStartEventArgs.cs
│   │   ├── ResourceApplySuccessEventArgs.cs
│   │   ├── ResourceManager.AssetInfo.cs
│   │   ├── ResourceManager.LoadType.cs
│   │   ├── ResourceManager.ReadWriteResourceInfo.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.CheckStatus.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.LocalVersionInfo.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.RemoteVersionInfo.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.cs
│   │   ├── ResourceManager.ResourceChecker.cs
│   │   ├── ResourceManager.ResourceGroup.cs
│   │   ├── ResourceManager.ResourceGroupCollection.cs
│   │   ├── ResourceManager.ResourceInfo.cs
│   │   ├── ResourceManager.ResourceIniter.cs
│   │   ├── ResourceManager.ResourceLoader.AssetObject.cs
│   │   ├── ResourceManager.ResourceLoader.LoadAssetTask.cs
│   │   ├── ResourceManager.ResourceLoader.LoadBinaryInfo.cs
│   │   ├── ResourceManager.ResourceLoader.LoadDependencyAssetTask.cs
│   │   ├── ResourceManager.ResourceLoader.LoadResourceAgent.cs
│   │   ├── ResourceManager.ResourceLoader.LoadResourceTaskBase.cs
│   │   ├── ResourceManager.ResourceLoader.LoadSceneTask.cs
│   │   ├── ResourceManager.ResourceLoader.ResourceObject.cs
│   │   ├── ResourceManager.ResourceLoader.cs
│   │   ├── ResourceManager.ResourceName.cs
│   │   ├── ResourceManager.ResourceNameComparer.cs
│   │   ├── ResourceManager.ResourceUpdater.ApplyInfo.cs
│   │   ├── ResourceManager.ResourceUpdater.UpdateInfo.cs
│   │   ├── ResourceManager.ResourceUpdater.cs
│   │   ├── ResourceManager.ResourceVerifier.VerifyInfo.cs
│   │   ├── ResourceManager.ResourceVerifier.cs
│   │   ├── ResourceManager.VersionListProcessor.cs
│   │   ├── ResourceManager.cs
│   │   ├── ResourceMode.cs
│   │   ├── ResourcePackVersionList.Resource.cs
│   │   ├── ResourcePackVersionList.cs
│   │   ├── ResourcePackVersionListSerializer.cs
│   │   ├── ResourceUpdateAllCompleteEventArgs.cs
│   │   ├── ResourceUpdateChangedEventArgs.cs
│   │   ├── ResourceUpdateFailureEventArgs.cs
│   │   ├── ResourceUpdateStartEventArgs.cs
│   │   ├── ResourceUpdateSuccessEventArgs.cs
│   │   ├── ResourceVerifyFailureEventArgs.cs
│   │   ├── ResourceVerifyStartEventArgs.cs
│   │   ├── ResourceVerifySuccessEventArgs.cs
│   │   ├── UnloadSceneCallbacks.cs
│   │   ├── UnloadSceneFailureCallback.cs
│   │   ├── UnloadSceneSuccessCallback.cs
│   │   ├── UpdatableVersionList.Asset.cs
│   │   ├── UpdatableVersionList.FileSystem.cs
│   │   ├── UpdatableVersionList.Resource.cs
│   │   ├── UpdatableVersionList.ResourceGroup.cs
│   │   ├── UpdatableVersionList.cs
│   │   ├── UpdatableVersionListSerializer.cs
│   │   ├── UpdateResourcesCompleteCallback.cs
│   │   ├── UpdateVersionListCallbacks.cs
│   │   ├── UpdateVersionListFailureCallback.cs
│   │   ├── UpdateVersionListSuccessCallback.cs
│   │   └── VerifyResourcesCompleteCallback.cs
│   ├── Scene/
│   │   ├── ISceneManager.cs
│   │   ├── LoadSceneDependencyAssetEventArgs.cs
│   │   ├── LoadSceneFailureEventArgs.cs
│   │   ├── LoadSceneSuccessEventArgs.cs
│   │   ├── LoadSceneUpdateEventArgs.cs
│   │   ├── SceneManager.cs
│   │   ├── UnloadSceneFailureEventArgs.cs
│   │   └── UnloadSceneSuccessEventArgs.cs
│   ├── Setting/
│   │   ├── ISettingHelper.cs
│   │   ├── ISettingManager.cs
│   │   └── SettingManager.cs
│   ├── Sound/
│   │   ├── Constant.cs
│   │   ├── ISoundAgent.cs
│   │   ├── ISoundAgentHelper.cs
│   │   ├── ISoundGroup.cs
│   │   ├── ISoundGroupHelper.cs
│   │   ├── ISoundHelper.cs
│   │   ├── ISoundManager.cs
│   │   ├── PlaySoundDependencyAssetEventArgs.cs
│   │   ├── PlaySoundErrorCode.cs
│   │   ├── PlaySoundFailureEventArgs.cs
│   │   ├── PlaySoundParams.cs
│   │   ├── PlaySoundSuccessEventArgs.cs
│   │   ├── PlaySoundUpdateEventArgs.cs
│   │   ├── ResetSoundAgentEventArgs.cs
│   │   ├── SoundManager.PlaySoundInfo.cs
│   │   ├── SoundManager.SoundAgent.cs
│   │   ├── SoundManager.SoundGroup.cs
│   │   └── SoundManager.cs
│   ├── UI/
│   │   ├── CloseUIFormCompleteEventArgs.cs
│   │   ├── IUIForm.cs
│   │   ├── IUIFormHelper.cs
│   │   ├── IUIGroup.cs
│   │   ├── IUIGroupHelper.cs
│   │   ├── IUIManager.cs
│   │   ├── OpenUIFormDependencyAssetEventArgs.cs
│   │   ├── OpenUIFormFailureEventArgs.cs
│   │   ├── OpenUIFormSuccessEventArgs.cs
│   │   ├── OpenUIFormUpdateEventArgs.cs
│   │   ├── UIManager.OpenUIFormInfo.cs
│   │   ├── UIManager.UIFormInstanceObject.cs
│   │   ├── UIManager.UIGroup.UIFormInfo.cs
│   │   ├── UIManager.UIGroup.cs
│   │   └── UIManager.cs
│   ├── Utility/
│   │   ├── Utility.Assembly.cs
│   │   ├── Utility.Compression.ICompressionHelper.cs
│   │   ├── Utility.Compression.cs
│   │   ├── Utility.Converter.cs
│   │   ├── Utility.Encryption.cs
│   │   ├── Utility.Json.IJsonHelper.cs
│   │   ├── Utility.Json.cs
│   │   ├── Utility.Marshal.cs
│   │   ├── Utility.Path.cs
│   │   ├── Utility.Random.cs
│   │   ├── Utility.Text.ITextHelper.cs
│   │   ├── Utility.Text.cs
│   │   ├── Utility.Verifier.Crc32.cs
│   │   ├── Utility.Verifier.cs
│   │   └── Utility.cs
│   └── WebRequest/
│       ├── Constant.cs
│       ├── IWebRequestAgentHelper.cs
│       ├── IWebRequestManager.cs
│       ├── WebRequestAgentHelperCompleteEventArgs.cs
│       ├── WebRequestAgentHelperErrorEventArgs.cs
│       ├── WebRequestFailureEventArgs.cs
│       ├── WebRequestManager.WebRequestAgent.cs
│       ├── WebRequestManager.WebRequestTask.cs
│       ├── WebRequestManager.WebRequestTaskStatus.cs
│       ├── WebRequestManager.cs
│       ├── WebRequestStartEventArgs.cs
│       └── WebRequestSuccessEventArgs.cs
├── GameFramework.sln
├── LICENSE.md
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile

# Visual Studio profiler
*.psess
*.vsp
*.vspx

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
## TODO: Comment the next line if you want to checkin your
## web deploy settings but do note that will include unencrypted
## passwords
#*.pubxml

*.publishproj

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config

# Windows Azure Build Output
csx/
*.build.csdef

# Windows Store app package directory
AppPackages/

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml


================================================
FILE: GameFramework/Base/DataProvider/DataProvider.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using GameFramework.Resource;
using System;

namespace GameFramework
{
    /// <summary>
    /// 数据提供者。
    /// </summary>
    /// <typeparam name="T">数据提供者的持有者的类型。</typeparam>
    internal sealed class DataProvider<T> : IDataProvider<T>
    {
        private const int BlockSize = 1024 * 4;
        private static byte[] s_CachedBytes = null;

        private readonly T m_Owner;
        private readonly LoadAssetCallbacks m_LoadAssetCallbacks;
        private readonly LoadBinaryCallbacks m_LoadBinaryCallbacks;
        private IResourceManager m_ResourceManager;
        private IDataProviderHelper<T> m_DataProviderHelper;
        private EventHandler<ReadDataSuccessEventArgs> m_ReadDataSuccessEventHandler;
        private EventHandler<ReadDataFailureEventArgs> m_ReadDataFailureEventHandler;
        private EventHandler<ReadDataUpdateEventArgs> m_ReadDataUpdateEventHandler;
        private EventHandler<ReadDataDependencyAssetEventArgs> m_ReadDataDependencyAssetEventHandler;

        /// <summary>
        /// 初始化数据提供者的新实例。
        /// </summary>
        /// <param name="owner">数据提供者的持有者。</param>
        public DataProvider(T owner)
        {
            m_Owner = owner;
            m_LoadAssetCallbacks = new LoadAssetCallbacks(LoadAssetSuccessCallback, LoadAssetOrBinaryFailureCallback, LoadAssetUpdateCallback, LoadAssetDependencyAssetCallback);
            m_LoadBinaryCallbacks = new LoadBinaryCallbacks(LoadBinarySuccessCallback, LoadAssetOrBinaryFailureCallback);
            m_ResourceManager = null;
            m_DataProviderHelper = null;
            m_ReadDataSuccessEventHandler = null;
            m_ReadDataFailureEventHandler = null;
            m_ReadDataUpdateEventHandler = null;
            m_ReadDataDependencyAssetEventHandler = null;
        }

        /// <summary>
        /// 获取缓冲二进制流的大小。
        /// </summary>
        public static int CachedBytesSize
        {
            get
            {
                return s_CachedBytes != null ? s_CachedBytes.Length : 0;
            }
        }

        /// <summary>
        /// 读取数据成功事件。
        /// </summary>
        public event EventHandler<ReadDataSuccessEventArgs> ReadDataSuccess
        {
            add
            {
                m_ReadDataSuccessEventHandler += value;
            }
            remove
            {
                m_ReadDataSuccessEventHandler -= value;
            }
        }

        /// <summary>
        /// 读取数据失败事件。
        /// </summary>
        public event EventHandler<ReadDataFailureEventArgs> ReadDataFailure
        {
            add
            {
                m_ReadDataFailureEventHandler += value;
            }
            remove
            {
                m_ReadDataFailureEventHandler -= value;
            }
        }

        /// <summary>
        /// 读取数据更新事件。
        /// </summary>
        public event EventHandler<ReadDataUpdateEventArgs> ReadDataUpdate
        {
            add
            {
                m_ReadDataUpdateEventHandler += value;
            }
            remove
            {
                m_ReadDataUpdateEventHandler -= value;
            }
        }

        /// <summary>
        /// 读取数据时加载依赖资源事件。
        /// </summary>
        public event EventHandler<ReadDataDependencyAssetEventArgs> ReadDataDependencyAsset
        {
            add
            {
                m_ReadDataDependencyAssetEventHandler += value;
            }
            remove
            {
                m_ReadDataDependencyAssetEventHandler -= value;
            }
        }

        /// <summary>
        /// 确保二进制流缓存分配足够大小的内存并缓存。
        /// </summary>
        /// <param name="ensureSize">要确保二进制流缓存分配内存的大小。</param>
        public static void EnsureCachedBytesSize(int ensureSize)
        {
            if (ensureSize < 0)
            {
                throw new GameFrameworkException("Ensure size is invalid.");
            }

            if (s_CachedBytes == null || s_CachedBytes.Length < ensureSize)
            {
                FreeCachedBytes();
                int size = (ensureSize - 1 + BlockSize) / BlockSize * BlockSize;
                s_CachedBytes = new byte[size];
            }
        }

        /// <summary>
        /// 释放缓存的二进制流。
        /// </summary>
        public static void FreeCachedBytes()
        {
            s_CachedBytes = null;
        }

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        public void ReadData(string dataAssetName)
        {
            ReadData(dataAssetName, Constant.DefaultPriority, null);
        }

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="priority">加载数据资源的优先级。</param>
        public void ReadData(string dataAssetName, int priority)
        {
            ReadData(dataAssetName, priority, null);
        }

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void ReadData(string dataAssetName, object userData)
        {
            ReadData(dataAssetName, Constant.DefaultPriority, userData);
        }

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="priority">加载数据资源的优先级。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void ReadData(string dataAssetName, int priority, object userData)
        {
            if (m_ResourceManager == null)
            {
                throw new GameFrameworkException("You must set resource manager first.");
            }

            if (m_DataProviderHelper == null)
            {
                throw new GameFrameworkException("You must set data provider helper first.");
            }

            HasAssetResult result = m_ResourceManager.HasAsset(dataAssetName);
            switch (result)
            {
                case HasAssetResult.AssetOnDisk:
                case HasAssetResult.AssetOnFileSystem:
                    m_ResourceManager.LoadAsset(dataAssetName, priority, m_LoadAssetCallbacks, userData);
                    break;

                case HasAssetResult.BinaryOnDisk:
                    m_ResourceManager.LoadBinary(dataAssetName, m_LoadBinaryCallbacks, userData);
                    break;

                case HasAssetResult.BinaryOnFileSystem:
                    int dataLength = m_ResourceManager.GetBinaryLength(dataAssetName);
                    EnsureCachedBytesSize(dataLength);
                    if (dataLength != m_ResourceManager.LoadBinaryFromFileSystem(dataAssetName, s_CachedBytes))
                    {
                        throw new GameFrameworkException(Utility.Text.Format("Load binary '{0}' from file system with internal error.", dataAssetName));
                    }

                    try
                    {
                        if (!m_DataProviderHelper.ReadData(m_Owner, dataAssetName, s_CachedBytes, 0, dataLength, userData))
                        {
                            throw new GameFrameworkException(Utility.Text.Format("Load data failure in data provider helper, data asset name '{0}'.", dataAssetName));
                        }

                        if (m_ReadDataSuccessEventHandler != null)
                        {
                            ReadDataSuccessEventArgs loadDataSuccessEventArgs = ReadDataSuccessEventArgs.Create(dataAssetName, 0f, userData);
                            m_ReadDataSuccessEventHandler(this, loadDataSuccessEventArgs);
                            ReferencePool.Release(loadDataSuccessEventArgs);
                        }
                    }
                    catch (Exception exception)
                    {
                        if (m_ReadDataFailureEventHandler != null)
                        {
                            ReadDataFailureEventArgs loadDataFailureEventArgs = ReadDataFailureEventArgs.Create(dataAssetName, exception.ToString(), userData);
                            m_ReadDataFailureEventHandler(this, loadDataFailureEventArgs);
                            ReferencePool.Release(loadDataFailureEventArgs);
                            return;
                        }

                        throw;
                    }

                    break;

                default:
                    throw new GameFrameworkException(Utility.Text.Format("Data asset '{0}' is '{1}'.", dataAssetName, result));
            }
        }

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataString">要解析的内容字符串。</param>
        /// <returns>是否解析内容成功。</returns>
        public bool ParseData(string dataString)
        {
            return ParseData(dataString, null);
        }

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataString">要解析的内容字符串。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        public bool ParseData(string dataString, object userData)
        {
            if (m_DataProviderHelper == null)
            {
                throw new GameFrameworkException("You must set data helper first.");
            }

            if (dataString == null)
            {
                throw new GameFrameworkException("Data string is invalid.");
            }

            try
            {
                return m_DataProviderHelper.ParseData(m_Owner, dataString, userData);
            }
            catch (Exception exception)
            {
                if (exception is GameFrameworkException)
                {
                    throw;
                }

                throw new GameFrameworkException(Utility.Text.Format("Can not parse data string with exception '{0}'.", exception), exception);
            }
        }

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <returns>是否解析内容成功。</returns>
        public bool ParseData(byte[] dataBytes)
        {
            if (dataBytes == null)
            {
                throw new GameFrameworkException("Data bytes is invalid.");
            }

            return ParseData(dataBytes, 0, dataBytes.Length, null);
        }

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        public bool ParseData(byte[] dataBytes, object userData)
        {
            if (dataBytes == null)
            {
                throw new GameFrameworkException("Data bytes is invalid.");
            }

            return ParseData(dataBytes, 0, dataBytes.Length, userData);
        }

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="startIndex">内容二进制流的起始位置。</param>
        /// <param name="length">内容二进制流的长度。</param>
        /// <returns>是否解析内容成功。</returns>
        public bool ParseData(byte[] dataBytes, int startIndex, int length)
        {
            return ParseData(dataBytes, startIndex, length, null);
        }

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="startIndex">内容二进制流的起始位置。</param>
        /// <param name="length">内容二进制流的长度。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        public bool ParseData(byte[] dataBytes, int startIndex, int length, object userData)
        {
            if (m_DataProviderHelper == null)
            {
                throw new GameFrameworkException("You must set data helper first.");
            }

            if (dataBytes == null)
            {
                throw new GameFrameworkException("Data bytes is invalid.");
            }

            if (startIndex < 0 || length < 0 || startIndex + length > dataBytes.Length)
            {
                throw new GameFrameworkException("Start index or length is invalid.");
            }

            try
            {
                return m_DataProviderHelper.ParseData(m_Owner, dataBytes, startIndex, length, userData);
            }
            catch (Exception exception)
            {
                if (exception is GameFrameworkException)
                {
                    throw;
                }

                throw new GameFrameworkException(Utility.Text.Format("Can not parse data bytes with exception '{0}'.", exception), exception);
            }
        }

        /// <summary>
        /// 设置资源管理器。
        /// </summary>
        /// <param name="resourceManager">资源管理器。</param>
        internal void SetResourceManager(IResourceManager resourceManager)
        {
            if (resourceManager == null)
            {
                throw new GameFrameworkException("Resource manager is invalid.");
            }

            m_ResourceManager = resourceManager;
        }

        /// <summary>
        /// 设置数据提供者辅助器。
        /// </summary>
        /// <param name="dataProviderHelper">数据提供者辅助器。</param>
        internal void SetDataProviderHelper(IDataProviderHelper<T> dataProviderHelper)
        {
            if (dataProviderHelper == null)
            {
                throw new GameFrameworkException("Data provider helper is invalid.");
            }

            m_DataProviderHelper = dataProviderHelper;
        }

        private void LoadAssetSuccessCallback(string dataAssetName, object dataAsset, float duration, object userData)
        {
            try
            {
                if (!m_DataProviderHelper.ReadData(m_Owner, dataAssetName, dataAsset, userData))
                {
                    throw new GameFrameworkException(Utility.Text.Format("Load data failure in data provider helper, data asset name '{0}'.", dataAssetName));
                }

                if (m_ReadDataSuccessEventHandler != null)
                {
                    ReadDataSuccessEventArgs loadDataSuccessEventArgs = ReadDataSuccessEventArgs.Create(dataAssetName, duration, userData);
                    m_ReadDataSuccessEventHandler(this, loadDataSuccessEventArgs);
                    ReferencePool.Release(loadDataSuccessEventArgs);
                }
            }
            catch (Exception exception)
            {
                if (m_ReadDataFailureEventHandler != null)
                {
                    ReadDataFailureEventArgs loadDataFailureEventArgs = ReadDataFailureEventArgs.Create(dataAssetName, exception.ToString(), userData);
                    m_ReadDataFailureEventHandler(this, loadDataFailureEventArgs);
                    ReferencePool.Release(loadDataFailureEventArgs);
                    return;
                }

                throw;
            }
            finally
            {
                m_DataProviderHelper.ReleaseDataAsset(m_Owner, dataAsset);
            }
        }

        private void LoadAssetOrBinaryFailureCallback(string dataAssetName, LoadResourceStatus status, string errorMessage, object userData)
        {
            string appendErrorMessage = Utility.Text.Format("Load data failure, data asset name '{0}', status '{1}', error message '{2}'.", dataAssetName, status, errorMessage);
            if (m_ReadDataFailureEventHandler != null)
            {
                ReadDataFailureEventArgs loadDataFailureEventArgs = ReadDataFailureEventArgs.Create(dataAssetName, appendErrorMessage, userData);
                m_ReadDataFailureEventHandler(this, loadDataFailureEventArgs);
                ReferencePool.Release(loadDataFailureEventArgs);
                return;
            }

            throw new GameFrameworkException(appendErrorMessage);
        }

        private void LoadAssetUpdateCallback(string dataAssetName, float progress, object userData)
        {
            if (m_ReadDataUpdateEventHandler != null)
            {
                ReadDataUpdateEventArgs loadDataUpdateEventArgs = ReadDataUpdateEventArgs.Create(dataAssetName, progress, userData);
                m_ReadDataUpdateEventHandler(this, loadDataUpdateEventArgs);
                ReferencePool.Release(loadDataUpdateEventArgs);
            }
        }

        private void LoadAssetDependencyAssetCallback(string dataAssetName, string dependencyAssetName, int loadedCount, int totalCount, object userData)
        {
            if (m_ReadDataDependencyAssetEventHandler != null)
            {
                ReadDataDependencyAssetEventArgs loadDataDependencyAssetEventArgs = ReadDataDependencyAssetEventArgs.Create(dataAssetName, dependencyAssetName, loadedCount, totalCount, userData);
                m_ReadDataDependencyAssetEventHandler(this, loadDataDependencyAssetEventArgs);
                ReferencePool.Release(loadDataDependencyAssetEventArgs);
            }
        }

        private void LoadBinarySuccessCallback(string dataAssetName, byte[] dataBytes, float duration, object userData)
        {
            try
            {
                if (!m_DataProviderHelper.ReadData(m_Owner, dataAssetName, dataBytes, 0, dataBytes.Length, userData))
                {
                    throw new GameFrameworkException(Utility.Text.Format("Load data failure in data provider helper, data asset name '{0}'.", dataAssetName));
                }

                if (m_ReadDataSuccessEventHandler != null)
                {
                    ReadDataSuccessEventArgs loadDataSuccessEventArgs = ReadDataSuccessEventArgs.Create(dataAssetName, duration, userData);
                    m_ReadDataSuccessEventHandler(this, loadDataSuccessEventArgs);
                    ReferencePool.Release(loadDataSuccessEventArgs);
                }
            }
            catch (Exception exception)
            {
                if (m_ReadDataFailureEventHandler != null)
                {
                    ReadDataFailureEventArgs loadDataFailureEventArgs = ReadDataFailureEventArgs.Create(dataAssetName, exception.ToString(), userData);
                    m_ReadDataFailureEventHandler(this, loadDataFailureEventArgs);
                    ReferencePool.Release(loadDataFailureEventArgs);
                    return;
                }

                throw;
            }
        }
    }
}


================================================
FILE: GameFramework/Base/DataProvider/DataProviderCreator.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using GameFramework.Resource;

namespace GameFramework
{
    /// <summary>
    /// 数据提供者创建器。
    /// </summary>
    public static class DataProviderCreator
    {
        /// <summary>
        /// 获取缓冲二进制流的大小。
        /// </summary>
        /// <typeparam name="T">数据提供者的持有者的类型。</typeparam>
        /// <returns>缓冲二进制流的大小。</returns>
        public static int GetCachedBytesSize<T>()
        {
            return DataProvider<T>.CachedBytesSize;
        }

        /// <summary>
        /// 确保二进制流缓存分配足够大小的内存并缓存。
        /// </summary>
        /// <typeparam name="T">数据提供者的持有者的类型。</typeparam>
        /// <param name="ensureSize">要确保二进制流缓存分配内存的大小。</param>
        public static void EnsureCachedBytesSize<T>(int ensureSize)
        {
            DataProvider<T>.EnsureCachedBytesSize(ensureSize);
        }

        /// <summary>
        /// 释放缓存的二进制流。
        /// </summary>
        /// <typeparam name="T">数据提供者的持有者的类型。</typeparam>
        public static void FreeCachedBytes<T>()
        {
            DataProvider<T>.FreeCachedBytes();
        }

        /// <summary>
        /// 创建数据提供者。
        /// </summary>
        /// <typeparam name="T">数据提供者的持有者的类型。</typeparam>
        /// <param name="owner">数据提供者的持有者。</param>
        /// <param name="resourceManager">资源管理器。</param>
        /// <param name="dataProviderHelper">数据提供者辅助器。</param>
        /// <returns>创建的数据提供者。</returns>
        public static IDataProvider<T> Create<T>(T owner, IResourceManager resourceManager, IDataProviderHelper<T> dataProviderHelper)
        {
            if (owner == null)
            {
                throw new GameFrameworkException("Owner is invalid.");
            }

            if (resourceManager == null)
            {
                throw new GameFrameworkException("Resource manager is invalid.");
            }

            if (dataProviderHelper == null)
            {
                throw new GameFrameworkException("Data provider helper is invalid.");
            }

            DataProvider<T> dataProvider = new DataProvider<T>(owner);
            dataProvider.SetResourceManager(resourceManager);
            dataProvider.SetDataProviderHelper(dataProviderHelper);
            return dataProvider;
        }
    }
}


================================================
FILE: GameFramework/Base/DataProvider/IDataProvider.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;

namespace GameFramework
{
    /// <summary>
    /// 数据提供者接口。
    /// </summary>
    /// <typeparam name="T">数据提供者的持有者的类型。</typeparam>
    public interface IDataProvider<T>
    {
        /// <summary>
        /// 读取数据成功事件。
        /// </summary>
        event EventHandler<ReadDataSuccessEventArgs> ReadDataSuccess;

        /// <summary>
        /// 读取数据失败事件。
        /// </summary>
        event EventHandler<ReadDataFailureEventArgs> ReadDataFailure;

        /// <summary>
        /// 读取数据更新事件。
        /// </summary>
        event EventHandler<ReadDataUpdateEventArgs> ReadDataUpdate;

        /// <summary>
        /// 读取数据时加载依赖资源事件。
        /// </summary>
        event EventHandler<ReadDataDependencyAssetEventArgs> ReadDataDependencyAsset;

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        void ReadData(string dataAssetName);

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="priority">加载数据资源的优先级。</param>
        void ReadData(string dataAssetName, int priority);

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="userData">用户自定义数据。</param>
        void ReadData(string dataAssetName, object userData);

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="priority">加载数据资源的优先级。</param>
        /// <param name="userData">用户自定义数据。</param>
        void ReadData(string dataAssetName, int priority, object userData);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataString">要解析的内容字符串。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(string dataString);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataString">要解析的内容字符串。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(string dataString, object userData);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(byte[] dataBytes);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(byte[] dataBytes, object userData);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="startIndex">内容二进制流的起始位置。</param>
        /// <param name="length">内容二进制流的长度。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(byte[] dataBytes, int startIndex, int length);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="startIndex">内容二进制流的起始位置。</param>
        /// <param name="length">内容二进制流的长度。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(byte[] dataBytes, int startIndex, int length, object userData);
    }
}


================================================
FILE: GameFramework/Base/DataProvider/IDataProviderHelper.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 数据提供者辅助器接口。
    /// </summary>
    public interface IDataProviderHelper<T>
    {
        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataProviderOwner">数据提供者的持有者。</param>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="dataAsset">内容资源。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否读取数据成功。</returns>
        bool ReadData(T dataProviderOwner, string dataAssetName, object dataAsset, object userData);

        /// <summary>
        /// 读取数据。
        /// </summary>
        /// <param name="dataProviderOwner">数据提供者的持有者。</param>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="dataBytes">内容二进制流。</param>
        /// <param name="startIndex">内容二进制流的起始位置。</param>
        /// <param name="length">内容二进制流的长度。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否读取数据成功。</returns>
        bool ReadData(T dataProviderOwner, string dataAssetName, byte[] dataBytes, int startIndex, int length, object userData);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataProviderOwner">数据提供者的持有者。</param>
        /// <param name="dataString">要解析的内容字符串。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(T dataProviderOwner, string dataString, object userData);

        /// <summary>
        /// 解析内容。
        /// </summary>
        /// <param name="dataProviderOwner">数据提供者的持有者。</param>
        /// <param name="dataBytes">要解析的内容二进制流。</param>
        /// <param name="startIndex">内容二进制流的起始位置。</param>
        /// <param name="length">内容二进制流的长度。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>是否解析内容成功。</returns>
        bool ParseData(T dataProviderOwner, byte[] dataBytes, int startIndex, int length, object userData);

        /// <summary>
        /// 释放内容资源。
        /// </summary>
        /// <param name="dataProviderOwner">数据提供者的持有者。</param>
        /// <param name="dataAsset">要释放的内容资源。</param>
        void ReleaseDataAsset(T dataProviderOwner, object dataAsset);
    }
}


================================================
FILE: GameFramework/Base/DataProvider/ReadDataDependencyAssetEventArgs.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 读取数据时加载依赖资源事件。
    /// </summary>
    public sealed class ReadDataDependencyAssetEventArgs : GameFrameworkEventArgs
    {
        /// <summary>
        /// 初始化读取数据时加载依赖资源事件的新实例。
        /// </summary>
        public ReadDataDependencyAssetEventArgs()
        {
            DataAssetName = null;
            DependencyAssetName = null;
            LoadedCount = 0;
            TotalCount = 0;
            UserData = null;
        }

        /// <summary>
        /// 获取内容资源名称。
        /// </summary>
        public string DataAssetName
        {
            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="dataAssetName">内容资源名称。</param>
        /// <param name="dependencyAssetName">被加载的依赖资源名称。</param>
        /// <param name="loadedCount">当前已加载依赖资源数量。</param>
        /// <param name="totalCount">总共加载依赖资源数量。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>创建的读取数据时加载依赖资源事件。</returns>
        public static ReadDataDependencyAssetEventArgs Create(string dataAssetName, string dependencyAssetName, int loadedCount, int totalCount, object userData)
        {
            ReadDataDependencyAssetEventArgs loadDataDependencyAssetEventArgs = ReferencePool.Acquire<ReadDataDependencyAssetEventArgs>();
            loadDataDependencyAssetEventArgs.DataAssetName = dataAssetName;
            loadDataDependencyAssetEventArgs.DependencyAssetName = dependencyAssetName;
            loadDataDependencyAssetEventArgs.LoadedCount = loadedCount;
            loadDataDependencyAssetEventArgs.TotalCount = totalCount;
            loadDataDependencyAssetEventArgs.UserData = userData;
            return loadDataDependencyAssetEventArgs;
        }

        /// <summary>
        /// 清理读取数据时加载依赖资源事件。
        /// </summary>
        public override void Clear()
        {
            DataAssetName = null;
            DependencyAssetName = null;
            LoadedCount = 0;
            TotalCount = 0;
            UserData = null;
        }
    }
}


================================================
FILE: GameFramework/Base/DataProvider/ReadDataFailureEventArgs.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 读取数据失败事件。
    /// </summary>
    public sealed class ReadDataFailureEventArgs : GameFrameworkEventArgs
    {
        /// <summary>
        /// 初始化读取数据失败事件的新实例。
        /// </summary>
        public ReadDataFailureEventArgs()
        {
            DataAssetName = null;
            ErrorMessage = null;
            UserData = null;
        }

        /// <summary>
        /// 获取内容资源名称。
        /// </summary>
        public string DataAssetName
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取错误信息。
        /// </summary>
        public string ErrorMessage
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取用户自定义数据。
        /// </summary>
        public object UserData
        {
            get;
            private set;
        }

        /// <summary>
        /// 创建读取数据失败事件。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="errorMessage">错误信息。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>创建的读取数据失败事件。</returns>
        public static ReadDataFailureEventArgs Create(string dataAssetName, string errorMessage, object userData)
        {
            ReadDataFailureEventArgs loadDataFailureEventArgs = ReferencePool.Acquire<ReadDataFailureEventArgs>();
            loadDataFailureEventArgs.DataAssetName = dataAssetName;
            loadDataFailureEventArgs.ErrorMessage = errorMessage;
            loadDataFailureEventArgs.UserData = userData;
            return loadDataFailureEventArgs;
        }

        /// <summary>
        /// 清理读取数据失败事件。
        /// </summary>
        public override void Clear()
        {
            DataAssetName = null;
            ErrorMessage = null;
            UserData = null;
        }
    }
}


================================================
FILE: GameFramework/Base/DataProvider/ReadDataSuccessEventArgs.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 读取数据成功事件。
    /// </summary>
    public sealed class ReadDataSuccessEventArgs : GameFrameworkEventArgs
    {
        /// <summary>
        /// 初始化读取数据成功事件的新实例。
        /// </summary>
        public ReadDataSuccessEventArgs()
        {
            DataAssetName = null;
            Duration = 0f;
            UserData = null;
        }

        /// <summary>
        /// 获取内容资源名称。
        /// </summary>
        public string DataAssetName
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取加载持续时间。
        /// </summary>
        public float Duration
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取用户自定义数据。
        /// </summary>
        public object UserData
        {
            get;
            private set;
        }

        /// <summary>
        /// 创建读取数据成功事件。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="duration">加载持续时间。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>创建的读取数据成功事件。</returns>
        public static ReadDataSuccessEventArgs Create(string dataAssetName, float duration, object userData)
        {
            ReadDataSuccessEventArgs loadDataSuccessEventArgs = ReferencePool.Acquire<ReadDataSuccessEventArgs>();
            loadDataSuccessEventArgs.DataAssetName = dataAssetName;
            loadDataSuccessEventArgs.Duration = duration;
            loadDataSuccessEventArgs.UserData = userData;
            return loadDataSuccessEventArgs;
        }

        /// <summary>
        /// 清理读取数据成功事件。
        /// </summary>
        public override void Clear()
        {
            DataAssetName = null;
            Duration = 0f;
            UserData = null;
        }
    }
}


================================================
FILE: GameFramework/Base/DataProvider/ReadDataUpdateEventArgs.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 读取数据更新事件。
    /// </summary>
    public sealed class ReadDataUpdateEventArgs : GameFrameworkEventArgs
    {
        /// <summary>
        /// 初始化读取数据更新事件的新实例。
        /// </summary>
        public ReadDataUpdateEventArgs()
        {
            DataAssetName = null;
            Progress = 0f;
            UserData = null;
        }

        /// <summary>
        /// 获取内容资源名称。
        /// </summary>
        public string DataAssetName
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取读取数据进度。
        /// </summary>
        public float Progress
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取用户自定义数据。
        /// </summary>
        public object UserData
        {
            get;
            private set;
        }

        /// <summary>
        /// 创建读取数据更新事件。
        /// </summary>
        /// <param name="dataAssetName">内容资源名称。</param>
        /// <param name="progress">读取数据进度。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>创建的读取数据更新事件。</returns>
        public static ReadDataUpdateEventArgs Create(string dataAssetName, float progress, object userData)
        {
            ReadDataUpdateEventArgs loadDataUpdateEventArgs = ReferencePool.Acquire<ReadDataUpdateEventArgs>();
            loadDataUpdateEventArgs.DataAssetName = dataAssetName;
            loadDataUpdateEventArgs.Progress = progress;
            loadDataUpdateEventArgs.UserData = userData;
            return loadDataUpdateEventArgs;
        }

        /// <summary>
        /// 清理读取数据更新事件。
        /// </summary>
        public override void Clear()
        {
            DataAssetName = null;
            Progress = 0f;
            UserData = null;
        }
    }
}


================================================
FILE: GameFramework/Base/DataStruct/TypeNamePair.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;
using System.Runtime.InteropServices;

namespace GameFramework
{
    /// <summary>
    /// 类型和名称的组合值。
    /// </summary>
    [StructLayout(LayoutKind.Auto)]
    internal struct TypeNamePair : IEquatable<TypeNamePair>
    {
        private readonly Type m_Type;
        private readonly string m_Name;

        /// <summary>
        /// 初始化类型和名称的组合值的新实例。
        /// </summary>
        /// <param name="type">类型。</param>
        public TypeNamePair(Type type)
            : this(type, string.Empty)
        {
        }

        /// <summary>
        /// 初始化类型和名称的组合值的新实例。
        /// </summary>
        /// <param name="type">类型。</param>
        /// <param name="name">名称。</param>
        public TypeNamePair(Type type, string name)
        {
            if (type == null)
            {
                throw new GameFrameworkException("Type is invalid.");
            }

            m_Type = type;
            m_Name = name ?? string.Empty;
        }

        /// <summary>
        /// 获取类型。
        /// </summary>
        public Type Type
        {
            get
            {
                return m_Type;
            }
        }

        /// <summary>
        /// 获取名称。
        /// </summary>
        public string Name
        {
            get
            {
                return m_Name;
            }
        }

        /// <summary>
        /// 获取类型和名称的组合值字符串。
        /// </summary>
        /// <returns>类型和名称的组合值字符串。</returns>
        public override string ToString()
        {
            if (m_Type == null)
            {
                throw new GameFrameworkException("Type is invalid.");
            }

            string typeName = m_Type.FullName;
            return string.IsNullOrEmpty(m_Name) ? typeName : Utility.Text.Format("{0}.{1}", typeName, m_Name);
        }

        /// <summary>
        /// 获取对象的哈希值。
        /// </summary>
        /// <returns>对象的哈希值。</returns>
        public override int GetHashCode()
        {
            return m_Type.GetHashCode() ^ m_Name.GetHashCode();
        }

        /// <summary>
        /// 比较对象是否与自身相等。
        /// </summary>
        /// <param name="obj">要比较的对象。</param>
        /// <returns>被比较的对象是否与自身相等。</returns>
        public override bool Equals(object obj)
        {
            return obj is TypeNamePair && Equals((TypeNamePair)obj);
        }

        /// <summary>
        /// 比较对象是否与自身相等。
        /// </summary>
        /// <param name="value">要比较的对象。</param>
        /// <returns>被比较的对象是否与自身相等。</returns>
        public bool Equals(TypeNamePair value)
        {
            return m_Type == value.m_Type && m_Name == value.m_Name;
        }

        /// <summary>
        /// 判断两个对象是否相等。
        /// </summary>
        /// <param name="a">值 a。</param>
        /// <param name="b">值 b。</param>
        /// <returns>两个对象是否相等。</returns>
        public static bool operator ==(TypeNamePair a, TypeNamePair b)
        {
            return a.Equals(b);
        }

        /// <summary>
        /// 判断两个对象是否不相等。
        /// </summary>
        /// <param name="a">值 a。</param>
        /// <param name="b">值 b。</param>
        /// <returns>两个对象是否不相等。</returns>
        public static bool operator !=(TypeNamePair a, TypeNamePair b)
        {
            return !(a == b);
        }
    }
}


================================================
FILE: GameFramework/Base/EventPool/BaseEventArgs.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 事件基类。
    /// </summary>
    public abstract class BaseEventArgs : GameFrameworkEventArgs
    {
        /// <summary>
        /// 获取类型编号。
        /// </summary>
        public abstract int Id
        {
            get;
        }
    }
}


================================================
FILE: GameFramework/Base/EventPool/EventPool.Event.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    internal sealed partial class EventPool<T> where T : BaseEventArgs
    {
        /// <summary>
        /// 事件结点。
        /// </summary>
        private sealed class Event : IReference
        {
            private object m_Sender;
            private T m_EventArgs;

            public Event()
            {
                m_Sender = null;
                m_EventArgs = null;
            }

            public object Sender
            {
                get
                {
                    return m_Sender;
                }
            }

            public T EventArgs
            {
                get
                {
                    return m_EventArgs;
                }
            }

            public static Event Create(object sender, T e)
            {
                Event eventNode = ReferencePool.Acquire<Event>();
                eventNode.m_Sender = sender;
                eventNode.m_EventArgs = e;
                return eventNode;
            }

            public void Clear()
            {
                m_Sender = null;
                m_EventArgs = null;
            }
        }
    }
}


================================================
FILE: GameFramework/Base/EventPool/EventPool.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;
using System.Collections.Generic;

namespace GameFramework
{
    /// <summary>
    /// 事件池。
    /// </summary>
    /// <typeparam name="T">事件类型。</typeparam>
    internal sealed partial class EventPool<T> where T : BaseEventArgs
    {
        private readonly GameFrameworkMultiDictionary<int, EventHandler<T>> m_EventHandlers;
        private readonly Queue<Event> m_Events;
        private readonly Dictionary<object, LinkedListNode<EventHandler<T>>> m_CachedNodes;
        private readonly Dictionary<object, LinkedListNode<EventHandler<T>>> m_TempNodes;
        private readonly EventPoolMode m_EventPoolMode;
        private EventHandler<T> m_DefaultHandler;

        /// <summary>
        /// 初始化事件池的新实例。
        /// </summary>
        /// <param name="mode">事件池模式。</param>
        public EventPool(EventPoolMode mode)
        {
            m_EventHandlers = new GameFrameworkMultiDictionary<int, EventHandler<T>>();
            m_Events = new Queue<Event>();
            m_CachedNodes = new Dictionary<object, LinkedListNode<EventHandler<T>>>();
            m_TempNodes = new Dictionary<object, LinkedListNode<EventHandler<T>>>();
            m_EventPoolMode = mode;
            m_DefaultHandler = null;
        }

        /// <summary>
        /// 获取事件处理函数的数量。
        /// </summary>
        public int EventHandlerCount
        {
            get
            {
                return m_EventHandlers.Count;
            }
        }

        /// <summary>
        /// 获取事件数量。
        /// </summary>
        public int EventCount
        {
            get
            {
                return m_Events.Count;
            }
        }

        /// <summary>
        /// 事件池轮询。
        /// </summary>
        /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
        /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
        public void Update(float elapseSeconds, float realElapseSeconds)
        {
            lock (m_Events)
            {
                while (m_Events.Count > 0)
                {
                    Event eventNode = m_Events.Dequeue();
                    HandleEvent(eventNode.Sender, eventNode.EventArgs);
                    ReferencePool.Release(eventNode);
                }
            }
        }

        /// <summary>
        /// 关闭并清理事件池。
        /// </summary>
        public void Shutdown()
        {
            Clear();
            m_EventHandlers.Clear();
            m_CachedNodes.Clear();
            m_TempNodes.Clear();
            m_DefaultHandler = null;
        }

        /// <summary>
        /// 清理事件。
        /// </summary>
        public void Clear()
        {
            lock (m_Events)
            {
                m_Events.Clear();
            }
        }

        /// <summary>
        /// 获取事件处理函数的数量。
        /// </summary>
        /// <param name="id">事件类型编号。</param>
        /// <returns>事件处理函数的数量。</returns>
        public int Count(int id)
        {
            GameFrameworkLinkedListRange<EventHandler<T>> range = default(GameFrameworkLinkedListRange<EventHandler<T>>);
            if (m_EventHandlers.TryGetValue(id, out range))
            {
                return range.Count;
            }

            return 0;
        }

        /// <summary>
        /// 检查是否存在事件处理函数。
        /// </summary>
        /// <param name="id">事件类型编号。</param>
        /// <param name="handler">要检查的事件处理函数。</param>
        /// <returns>是否存在事件处理函数。</returns>
        public bool Check(int id, EventHandler<T> handler)
        {
            if (handler == null)
            {
                throw new GameFrameworkException("Event handler is invalid.");
            }

            return m_EventHandlers.Contains(id, handler);
        }

        /// <summary>
        /// 订阅事件处理函数。
        /// </summary>
        /// <param name="id">事件类型编号。</param>
        /// <param name="handler">要订阅的事件处理函数。</param>
        public void Subscribe(int id, EventHandler<T> handler)
        {
            if (handler == null)
            {
                throw new GameFrameworkException("Event handler is invalid.");
            }

            if (!m_EventHandlers.Contains(id))
            {
                m_EventHandlers.Add(id, handler);
            }
            else if ((m_EventPoolMode & EventPoolMode.AllowMultiHandler) != EventPoolMode.AllowMultiHandler)
            {
                throw new GameFrameworkException(Utility.Text.Format("Event '{0}' not allow multi handler.", id));
            }
            else if ((m_EventPoolMode & EventPoolMode.AllowDuplicateHandler) != EventPoolMode.AllowDuplicateHandler && Check(id, handler))
            {
                throw new GameFrameworkException(Utility.Text.Format("Event '{0}' not allow duplicate handler.", id));
            }
            else
            {
                m_EventHandlers.Add(id, handler);
            }
        }

        /// <summary>
        /// 取消订阅事件处理函数。
        /// </summary>
        /// <param name="id">事件类型编号。</param>
        /// <param name="handler">要取消订阅的事件处理函数。</param>
        public void Unsubscribe(int id, EventHandler<T> handler)
        {
            if (handler == null)
            {
                throw new GameFrameworkException("Event handler is invalid.");
            }

            if (m_CachedNodes.Count > 0)
            {
                foreach (KeyValuePair<object, LinkedListNode<EventHandler<T>>> cachedNode in m_CachedNodes)
                {
                    if (cachedNode.Value != null && cachedNode.Value.Value == handler)
                    {
                        m_TempNodes.Add(cachedNode.Key, cachedNode.Value.Next);
                    }
                }

                if (m_TempNodes.Count > 0)
                {
                    foreach (KeyValuePair<object, LinkedListNode<EventHandler<T>>> cachedNode in m_TempNodes)
                    {
                        m_CachedNodes[cachedNode.Key] = cachedNode.Value;
                    }

                    m_TempNodes.Clear();
                }
            }

            if (!m_EventHandlers.Remove(id, handler))
            {
                throw new GameFrameworkException(Utility.Text.Format("Event '{0}' not exists specified handler.", id));
            }
        }

        /// <summary>
        /// 设置默认事件处理函数。
        /// </summary>
        /// <param name="handler">要设置的默认事件处理函数。</param>
        public void SetDefaultHandler(EventHandler<T> handler)
        {
            m_DefaultHandler = handler;
        }

        /// <summary>
        /// 抛出事件,这个操作是线程安全的,即使不在主线程中抛出,也可保证在主线程中回调事件处理函数,但事件会在抛出后的下一帧分发。
        /// </summary>
        /// <param name="sender">事件源。</param>
        /// <param name="e">事件参数。</param>
        public void Fire(object sender, T e)
        {
            if (e == null)
            {
                throw new GameFrameworkException("Event is invalid.");
            }

            Event eventNode = Event.Create(sender, e);
            lock (m_Events)
            {
                m_Events.Enqueue(eventNode);
            }
        }

        /// <summary>
        /// 抛出事件立即模式,这个操作不是线程安全的,事件会立刻分发。
        /// </summary>
        /// <param name="sender">事件源。</param>
        /// <param name="e">事件参数。</param>
        public void FireNow(object sender, T e)
        {
            if (e == null)
            {
                throw new GameFrameworkException("Event is invalid.");
            }

            HandleEvent(sender, e);
        }

        /// <summary>
        /// 处理事件结点。
        /// </summary>
        /// <param name="sender">事件源。</param>
        /// <param name="e">事件参数。</param>
        private void HandleEvent(object sender, T e)
        {
            bool noHandlerException = false;
            GameFrameworkLinkedListRange<EventHandler<T>> range = default(GameFrameworkLinkedListRange<EventHandler<T>>);
            if (m_EventHandlers.TryGetValue(e.Id, out range))
            {
                LinkedListNode<EventHandler<T>> current = range.First;
                while (current != null && current != range.Terminal)
                {
                    m_CachedNodes[e] = current.Next != range.Terminal ? current.Next : null;
                    current.Value(sender, e);
                    current = m_CachedNodes[e];
                }

                m_CachedNodes.Remove(e);
            }
            else if (m_DefaultHandler != null)
            {
                m_DefaultHandler(sender, e);
            }
            else if ((m_EventPoolMode & EventPoolMode.AllowNoHandler) == 0)
            {
                noHandlerException = true;
            }

            ReferencePool.Release(e);

            if (noHandlerException)
            {
                throw new GameFrameworkException(Utility.Text.Format("Event '{0}' not allow no handler.", e.Id));
            }
        }
    }
}


================================================
FILE: GameFramework/Base/EventPool/EventPoolMode.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;

namespace GameFramework
{
    /// <summary>
    /// 事件池模式。
    /// </summary>
    [Flags]
    internal enum EventPoolMode : byte
    {
        /// <summary>
        /// 默认事件池模式,即必须存在有且只有一个事件处理函数。
        /// </summary>
        Default = 0,

        /// <summary>
        /// 允许不存在事件处理函数。
        /// </summary>
        AllowNoHandler = 1,

        /// <summary>
        /// 允许存在多个事件处理函数。
        /// </summary>
        AllowMultiHandler = 2,

        /// <summary>
        /// 允许存在重复的事件处理函数。
        /// </summary>
        AllowDuplicateHandler = 4
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkAction.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 封装一个方法,该方法不具有参数并且不返回值。
    /// </summary>
    public delegate void GameFrameworkAction();

    /// <summary>
    /// 封装一个方法,该方法只有一个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T">此委托封装的方法的参数类型。</typeparam>
    /// <param name="obj">此委托封装的方法的参数。</param>
    public delegate void GameFrameworkAction<in T>(T obj);

    /// <summary>
    /// 封装一个方法,该方法具有两个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2>(T1 arg1, T2 arg2);

    /// <summary>
    /// 封装一个方法,该方法具有三个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3>(T1 arg1, T2 arg2, T3 arg3);

    /// <summary>
    /// 封装一个方法,该方法具有四个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);

    /// <summary>
    /// 封装一个方法,该方法具有五个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);

    /// <summary>
    /// 封装一个方法,该方法具有六个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);

    /// <summary>
    /// 封装一个方法,该方法具有七个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);

    /// <summary>
    /// 封装一个方法,该方法具有八个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);

    /// <summary>
    /// 封装一个方法,该方法具有九个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9);

    /// <summary>
    /// 封装一个方法,该方法具有十个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10);

    /// <summary>
    /// 封装一个方法,该方法具有十一个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11);

    /// <summary>
    /// 封装一个方法,该方法具有十二个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12);

    /// <summary>
    /// 封装一个方法,该方法具有十三个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13);

    /// <summary>
    /// 封装一个方法,该方法具有十四个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="T14">此委托封装的方法的第十四个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <param name="arg14">此委托封装的方法的第十四个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14);

    /// <summary>
    /// 封装一个方法,该方法具有十五个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="T14">此委托封装的方法的第十四个参数的类型。</typeparam>
    /// <typeparam name="T15">此委托封装的方法的第十五个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <param name="arg14">此委托封装的方法的第十四个参数。</param>
    /// <param name="arg15">此委托封装的方法的第十五个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15);

    /// <summary>
    /// 封装一个方法,该方法具有十六个参数并且不返回值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="T14">此委托封装的方法的第十四个参数的类型。</typeparam>
    /// <typeparam name="T15">此委托封装的方法的第十五个参数的类型。</typeparam>
    /// <typeparam name="T16">此委托封装的方法的第十六个参数的类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <param name="arg14">此委托封装的方法的第十四个参数。</param>
    /// <param name="arg15">此委托封装的方法的第十五个参数。</param>
    /// <param name="arg16">此委托封装的方法的第十六个参数。</param>
    public delegate void GameFrameworkAction<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);
}


================================================
FILE: GameFramework/Base/GameFrameworkEntry.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;
using System.Collections.Generic;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架入口。
    /// </summary>
    public static class GameFrameworkEntry
    {
        private static readonly GameFrameworkLinkedList<GameFrameworkModule> s_GameFrameworkModules = new GameFrameworkLinkedList<GameFrameworkModule>();

        /// <summary>
        /// 所有游戏框架模块轮询。
        /// </summary>
        /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
        /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
        public static void Update(float elapseSeconds, float realElapseSeconds)
        {
            foreach (GameFrameworkModule module in s_GameFrameworkModules)
            {
                module.Update(elapseSeconds, realElapseSeconds);
            }
        }

        /// <summary>
        /// 关闭并清理所有游戏框架模块。
        /// </summary>
        public static void Shutdown()
        {
            for (LinkedListNode<GameFrameworkModule> current = s_GameFrameworkModules.Last; current != null; current = current.Previous)
            {
                current.Value.Shutdown();
            }

            s_GameFrameworkModules.Clear();
            ReferencePool.ClearAll();
            Utility.Marshal.FreeCachedHGlobal();
            GameFrameworkLog.SetLogHelper(null);
        }

        /// <summary>
        /// 获取游戏框架模块。
        /// </summary>
        /// <typeparam name="T">要获取的游戏框架模块类型。</typeparam>
        /// <returns>要获取的游戏框架模块。</returns>
        /// <remarks>如果要获取的游戏框架模块不存在,则自动创建该游戏框架模块。</remarks>
        public static T GetModule<T>() where T : class
        {
            Type interfaceType = typeof(T);
            if (!interfaceType.IsInterface)
            {
                throw new GameFrameworkException(Utility.Text.Format("You must get module by interface, but '{0}' is not.", interfaceType.FullName));
            }

            if (!interfaceType.FullName.StartsWith("GameFramework.", StringComparison.Ordinal))
            {
                throw new GameFrameworkException(Utility.Text.Format("You must get a Game Framework module, but '{0}' is not.", interfaceType.FullName));
            }

            string moduleName = Utility.Text.Format("{0}.{1}", interfaceType.Namespace, interfaceType.Name.Substring(1));
            Type moduleType = Type.GetType(moduleName);
            if (moduleType == null)
            {
                throw new GameFrameworkException(Utility.Text.Format("Can not find Game Framework module type '{0}'.", moduleName));
            }

            return GetModule(moduleType) as T;
        }

        /// <summary>
        /// 获取游戏框架模块。
        /// </summary>
        /// <param name="moduleType">要获取的游戏框架模块类型。</param>
        /// <returns>要获取的游戏框架模块。</returns>
        /// <remarks>如果要获取的游戏框架模块不存在,则自动创建该游戏框架模块。</remarks>
        private static GameFrameworkModule GetModule(Type moduleType)
        {
            foreach (GameFrameworkModule module in s_GameFrameworkModules)
            {
                if (module.GetType() == moduleType)
                {
                    return module;
                }
            }

            return CreateModule(moduleType);
        }

        /// <summary>
        /// 创建游戏框架模块。
        /// </summary>
        /// <param name="moduleType">要创建的游戏框架模块类型。</param>
        /// <returns>要创建的游戏框架模块。</returns>
        private static GameFrameworkModule CreateModule(Type moduleType)
        {
            GameFrameworkModule module = (GameFrameworkModule)Activator.CreateInstance(moduleType);
            if (module == null)
            {
                throw new GameFrameworkException(Utility.Text.Format("Can not create module '{0}'.", moduleType.FullName));
            }

            LinkedListNode<GameFrameworkModule> current = s_GameFrameworkModules.First;
            while (current != null)
            {
                if (module.Priority > current.Value.Priority)
                {
                    break;
                }

                current = current.Next;
            }

            if (current != null)
            {
                s_GameFrameworkModules.AddBefore(current, module);
            }
            else
            {
                s_GameFrameworkModules.AddLast(module);
            }

            return module;
        }
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkEventArgs.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架中包含事件数据的类的基类。
    /// </summary>
    public abstract class GameFrameworkEventArgs : EventArgs, IReference
    {
        /// <summary>
        /// 初始化游戏框架中包含事件数据的类的新实例。
        /// </summary>
        public GameFrameworkEventArgs()
        {
        }

        /// <summary>
        /// 清理引用。
        /// </summary>
        public abstract void Clear();
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkException.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;
using System.Runtime.Serialization;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架异常类。
    /// </summary>
    [Serializable]
    public class GameFrameworkException : Exception
    {
        /// <summary>
        /// 初始化游戏框架异常类的新实例。
        /// </summary>
        public GameFrameworkException()
            : base()
        {
        }

        /// <summary>
        /// 使用指定错误消息初始化游戏框架异常类的新实例。
        /// </summary>
        /// <param name="message">描述错误的消息。</param>
        public GameFrameworkException(string message)
            : base(message)
        {
        }

        /// <summary>
        /// 使用指定错误消息和对作为此异常原因的内部异常的引用来初始化游戏框架异常类的新实例。
        /// </summary>
        /// <param name="message">解释异常原因的错误消息。</param>
        /// <param name="innerException">导致当前异常的异常。如果 innerException 参数不为空引用,则在处理内部异常的 catch 块中引发当前异常。</param>
        public GameFrameworkException(string message, Exception innerException)
            : base(message, innerException)
        {
        }

        /// <summary>
        /// 用序列化数据初始化游戏框架异常类的新实例。
        /// </summary>
        /// <param name="info">存有有关所引发异常的序列化的对象数据。</param>
        /// <param name="context">包含有关源或目标的上下文信息。</param>
        protected GameFrameworkException(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
        }
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkFunc.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 封装一个方法,该方法不具有参数,但却返回 TResult 参数指定的类型的值。
    /// </summary>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<out TResult>();

    /// <summary>
    /// 封装一个方法,该方法具有一个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T">此委托封装的方法的参数类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg">此委托封装的方法的参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T, out TResult>(T arg);

    /// <summary>
    /// 封装一个方法,该方法具有两个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, out TResult>(T1 arg1, T2 arg2);

    /// <summary>
    /// 封装一个方法,该方法具有三个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3);

    /// <summary>
    /// 封装一个方法,该方法具有四个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);

    /// <summary>
    /// 封装一个方法,该方法具有五个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);

    /// <summary>
    /// 封装一个方法,该方法具有六个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);

    /// <summary>
    /// 封装一个方法,该方法具有七个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);

    /// <summary>
    /// 封装一个方法,该方法具有八个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);

    /// <summary>
    /// 封装一个方法,该方法具有九个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9);

    /// <summary>
    /// 封装一个方法,该方法具有十个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10);

    /// <summary>
    /// 封装一个方法,该方法具有十一个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11);

    /// <summary>
    /// 封装一个方法,该方法具有十二个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12);

    /// <summary>
    /// 封装一个方法,该方法具有十三个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13);

    /// <summary>
    /// 封装一个方法,该方法具有十四个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="T14">此委托封装的方法的第十四个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <param name="arg14">此委托封装的方法的第十四个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14);

    /// <summary>
    /// 封装一个方法,该方法具有十五个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="T14">此委托封装的方法的第十四个参数的类型。</typeparam>
    /// <typeparam name="T15">此委托封装的方法的第十五个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <param name="arg14">此委托封装的方法的第十四个参数。</param>
    /// <param name="arg15">此委托封装的方法的第十五个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15);

    /// <summary>
    /// 封装一个方法,该方法具有十六个参数,并返回 TResult 参数所指定的类型的值。
    /// </summary>
    /// <typeparam name="T1">此委托封装的方法的第一个参数的类型。</typeparam>
    /// <typeparam name="T2">此委托封装的方法的第二个参数的类型。</typeparam>
    /// <typeparam name="T3">此委托封装的方法的第三个参数的类型。</typeparam>
    /// <typeparam name="T4">此委托封装的方法的第四个参数的类型。</typeparam>
    /// <typeparam name="T5">此委托封装的方法的第五个参数的类型。</typeparam>
    /// <typeparam name="T6">此委托封装的方法的第六个参数的类型。</typeparam>
    /// <typeparam name="T7">此委托封装的方法的第七个参数的类型。</typeparam>
    /// <typeparam name="T8">此委托封装的方法的第八个参数的类型。</typeparam>
    /// <typeparam name="T9">此委托封装的方法的第九个参数的类型。</typeparam>
    /// <typeparam name="T10">此委托封装的方法的第十个参数的类型。</typeparam>
    /// <typeparam name="T11">此委托封装的方法的第十一个参数的类型。</typeparam>
    /// <typeparam name="T12">此委托封装的方法的第十二个参数的类型。</typeparam>
    /// <typeparam name="T13">此委托封装的方法的第十三个参数的类型。</typeparam>
    /// <typeparam name="T14">此委托封装的方法的第十四个参数的类型。</typeparam>
    /// <typeparam name="T15">此委托封装的方法的第十五个参数的类型。</typeparam>
    /// <typeparam name="T16">此委托封装的方法的第十六个参数的类型。</typeparam>
    /// <typeparam name="TResult">此委托封装的方法的返回值类型。</typeparam>
    /// <param name="arg1">此委托封装的方法的第一个参数。</param>
    /// <param name="arg2">此委托封装的方法的第二个参数。</param>
    /// <param name="arg3">此委托封装的方法的第三个参数。</param>
    /// <param name="arg4">此委托封装的方法的第四个参数。</param>
    /// <param name="arg5">此委托封装的方法的第五个参数。</param>
    /// <param name="arg6">此委托封装的方法的第六个参数。</param>
    /// <param name="arg7">此委托封装的方法的第七个参数。</param>
    /// <param name="arg8">此委托封装的方法的第八个参数。</param>
    /// <param name="arg9">此委托封装的方法的第九个参数。</param>
    /// <param name="arg10">此委托封装的方法的第十个参数。</param>
    /// <param name="arg11">此委托封装的方法的第十一个参数。</param>
    /// <param name="arg12">此委托封装的方法的第十二个参数。</param>
    /// <param name="arg13">此委托封装的方法的第十三个参数。</param>
    /// <param name="arg14">此委托封装的方法的第十四个参数。</param>
    /// <param name="arg15">此委托封装的方法的第十五个参数。</param>
    /// <param name="arg16">此委托封装的方法的第十六个参数。</param>
    /// <returns>此委托封装的方法的返回值。</returns>
    public delegate TResult GameFrameworkFunc<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);
}


================================================
FILE: GameFramework/Base/GameFrameworkLinkedList.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架链表类。
    /// </summary>
    /// <typeparam name="T">指定链表的元素类型。</typeparam>
    public sealed class GameFrameworkLinkedList<T> : ICollection<T>, IEnumerable<T>, ICollection, IEnumerable
    {
        private readonly LinkedList<T> m_LinkedList;
        private readonly Queue<LinkedListNode<T>> m_CachedNodes;

        /// <summary>
        /// 初始化游戏框架链表类的新实例。
        /// </summary>
        public GameFrameworkLinkedList()
        {
            m_LinkedList = new LinkedList<T>();
            m_CachedNodes = new Queue<LinkedListNode<T>>();
        }

        /// <summary>
        /// 获取链表中实际包含的结点数量。
        /// </summary>
        public int Count
        {
            get
            {
                return m_LinkedList.Count;
            }
        }

        /// <summary>
        /// 获取链表结点缓存数量。
        /// </summary>
        public int CachedNodeCount
        {
            get
            {
                return m_CachedNodes.Count;
            }
        }

        /// <summary>
        /// 获取链表的第一个结点。
        /// </summary>
        public LinkedListNode<T> First
        {
            get
            {
                return m_LinkedList.First;
            }
        }

        /// <summary>
        /// 获取链表的最后一个结点。
        /// </summary>
        public LinkedListNode<T> Last
        {
            get
            {
                return m_LinkedList.Last;
            }
        }

        /// <summary>
        /// 获取一个值,该值指示 ICollection`1 是否为只读。
        /// </summary>
        public bool IsReadOnly
        {
            get
            {
                return ((ICollection<T>)m_LinkedList).IsReadOnly;
            }
        }

        /// <summary>
        /// 获取可用于同步对 ICollection 的访问的对象。
        /// </summary>
        public object SyncRoot
        {
            get
            {
                return ((ICollection)m_LinkedList).SyncRoot;
            }
        }

        /// <summary>
        /// 获取一个值,该值指示是否同步对 ICollection 的访问(线程安全)。
        /// </summary>
        public bool IsSynchronized
        {
            get
            {
                return ((ICollection)m_LinkedList).IsSynchronized;
            }
        }

        /// <summary>
        /// 在链表中指定的现有结点后添加包含指定值的新结点。
        /// </summary>
        /// <param name="node">指定的现有结点。</param>
        /// <param name="value">指定值。</param>
        /// <returns>包含指定值的新结点。</returns>
        public LinkedListNode<T> AddAfter(LinkedListNode<T> node, T value)
        {
            LinkedListNode<T> newNode = AcquireNode(value);
            m_LinkedList.AddAfter(node, newNode);
            return newNode;
        }

        /// <summary>
        /// 在链表中指定的现有结点后添加指定的新结点。
        /// </summary>
        /// <param name="node">指定的现有结点。</param>
        /// <param name="newNode">指定的新结点。</param>
        public void AddAfter(LinkedListNode<T> node, LinkedListNode<T> newNode)
        {
            m_LinkedList.AddAfter(node, newNode);
        }

        /// <summary>
        /// 在链表中指定的现有结点前添加包含指定值的新结点。
        /// </summary>
        /// <param name="node">指定的现有结点。</param>
        /// <param name="value">指定值。</param>
        /// <returns>包含指定值的新结点。</returns>
        public LinkedListNode<T> AddBefore(LinkedListNode<T> node, T value)
        {
            LinkedListNode<T> newNode = AcquireNode(value);
            m_LinkedList.AddBefore(node, newNode);
            return newNode;
        }

        /// <summary>
        /// 在链表中指定的现有结点前添加指定的新结点。
        /// </summary>
        /// <param name="node">指定的现有结点。</param>
        /// <param name="newNode">指定的新结点。</param>
        public void AddBefore(LinkedListNode<T> node, LinkedListNode<T> newNode)
        {
            m_LinkedList.AddBefore(node, newNode);
        }

        /// <summary>
        /// 在链表的开头处添加包含指定值的新结点。
        /// </summary>
        /// <param name="value">指定值。</param>
        /// <returns>包含指定值的新结点。</returns>
        public LinkedListNode<T> AddFirst(T value)
        {
            LinkedListNode<T> node = AcquireNode(value);
            m_LinkedList.AddFirst(node);
            return node;
        }

        /// <summary>
        /// 在链表的开头处添加指定的新结点。
        /// </summary>
        /// <param name="node">指定的新结点。</param>
        public void AddFirst(LinkedListNode<T> node)
        {
            m_LinkedList.AddFirst(node);
        }

        /// <summary>
        /// 在链表的结尾处添加包含指定值的新结点。
        /// </summary>
        /// <param name="value">指定值。</param>
        /// <returns>包含指定值的新结点。</returns>
        public LinkedListNode<T> AddLast(T value)
        {
            LinkedListNode<T> node = AcquireNode(value);
            m_LinkedList.AddLast(node);
            return node;
        }

        /// <summary>
        /// 在链表的结尾处添加指定的新结点。
        /// </summary>
        /// <param name="node">指定的新结点。</param>
        public void AddLast(LinkedListNode<T> node)
        {
            m_LinkedList.AddLast(node);
        }

        /// <summary>
        /// 从链表中移除所有结点。
        /// </summary>
        public void Clear()
        {
            LinkedListNode<T> current = m_LinkedList.First;
            while (current != null)
            {
                ReleaseNode(current);
                current = current.Next;
            }

            m_LinkedList.Clear();
        }

        /// <summary>
        /// 清除链表结点缓存。
        /// </summary>
        public void ClearCachedNodes()
        {
            m_CachedNodes.Clear();
        }

        /// <summary>
        /// 确定某值是否在链表中。
        /// </summary>
        /// <param name="value">指定值。</param>
        /// <returns>某值是否在链表中。</returns>
        public bool Contains(T value)
        {
            return m_LinkedList.Contains(value);
        }

        /// <summary>
        /// 从目标数组的指定索引处开始将整个链表复制到兼容的一维数组。
        /// </summary>
        /// <param name="array">一维数组,它是从链表复制的元素的目标。数组必须具有从零开始的索引。</param>
        /// <param name="index">array 中从零开始的索引,从此处开始复制。</param>
        public void CopyTo(T[] array, int index)
        {
            m_LinkedList.CopyTo(array, index);
        }

        /// <summary>
        /// 从特定的 ICollection 索引开始,将数组的元素复制到一个数组中。
        /// </summary>
        /// <param name="array">一维数组,它是从 ICollection 复制的元素的目标。数组必须具有从零开始的索引。</param>
        /// <param name="index">array 中从零开始的索引,从此处开始复制。</param>
        public void CopyTo(Array array, int index)
        {
            ((ICollection)m_LinkedList).CopyTo(array, index);
        }

        /// <summary>
        /// 查找包含指定值的第一个结点。
        /// </summary>
        /// <param name="value">要查找的指定值。</param>
        /// <returns>包含指定值的第一个结点。</returns>
        public LinkedListNode<T> Find(T value)
        {
            return m_LinkedList.Find(value);
        }

        /// <summary>
        /// 查找包含指定值的最后一个结点。
        /// </summary>
        /// <param name="value">要查找的指定值。</param>
        /// <returns>包含指定值的最后一个结点。</returns>
        public LinkedListNode<T> FindLast(T value)
        {
            return m_LinkedList.FindLast(value);
        }

        /// <summary>
        /// 从链表中移除指定值的第一个匹配项。
        /// </summary>
        /// <param name="value">指定值。</param>
        /// <returns>是否移除成功。</returns>
        public bool Remove(T value)
        {
            LinkedListNode<T> node = m_LinkedList.Find(value);
            if (node != null)
            {
                m_LinkedList.Remove(node);
                ReleaseNode(node);
                return true;
            }

            return false;
        }

        /// <summary>
        /// 从链表中移除指定的结点。
        /// </summary>
        /// <param name="node">指定的结点。</param>
        public void Remove(LinkedListNode<T> node)
        {
            m_LinkedList.Remove(node);
            ReleaseNode(node);
        }

        /// <summary>
        /// 移除位于链表开头处的结点。
        /// </summary>
        public void RemoveFirst()
        {
            LinkedListNode<T> first = m_LinkedList.First;
            if (first == null)
            {
                throw new GameFrameworkException("First is invalid.");
            }

            m_LinkedList.RemoveFirst();
            ReleaseNode(first);
        }

        /// <summary>
        /// 移除位于链表结尾处的结点。
        /// </summary>
        public void RemoveLast()
        {
            LinkedListNode<T> last = m_LinkedList.Last;
            if (last == null)
            {
                throw new GameFrameworkException("Last is invalid.");
            }

            m_LinkedList.RemoveLast();
            ReleaseNode(last);
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        public Enumerator GetEnumerator()
        {
            return new Enumerator(m_LinkedList);
        }

        private LinkedListNode<T> AcquireNode(T value)
        {
            LinkedListNode<T> node = null;
            if (m_CachedNodes.Count > 0)
            {
                node = m_CachedNodes.Dequeue();
                node.Value = value;
            }
            else
            {
                node = new LinkedListNode<T>(value);
            }

            return node;
        }

        private void ReleaseNode(LinkedListNode<T> node)
        {
            node.Value = default(T);
            m_CachedNodes.Enqueue(node);
        }

        /// <summary>
        /// 将值添加到 ICollection`1 的结尾处。
        /// </summary>
        /// <param name="value">要添加的值。</param>
        void ICollection<T>.Add(T value)
        {
            AddLast(value);
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// 循环访问集合的枚举数。
        /// </summary>
        [StructLayout(LayoutKind.Auto)]
        public struct Enumerator : IEnumerator<T>, IEnumerator
        {
            private LinkedList<T>.Enumerator m_Enumerator;

            internal Enumerator(LinkedList<T> linkedList)
            {
                if (linkedList == null)
                {
                    throw new GameFrameworkException("Linked list is invalid.");
                }

                m_Enumerator = linkedList.GetEnumerator();
            }

            /// <summary>
            /// 获取当前结点。
            /// </summary>
            public T Current
            {
                get
                {
                    return m_Enumerator.Current;
                }
            }

            /// <summary>
            /// 获取当前的枚举数。
            /// </summary>
            object IEnumerator.Current
            {
                get
                {
                    return m_Enumerator.Current;
                }
            }

            /// <summary>
            /// 清理枚举数。
            /// </summary>
            public void Dispose()
            {
                m_Enumerator.Dispose();
            }

            /// <summary>
            /// 获取下一个结点。
            /// </summary>
            /// <returns>返回下一个结点。</returns>
            public bool MoveNext()
            {
                return m_Enumerator.MoveNext();
            }

            /// <summary>
            /// 重置枚举数。
            /// </summary>
            void IEnumerator.Reset()
            {
                ((IEnumerator<T>)m_Enumerator).Reset();
            }
        }
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkLinkedListRange.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架链表范围。
    /// </summary>
    /// <typeparam name="T">指定链表范围的元素类型。</typeparam>
    [StructLayout(LayoutKind.Auto)]
    public struct GameFrameworkLinkedListRange<T> : IEnumerable<T>, IEnumerable
    {
        private readonly LinkedListNode<T> m_First;
        private readonly LinkedListNode<T> m_Terminal;

        /// <summary>
        /// 初始化游戏框架链表范围的新实例。
        /// </summary>
        /// <param name="first">链表范围的开始结点。</param>
        /// <param name="terminal">链表范围的终结标记结点。</param>
        public GameFrameworkLinkedListRange(LinkedListNode<T> first, LinkedListNode<T> terminal)
        {
            if (first == null || terminal == null || first == terminal)
            {
                throw new GameFrameworkException("Range is invalid.");
            }

            m_First = first;
            m_Terminal = terminal;
        }

        /// <summary>
        /// 获取链表范围是否有效。
        /// </summary>
        public bool IsValid
        {
            get
            {
                return m_First != null && m_Terminal != null && m_First != m_Terminal;
            }
        }

        /// <summary>
        /// 获取链表范围的开始结点。
        /// </summary>
        public LinkedListNode<T> First
        {
            get
            {
                return m_First;
            }
        }

        /// <summary>
        /// 获取链表范围的终结标记结点。
        /// </summary>
        public LinkedListNode<T> Terminal
        {
            get
            {
                return m_Terminal;
            }
        }

        /// <summary>
        /// 获取链表范围的结点数量。
        /// </summary>
        public int Count
        {
            get
            {
                if (!IsValid)
                {
                    return 0;
                }

                int count = 0;
                for (LinkedListNode<T> current = m_First; current != null && current != m_Terminal; current = current.Next)
                {
                    count++;
                }

                return count;
            }
        }

        /// <summary>
        /// 检查是否包含指定值。
        /// </summary>
        /// <param name="value">要检查的值。</param>
        /// <returns>是否包含指定值。</returns>
        public bool Contains(T value)
        {
            for (LinkedListNode<T> current = m_First; current != null && current != m_Terminal; current = current.Next)
            {
                if (current.Value.Equals(value))
                {
                    return true;
                }
            }

            return false;
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        public Enumerator GetEnumerator()
        {
            return new Enumerator(this);
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// 循环访问集合的枚举数。
        /// </summary>
        [StructLayout(LayoutKind.Auto)]
        public struct Enumerator : IEnumerator<T>, IEnumerator
        {
            private readonly GameFrameworkLinkedListRange<T> m_GameFrameworkLinkedListRange;
            private LinkedListNode<T> m_Current;
            private T m_CurrentValue;

            internal Enumerator(GameFrameworkLinkedListRange<T> range)
            {
                if (!range.IsValid)
                {
                    throw new GameFrameworkException("Range is invalid.");
                }

                m_GameFrameworkLinkedListRange = range;
                m_Current = m_GameFrameworkLinkedListRange.m_First;
                m_CurrentValue = default(T);
            }

            /// <summary>
            /// 获取当前结点。
            /// </summary>
            public T Current
            {
                get
                {
                    return m_CurrentValue;
                }
            }

            /// <summary>
            /// 获取当前的枚举数。
            /// </summary>
            object IEnumerator.Current
            {
                get
                {
                    return m_CurrentValue;
                }
            }

            /// <summary>
            /// 清理枚举数。
            /// </summary>
            public void Dispose()
            {
            }

            /// <summary>
            /// 获取下一个结点。
            /// </summary>
            /// <returns>返回下一个结点。</returns>
            public bool MoveNext()
            {
                if (m_Current == null || m_Current == m_GameFrameworkLinkedListRange.m_Terminal)
                {
                    return false;
                }

                m_CurrentValue = m_Current.Value;
                m_Current = m_Current.Next;
                return true;
            }

            /// <summary>
            /// 重置枚举数。
            /// </summary>
            void IEnumerator.Reset()
            {
                m_Current = m_GameFrameworkLinkedListRange.m_First;
                m_CurrentValue = default(T);
            }
        }
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkModule.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 游戏框架模块抽象类。
    /// </summary>
    internal abstract class GameFrameworkModule
    {
        /// <summary>
        /// 获取游戏框架模块优先级。
        /// </summary>
        /// <remarks>优先级较高的模块会优先轮询,并且关闭操作会后进行。</remarks>
        internal virtual int Priority
        {
            get
            {
                return 0;
            }
        }

        /// <summary>
        /// 游戏框架模块轮询。
        /// </summary>
        /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
        /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
        internal abstract void Update(float elapseSeconds, float realElapseSeconds);

        /// <summary>
        /// 关闭并清理游戏框架模块。
        /// </summary>
        internal abstract void Shutdown();
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkMultiDictionary.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架多值字典类。
    /// </summary>
    /// <typeparam name="TKey">指定多值字典的主键类型。</typeparam>
    /// <typeparam name="TValue">指定多值字典的值类型。</typeparam>
    public sealed class GameFrameworkMultiDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>>>, IEnumerable
    {
        private readonly GameFrameworkLinkedList<TValue> m_LinkedList;
        private readonly Dictionary<TKey, GameFrameworkLinkedListRange<TValue>> m_Dictionary;

        /// <summary>
        /// 初始化游戏框架多值字典类的新实例。
        /// </summary>
        public GameFrameworkMultiDictionary()
        {
            m_LinkedList = new GameFrameworkLinkedList<TValue>();
            m_Dictionary = new Dictionary<TKey, GameFrameworkLinkedListRange<TValue>>();
        }

        /// <summary>
        /// 获取多值字典中实际包含的主键数量。
        /// </summary>
        public int Count
        {
            get
            {
                return m_Dictionary.Count;
            }
        }

        /// <summary>
        /// 获取多值字典中指定主键的范围。
        /// </summary>
        /// <param name="key">指定的主键。</param>
        /// <returns>指定主键的范围。</returns>
        public GameFrameworkLinkedListRange<TValue> this[TKey key]
        {
            get
            {
                GameFrameworkLinkedListRange<TValue> range = default(GameFrameworkLinkedListRange<TValue>);
                m_Dictionary.TryGetValue(key, out range);
                return range;
            }
        }

        /// <summary>
        /// 清理多值字典。
        /// </summary>
        public void Clear()
        {
            m_Dictionary.Clear();
            m_LinkedList.Clear();
        }

        /// <summary>
        /// 检查多值字典中是否包含指定主键。
        /// </summary>
        /// <param name="key">要检查的主键。</param>
        /// <returns>多值字典中是否包含指定主键。</returns>
        public bool Contains(TKey key)
        {
            return m_Dictionary.ContainsKey(key);
        }

        /// <summary>
        /// 检查多值字典中是否包含指定值。
        /// </summary>
        /// <param name="key">要检查的主键。</param>
        /// <param name="value">要检查的值。</param>
        /// <returns>多值字典中是否包含指定值。</returns>
        public bool Contains(TKey key, TValue value)
        {
            GameFrameworkLinkedListRange<TValue> range = default(GameFrameworkLinkedListRange<TValue>);
            if (m_Dictionary.TryGetValue(key, out range))
            {
                return range.Contains(value);
            }

            return false;
        }

        /// <summary>
        /// 尝试获取多值字典中指定主键的范围。
        /// </summary>
        /// <param name="key">指定的主键。</param>
        /// <param name="range">指定主键的范围。</param>
        /// <returns>是否获取成功。</returns>
        public bool TryGetValue(TKey key, out GameFrameworkLinkedListRange<TValue> range)
        {
            return m_Dictionary.TryGetValue(key, out range);
        }

        /// <summary>
        /// 向指定的主键增加指定的值。
        /// </summary>
        /// <param name="key">指定的主键。</param>
        /// <param name="value">指定的值。</param>
        public void Add(TKey key, TValue value)
        {
            GameFrameworkLinkedListRange<TValue> range = default(GameFrameworkLinkedListRange<TValue>);
            if (m_Dictionary.TryGetValue(key, out range))
            {
                m_LinkedList.AddBefore(range.Terminal, value);
            }
            else
            {
                LinkedListNode<TValue> first = m_LinkedList.AddLast(value);
                LinkedListNode<TValue> terminal = m_LinkedList.AddLast(default(TValue));
                m_Dictionary.Add(key, new GameFrameworkLinkedListRange<TValue>(first, terminal));
            }
        }

        /// <summary>
        /// 从指定的主键中移除指定的值。
        /// </summary>
        /// <param name="key">指定的主键。</param>
        /// <param name="value">指定的值。</param>
        /// <returns>是否移除成功。</returns>
        public bool Remove(TKey key, TValue value)
        {
            GameFrameworkLinkedListRange<TValue> range = default(GameFrameworkLinkedListRange<TValue>);
            if (m_Dictionary.TryGetValue(key, out range))
            {
                for (LinkedListNode<TValue> current = range.First; current != null && current != range.Terminal; current = current.Next)
                {
                    if (current.Value.Equals(value))
                    {
                        if (current == range.First)
                        {
                            LinkedListNode<TValue> next = current.Next;
                            if (next == range.Terminal)
                            {
                                m_LinkedList.Remove(next);
                                m_Dictionary.Remove(key);
                            }
                            else
                            {
                                m_Dictionary[key] = new GameFrameworkLinkedListRange<TValue>(next, range.Terminal);
                            }
                        }

                        m_LinkedList.Remove(current);
                        return true;
                    }
                }
            }

            return false;
        }

        /// <summary>
        /// 从指定的主键中移除所有的值。
        /// </summary>
        /// <param name="key">指定的主键。</param>
        /// <returns>是否移除成功。</returns>
        public bool RemoveAll(TKey key)
        {
            GameFrameworkLinkedListRange<TValue> range = default(GameFrameworkLinkedListRange<TValue>);
            if (m_Dictionary.TryGetValue(key, out range))
            {
                m_Dictionary.Remove(key);

                LinkedListNode<TValue> current = range.First;
                while (current != null)
                {
                    LinkedListNode<TValue> next = current != range.Terminal ? current.Next : null;
                    m_LinkedList.Remove(current);
                    current = next;
                }

                return true;
            }

            return false;
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        public Enumerator GetEnumerator()
        {
            return new Enumerator(m_Dictionary);
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        IEnumerator<KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>>> IEnumerable<KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>>>.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// 返回循环访问集合的枚举数。
        /// </summary>
        /// <returns>循环访问集合的枚举数。</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        /// <summary>
        /// 循环访问集合的枚举数。
        /// </summary>
        [StructLayout(LayoutKind.Auto)]
        public struct Enumerator : IEnumerator<KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>>>, IEnumerator
        {
            private Dictionary<TKey, GameFrameworkLinkedListRange<TValue>>.Enumerator m_Enumerator;

            internal Enumerator(Dictionary<TKey, GameFrameworkLinkedListRange<TValue>> dictionary)
            {
                if (dictionary == null)
                {
                    throw new GameFrameworkException("Dictionary is invalid.");
                }

                m_Enumerator = dictionary.GetEnumerator();
            }

            /// <summary>
            /// 获取当前结点。
            /// </summary>
            public KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>> Current
            {
                get
                {
                    return m_Enumerator.Current;
                }
            }

            /// <summary>
            /// 获取当前的枚举数。
            /// </summary>
            object IEnumerator.Current
            {
                get
                {
                    return m_Enumerator.Current;
                }
            }

            /// <summary>
            /// 清理枚举数。
            /// </summary>
            public void Dispose()
            {
                m_Enumerator.Dispose();
            }

            /// <summary>
            /// 获取下一个结点。
            /// </summary>
            /// <returns>返回下一个结点。</returns>
            public bool MoveNext()
            {
                return m_Enumerator.MoveNext();
            }

            /// <summary>
            /// 重置枚举数。
            /// </summary>
            void IEnumerator.Reset()
            {
                ((IEnumerator<KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>>>)m_Enumerator).Reset();
            }
        }
    }
}


================================================
FILE: GameFramework/Base/GameFrameworkSerializer.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

using System.Collections.Generic;
using System.IO;

namespace GameFramework
{
    /// <summary>
    /// 游戏框架序列化器基类。
    /// </summary>
    /// <typeparam name="T">要序列化的数据类型。</typeparam>
    public abstract class GameFrameworkSerializer<T>
    {
        private readonly Dictionary<byte, SerializeCallback> m_SerializeCallbacks;
        private readonly Dictionary<byte, DeserializeCallback> m_DeserializeCallbacks;
        private readonly Dictionary<byte, TryGetValueCallback> m_TryGetValueCallbacks;
        private byte m_LatestSerializeCallbackVersion;

        /// <summary>
        /// 初始化游戏框架序列化器基类的新实例。
        /// </summary>
        public GameFrameworkSerializer()
        {
            m_SerializeCallbacks = new Dictionary<byte, SerializeCallback>();
            m_DeserializeCallbacks = new Dictionary<byte, DeserializeCallback>();
            m_TryGetValueCallbacks = new Dictionary<byte, TryGetValueCallback>();
            m_LatestSerializeCallbackVersion = 0;
        }

        /// <summary>
        /// 序列化回调函数。
        /// </summary>
        /// <param name="stream">目标流。</param>
        /// <param name="data">要序列化的数据。</param>
        /// <returns>是否序列化数据成功。</returns>
        public delegate bool SerializeCallback(Stream stream, T data);

        /// <summary>
        /// 反序列化回调函数。
        /// </summary>
        /// <param name="stream">指定流。</param>
        /// <returns>反序列化的数据。</returns>
        public delegate T DeserializeCallback(Stream stream);

        /// <summary>
        /// 尝试从指定流获取指定键的值回调函数。
        /// </summary>
        /// <param name="stream">指定流。</param>
        /// <param name="key">指定键。</param>
        /// <param name="value">指定键的值。</param>
        /// <returns>是否从指定流获取指定键的值成功。</returns>
        public delegate bool TryGetValueCallback(Stream stream, string key, out object value);

        /// <summary>
        /// 注册序列化回调函数。
        /// </summary>
        /// <param name="version">序列化回调函数的版本。</param>
        /// <param name="callback">序列化回调函数。</param>
        public void RegisterSerializeCallback(byte version, SerializeCallback callback)
        {
            if (callback == null)
            {
                throw new GameFrameworkException("Serialize callback is invalid.");
            }

            m_SerializeCallbacks[version] = callback;
            if (version > m_LatestSerializeCallbackVersion)
            {
                m_LatestSerializeCallbackVersion = version;
            }
        }

        /// <summary>
        /// 注册反序列化回调函数。
        /// </summary>
        /// <param name="version">反序列化回调函数的版本。</param>
        /// <param name="callback">反序列化回调函数。</param>
        public void RegisterDeserializeCallback(byte version, DeserializeCallback callback)
        {
            if (callback == null)
            {
                throw new GameFrameworkException("Deserialize callback is invalid.");
            }

            m_DeserializeCallbacks[version] = callback;
        }

        /// <summary>
        /// 注册尝试从指定流获取指定键的值回调函数。
        /// </summary>
        /// <param name="version">尝试从指定流获取指定键的值回调函数的版本。</param>
        /// <param name="callback">尝试从指定流获取指定键的值回调函数。</param>
        public void RegisterTryGetValueCallback(byte version, TryGetValueCallback callback)
        {
            if (callback == null)
            {
                throw new GameFrameworkException("Try get value callback is invalid.");
            }

            m_TryGetValueCallbacks[version] = callback;
        }

        /// <summary>
        /// 序列化数据到目标流中。
        /// </summary>
        /// <param name="stream">目标流。</param>
        /// <param name="data">要序列化的数据。</param>
        /// <returns>是否序列化数据成功。</returns>
        public bool Serialize(Stream stream, T data)
        {
            if (m_SerializeCallbacks.Count <= 0)
            {
                throw new GameFrameworkException("No serialize callback registered.");
            }

            return Serialize(stream, data, m_LatestSerializeCallbackVersion);
        }

        /// <summary>
        /// 序列化数据到目标流中。
        /// </summary>
        /// <param name="stream">目标流。</param>
        /// <param name="data">要序列化的数据。</param>
        /// <param name="version">序列化回调函数的版本。</param>
        /// <returns>是否序列化数据成功。</returns>
        public bool Serialize(Stream stream, T data, byte version)
        {
            byte[] header = GetHeader();
            stream.WriteByte(header[0]);
            stream.WriteByte(header[1]);
            stream.WriteByte(header[2]);
            stream.WriteByte(version);
            SerializeCallback callback = null;
            if (!m_SerializeCallbacks.TryGetValue(version, out callback))
            {
                throw new GameFrameworkException(Utility.Text.Format("Serialize callback '{0}' is not exist.", version));
            }

            return callback(stream, data);
        }

        /// <summary>
        /// 从指定流反序列化数据。
        /// </summary>
        /// <param name="stream">指定流。</param>
        /// <returns>反序列化的数据。</returns>
        public T Deserialize(Stream stream)
        {
            byte[] header = GetHeader();
            byte header0 = (byte)stream.ReadByte();
            byte header1 = (byte)stream.ReadByte();
            byte header2 = (byte)stream.ReadByte();
            if (header0 != header[0] || header1 != header[1] || header2 != header[2])
            {
                throw new GameFrameworkException(Utility.Text.Format("Header is invalid, need '{0}{1}{2}', current '{3}{4}{5}'.", (char)header[0], (char)header[1], (char)header[2], (char)header0, (char)header1, (char)header2));
            }

            byte version = (byte)stream.ReadByte();
            DeserializeCallback callback = null;
            if (!m_DeserializeCallbacks.TryGetValue(version, out callback))
            {
                throw new GameFrameworkException(Utility.Text.Format("Deserialize callback '{0}' is not exist.", version));
            }

            return callback(stream);
        }

        /// <summary>
        /// 尝试从指定流获取指定键的值。
        /// </summary>
        /// <param name="stream">指定流。</param>
        /// <param name="key">指定键。</param>
        /// <param name="value">指定键的值。</param>
        /// <returns>是否从指定流获取指定键的值成功。</returns>
        public bool TryGetValue(Stream stream, string key, out object value)
        {
            value = null;
            byte[] header = GetHeader();
            byte header0 = (byte)stream.ReadByte();
            byte header1 = (byte)stream.ReadByte();
            byte header2 = (byte)stream.ReadByte();
            if (header0 != header[0] || header1 != header[1] || header2 != header[2])
            {
                return false;
            }

            byte version = (byte)stream.ReadByte();
            TryGetValueCallback callback = null;
            if (!m_TryGetValueCallbacks.TryGetValue(version, out callback))
            {
                return false;
            }

            return callback(stream, key, out value);
        }

        /// <summary>
        /// 获取数据头标识。
        /// </summary>
        /// <returns>数据头标识。</returns>
        protected abstract byte[] GetHeader();
    }
}


================================================
FILE: GameFramework/Base/Log/GameFrameworkLog.ILogHelper.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    public static partial class GameFrameworkLog
    {
        /// <summary>
        /// 游戏框架日志辅助器接口。
        /// </summary>
        public interface ILogHelper
        {
            /// <summary>
            /// 记录日志。
            /// </summary>
            /// <param name="level">游戏框架日志等级。</param>
            /// <param name="message">日志内容。</param>
            void Log(GameFrameworkLogLevel level, object message);
        }
    }
}


================================================
FILE: GameFramework/Base/Log/GameFrameworkLog.cs
================================================
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------

namespace GameFramework
{
    /// <summary>
    /// 游戏框架日志类。
    /// </summary>
    public static partial class GameFrameworkLog
    {
        private static ILogHelper s_LogHelper = null;

        /// <summary>
        /// 设置游戏框架日志辅助器。
        /// </summary>
        /// <param name="logHelper">要设置的游戏框架日志辅助器。</param>
        public static void SetLogHelper(ILogHelper logHelper)
        {
            s_LogHelper = logHelper;
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <param name="message">日志内容。</param>
        public static void Debug(object message)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, message);
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <param name="message">日志内容。</param>
        public static void Debug(string message)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, message);
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T">日志参数的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg">日志参数。</param>
        public static void Debug<T>(string format, T arg)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Debug<T1, T2>(string format, T1 arg1, T2 arg2)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        public static void Debug<T1, T2, T3>(string format, T1 arg1, T2 arg2, T3 arg3)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        public static void Debug<T1, T2, T3, T4>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        public static void Debug<T1, T2, T3, T4, T5>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <typeparam name="T14">日志参数 14 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        /// <param name="arg14">日志参数 14。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <typeparam name="T14">日志参数 14 的类型。</typeparam>
        /// <typeparam name="T15">日志参数 15 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        /// <param name="arg14">日志参数 14。</param>
        /// <param name="arg15">日志参数 15。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15));
        }

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <typeparam name="T14">日志参数 14 的类型。</typeparam>
        /// <typeparam name="T15">日志参数 15 的类型。</typeparam>
        /// <typeparam name="T16">日志参数 16 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        /// <param name="arg14">日志参数 14。</param>
        /// <param name="arg15">日志参数 15。</param>
        /// <param name="arg16">日志参数 16。</param>
        public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Debug, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="message">日志内容。</param>
        public static void Info(object message)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, message);
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <param name="message">日志内容。</param>
        public static void Info(string message)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, message);
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T">日志参数的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg">日志参数。</param>
        public static void Info<T>(string format, T arg)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Info<T1, T2>(string format, T1 arg1, T2 arg2)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        public static void Info<T1, T2, T3>(string format, T1 arg1, T2 arg2, T3 arg3)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        public static void Info<T1, T2, T3, T4>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        public static void Info<T1, T2, T3, T4, T5>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        public static void Info<T1, T2, T3, T4, T5, T6>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <typeparam name="T14">日志参数 14 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        /// <param name="arg14">日志参数 14。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <typeparam name="T14">日志参数 14 的类型。</typeparam>
        /// <typeparam name="T15">日志参数 15 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        /// <param name="arg14">日志参数 14。</param>
        /// <param name="arg15">日志参数 15。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15));
        }

        /// <summary>
        /// 打印信息级别日志,用于记录程序正常运行日志信息。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <typeparam name="T9">日志参数 9 的类型。</typeparam>
        /// <typeparam name="T10">日志参数 10 的类型。</typeparam>
        /// <typeparam name="T11">日志参数 11 的类型。</typeparam>
        /// <typeparam name="T12">日志参数 12 的类型。</typeparam>
        /// <typeparam name="T13">日志参数 13 的类型。</typeparam>
        /// <typeparam name="T14">日志参数 14 的类型。</typeparam>
        /// <typeparam name="T15">日志参数 15 的类型。</typeparam>
        /// <typeparam name="T16">日志参数 16 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        /// <param name="arg8">日志参数 8。</param>
        /// <param name="arg9">日志参数 9。</param>
        /// <param name="arg10">日志参数 10。</param>
        /// <param name="arg11">日志参数 11。</param>
        /// <param name="arg12">日志参数 12。</param>
        /// <param name="arg13">日志参数 13。</param>
        /// <param name="arg14">日志参数 14。</param>
        /// <param name="arg15">日志参数 15。</param>
        /// <param name="arg16">日志参数 16。</param>
        public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Info, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="message">日志内容。</param>
        public static void Warning(object message)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, message);
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <param name="message">日志内容。</param>
        public static void Warning(string message)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, message);
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T">日志参数的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg">日志参数。</param>
        public static void Warning<T>(string format, T arg)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        public static void Warning<T1, T2>(string format, T1 arg1, T2 arg2)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg1, arg2));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        public static void Warning<T1, T2, T3>(string format, T1 arg1, T2 arg2, T3 arg3)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg1, arg2, arg3));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        public static void Warning<T1, T2, T3, T4>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg1, arg2, arg3, arg4));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        public static void Warning<T1, T2, T3, T4, T5>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        public static void Warning<T1, T2, T3, T4, T5, T6>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</param>
        /// <param name="arg2">日志参数 2。</param>
        /// <param name="arg3">日志参数 3。</param>
        /// <param name="arg4">日志参数 4。</param>
        /// <param name="arg5">日志参数 5。</param>
        /// <param name="arg6">日志参数 6。</param>
        /// <param name="arg7">日志参数 7。</param>
        public static void Warning<T1, T2, T3, T4, T5, T6, T7>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
        {
            if (s_LogHelper == null)
            {
                return;
            }

            s_LogHelper.Log(GameFrameworkLogLevel.Warning, Utility.Text.Format(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7));
        }

        /// <summary>
        /// 打印警告级别日志,建议在发生局部功能逻辑错误,但尚不会导致游戏崩溃或异常时使用。
        /// </summary>
        /// <typeparam name="T1">日志参数 1 的类型。</typeparam>
        /// <typeparam name="T2">日志参数 2 的类型。</typeparam>
        /// <typeparam name="T3">日志参数 3 的类型。</typeparam>
        /// <typeparam name="T4">日志参数 4 的类型。</typeparam>
        /// <typeparam name="T5">日志参数 5 的类型。</typeparam>
        /// <typeparam name="T6">日志参数 6 的类型。</typeparam>
        /// <typeparam name="T7">日志参数 7 的类型。</typeparam>
        /// <typeparam name="T8">日志参数 8 的类型。</typeparam>
        /// <param name="format">日志格式。</param>
        /// <param name="arg1">日志参数 1。</par
Download .txt
gitextract_cx5fvckj/

├── .gitignore
├── GameFramework/
│   ├── Base/
│   │   ├── DataProvider/
│   │   │   ├── DataProvider.cs
│   │   │   ├── DataProviderCreator.cs
│   │   │   ├── IDataProvider.cs
│   │   │   ├── IDataProviderHelper.cs
│   │   │   ├── ReadDataDependencyAssetEventArgs.cs
│   │   │   ├── ReadDataFailureEventArgs.cs
│   │   │   ├── ReadDataSuccessEventArgs.cs
│   │   │   └── ReadDataUpdateEventArgs.cs
│   │   ├── DataStruct/
│   │   │   └── TypeNamePair.cs
│   │   ├── EventPool/
│   │   │   ├── BaseEventArgs.cs
│   │   │   ├── EventPool.Event.cs
│   │   │   ├── EventPool.cs
│   │   │   └── EventPoolMode.cs
│   │   ├── GameFrameworkAction.cs
│   │   ├── GameFrameworkEntry.cs
│   │   ├── GameFrameworkEventArgs.cs
│   │   ├── GameFrameworkException.cs
│   │   ├── GameFrameworkFunc.cs
│   │   ├── GameFrameworkLinkedList.cs
│   │   ├── GameFrameworkLinkedListRange.cs
│   │   ├── GameFrameworkModule.cs
│   │   ├── GameFrameworkMultiDictionary.cs
│   │   ├── GameFrameworkSerializer.cs
│   │   ├── Log/
│   │   │   ├── GameFrameworkLog.ILogHelper.cs
│   │   │   ├── GameFrameworkLog.cs
│   │   │   └── GameFrameworkLogLevel.cs
│   │   ├── ReferencePool/
│   │   │   ├── IReference.cs
│   │   │   ├── ReferencePool.ReferenceCollection.cs
│   │   │   ├── ReferencePool.cs
│   │   │   └── ReferencePoolInfo.cs
│   │   ├── TaskPool/
│   │   │   ├── ITaskAgent.cs
│   │   │   ├── StartTaskStatus.cs
│   │   │   ├── TaskBase.cs
│   │   │   ├── TaskInfo.cs
│   │   │   ├── TaskPool.cs
│   │   │   └── TaskStatus.cs
│   │   ├── Variable/
│   │   │   ├── GenericVariable.cs
│   │   │   └── Variable.cs
│   │   └── Version/
│   │       ├── Version.IVersionHelper.cs
│   │       └── Version.cs
│   ├── Config/
│   │   ├── ConfigManager.ConfigData.cs
│   │   ├── ConfigManager.cs
│   │   ├── IConfigHelper.cs
│   │   └── IConfigManager.cs
│   ├── DataNode/
│   │   ├── DataNodeManager.DataNode.cs
│   │   ├── DataNodeManager.cs
│   │   ├── IDataNode.cs
│   │   └── IDataNodeManager.cs
│   ├── DataTable/
│   │   ├── DataTableBase.cs
│   │   ├── DataTableManager.DataTable.cs
│   │   ├── DataTableManager.cs
│   │   ├── IDataRow.cs
│   │   ├── IDataTable.cs
│   │   ├── IDataTableHelper.cs
│   │   └── IDataTableManager.cs
│   ├── Debugger/
│   │   ├── DebuggerManager.DebuggerWindowGroup.cs
│   │   ├── DebuggerManager.cs
│   │   ├── IDebuggerManager.cs
│   │   ├── IDebuggerWindow.cs
│   │   └── IDebuggerWindowGroup.cs
│   ├── Download/
│   │   ├── Constant.cs
│   │   ├── DownloadAgentHelperCompleteEventArgs.cs
│   │   ├── DownloadAgentHelperErrorEventArgs.cs
│   │   ├── DownloadAgentHelperUpdateBytesEventArgs.cs
│   │   ├── DownloadAgentHelperUpdateLengthEventArgs.cs
│   │   ├── DownloadFailureEventArgs.cs
│   │   ├── DownloadManager.DownloadAgent.cs
│   │   ├── DownloadManager.DownloadCounter.DownloadCounterNode.cs
│   │   ├── DownloadManager.DownloadCounter.cs
│   │   ├── DownloadManager.DownloadTask.cs
│   │   ├── DownloadManager.DownloadTaskStatus.cs
│   │   ├── DownloadManager.cs
│   │   ├── DownloadStartEventArgs.cs
│   │   ├── DownloadSuccessEventArgs.cs
│   │   ├── DownloadUpdateEventArgs.cs
│   │   ├── IDownloadAgentHelper.cs
│   │   └── IDownloadManager.cs
│   ├── Entity/
│   │   ├── EntityManager.EntityGroup.cs
│   │   ├── EntityManager.EntityInfo.cs
│   │   ├── EntityManager.EntityInstanceObject.cs
│   │   ├── EntityManager.EntityStatus.cs
│   │   ├── EntityManager.ShowEntityInfo.cs
│   │   ├── EntityManager.cs
│   │   ├── HideEntityCompleteEventArgs.cs
│   │   ├── IEntity.cs
│   │   ├── IEntityGroup.cs
│   │   ├── IEntityGroupHelper.cs
│   │   ├── IEntityHelper.cs
│   │   ├── IEntityManager.cs
│   │   ├── ShowEntityDependencyAssetEventArgs.cs
│   │   ├── ShowEntityFailureEventArgs.cs
│   │   ├── ShowEntitySuccessEventArgs.cs
│   │   └── ShowEntityUpdateEventArgs.cs
│   ├── Event/
│   │   ├── EventManager.cs
│   │   ├── GameEventArgs.cs
│   │   └── IEventManager.cs
│   ├── FileSystem/
│   │   ├── CommonFileSystemStream.cs
│   │   ├── FileInfo.cs
│   │   ├── FileSystem.BlockData.cs
│   │   ├── FileSystem.HeaderData.cs
│   │   ├── FileSystem.StringData.cs
│   │   ├── FileSystem.cs
│   │   ├── FileSystemAccess.cs
│   │   ├── FileSystemManager.cs
│   │   ├── FileSystemStream.cs
│   │   ├── IFileSystem.cs
│   │   ├── IFileSystemHelper.cs
│   │   └── IFileSystemManager.cs
│   ├── Fsm/
│   │   ├── Fsm.cs
│   │   ├── FsmBase.cs
│   │   ├── FsmManager.cs
│   │   ├── FsmState.cs
│   │   ├── IFsm.cs
│   │   └── IFsmManager.cs
│   ├── GameFramework.csproj
│   ├── Localization/
│   │   ├── ILocalizationHelper.cs
│   │   ├── ILocalizationManager.cs
│   │   ├── Language.cs
│   │   └── LocalizationManager.cs
│   ├── Network/
│   │   ├── AddressFamily.cs
│   │   ├── INetworkChannel.cs
│   │   ├── INetworkChannelHelper.cs
│   │   ├── INetworkManager.cs
│   │   ├── IPacketHandler.cs
│   │   ├── IPacketHeader.cs
│   │   ├── NetworkClosedEventArgs.cs
│   │   ├── NetworkConnectedEventArgs.cs
│   │   ├── NetworkCustomErrorEventArgs.cs
│   │   ├── NetworkErrorCode.cs
│   │   ├── NetworkErrorEventArgs.cs
│   │   ├── NetworkManager.ConnectState.cs
│   │   ├── NetworkManager.HeartBeatState.cs
│   │   ├── NetworkManager.NetworkChannelBase.cs
│   │   ├── NetworkManager.ReceiveState.cs
│   │   ├── NetworkManager.SendState.cs
│   │   ├── NetworkManager.TcpNetworkChannel.cs
│   │   ├── NetworkManager.TcpWithSyncReceiveNetworkChannel.cs
│   │   ├── NetworkManager.cs
│   │   ├── NetworkMissHeartBeatEventArgs.cs
│   │   ├── Packet.cs
│   │   └── ServiceType.cs
│   ├── ObjectPool/
│   │   ├── IObjectPool.cs
│   │   ├── IObjectPoolManager.cs
│   │   ├── ObjectBase.cs
│   │   ├── ObjectInfo.cs
│   │   ├── ObjectPoolBase.cs
│   │   ├── ObjectPoolManager.Object.cs
│   │   ├── ObjectPoolManager.ObjectPool.cs
│   │   ├── ObjectPoolManager.cs
│   │   └── ReleaseObjectFilterCallback.cs
│   ├── Procedure/
│   │   ├── IProcedureManager.cs
│   │   ├── ProcedureBase.cs
│   │   └── ProcedureManager.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── Resource/
│   │   ├── ApplyResourcesCompleteCallback.cs
│   │   ├── CheckResourcesCompleteCallback.cs
│   │   ├── CheckVersionListResult.cs
│   │   ├── Constant.cs
│   │   ├── DecryptResourceCallback.cs
│   │   ├── HasAssetResult.cs
│   │   ├── ILoadResourceAgentHelper.cs
│   │   ├── IResourceGroup.cs
│   │   ├── IResourceGroupCollection.cs
│   │   ├── IResourceHelper.cs
│   │   ├── IResourceManager.cs
│   │   ├── InitResourcesCompleteCallback.cs
│   │   ├── LoadAssetCallbacks.cs
│   │   ├── LoadAssetDependencyAssetCallback.cs
│   │   ├── LoadAssetFailureCallback.cs
│   │   ├── LoadAssetSuccessCallback.cs
│   │   ├── LoadAssetUpdateCallback.cs
│   │   ├── LoadBinaryCallbacks.cs
│   │   ├── LoadBinaryFailureCallback.cs
│   │   ├── LoadBinarySuccessCallback.cs
│   │   ├── LoadBytesCallbacks.cs
│   │   ├── LoadBytesFailureCallback.cs
│   │   ├── LoadBytesSuccessCallback.cs
│   │   ├── LoadResourceAgentHelperErrorEventArgs.cs
│   │   ├── LoadResourceAgentHelperLoadCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperParseBytesCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperReadBytesCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperReadFileCompleteEventArgs.cs
│   │   ├── LoadResourceAgentHelperUpdateEventArgs.cs
│   │   ├── LoadResourceProgress.cs
│   │   ├── LoadResourceStatus.cs
│   │   ├── LoadSceneCallbacks.cs
│   │   ├── LoadSceneDependencyAssetCallback.cs
│   │   ├── LoadSceneFailureCallback.cs
│   │   ├── LoadSceneSuccessCallback.cs
│   │   ├── LoadSceneUpdateCallback.cs
│   │   ├── LocalVersionList.FileSystem.cs
│   │   ├── LocalVersionList.Resource.cs
│   │   ├── LocalVersionList.cs
│   │   ├── PackageVersionList.Asset.cs
│   │   ├── PackageVersionList.FileSystem.cs
│   │   ├── PackageVersionList.Resource.cs
│   │   ├── PackageVersionList.ResourceGroup.cs
│   │   ├── PackageVersionList.cs
│   │   ├── PackageVersionListSerializer.cs
│   │   ├── ReadOnlyVersionListSerializer.cs
│   │   ├── ReadWriteVersionListSerializer.cs
│   │   ├── ResourceApplyFailureEventArgs.cs
│   │   ├── ResourceApplyStartEventArgs.cs
│   │   ├── ResourceApplySuccessEventArgs.cs
│   │   ├── ResourceManager.AssetInfo.cs
│   │   ├── ResourceManager.LoadType.cs
│   │   ├── ResourceManager.ReadWriteResourceInfo.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.CheckStatus.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.LocalVersionInfo.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.RemoteVersionInfo.cs
│   │   ├── ResourceManager.ResourceChecker.CheckInfo.cs
│   │   ├── ResourceManager.ResourceChecker.cs
│   │   ├── ResourceManager.ResourceGroup.cs
│   │   ├── ResourceManager.ResourceGroupCollection.cs
│   │   ├── ResourceManager.ResourceInfo.cs
│   │   ├── ResourceManager.ResourceIniter.cs
│   │   ├── ResourceManager.ResourceLoader.AssetObject.cs
│   │   ├── ResourceManager.ResourceLoader.LoadAssetTask.cs
│   │   ├── ResourceManager.ResourceLoader.LoadBinaryInfo.cs
│   │   ├── ResourceManager.ResourceLoader.LoadDependencyAssetTask.cs
│   │   ├── ResourceManager.ResourceLoader.LoadResourceAgent.cs
│   │   ├── ResourceManager.ResourceLoader.LoadResourceTaskBase.cs
│   │   ├── ResourceManager.ResourceLoader.LoadSceneTask.cs
│   │   ├── ResourceManager.ResourceLoader.ResourceObject.cs
│   │   ├── ResourceManager.ResourceLoader.cs
│   │   ├── ResourceManager.ResourceName.cs
│   │   ├── ResourceManager.ResourceNameComparer.cs
│   │   ├── ResourceManager.ResourceUpdater.ApplyInfo.cs
│   │   ├── ResourceManager.ResourceUpdater.UpdateInfo.cs
│   │   ├── ResourceManager.ResourceUpdater.cs
│   │   ├── ResourceManager.ResourceVerifier.VerifyInfo.cs
│   │   ├── ResourceManager.ResourceVerifier.cs
│   │   ├── ResourceManager.VersionListProcessor.cs
│   │   ├── ResourceManager.cs
│   │   ├── ResourceMode.cs
│   │   ├── ResourcePackVersionList.Resource.cs
│   │   ├── ResourcePackVersionList.cs
│   │   ├── ResourcePackVersionListSerializer.cs
│   │   ├── ResourceUpdateAllCompleteEventArgs.cs
│   │   ├── ResourceUpdateChangedEventArgs.cs
│   │   ├── ResourceUpdateFailureEventArgs.cs
│   │   ├── ResourceUpdateStartEventArgs.cs
│   │   ├── ResourceUpdateSuccessEventArgs.cs
│   │   ├── ResourceVerifyFailureEventArgs.cs
│   │   ├── ResourceVerifyStartEventArgs.cs
│   │   ├── ResourceVerifySuccessEventArgs.cs
│   │   ├── UnloadSceneCallbacks.cs
│   │   ├── UnloadSceneFailureCallback.cs
│   │   ├── UnloadSceneSuccessCallback.cs
│   │   ├── UpdatableVersionList.Asset.cs
│   │   ├── UpdatableVersionList.FileSystem.cs
│   │   ├── UpdatableVersionList.Resource.cs
│   │   ├── UpdatableVersionList.ResourceGroup.cs
│   │   ├── UpdatableVersionList.cs
│   │   ├── UpdatableVersionListSerializer.cs
│   │   ├── UpdateResourcesCompleteCallback.cs
│   │   ├── UpdateVersionListCallbacks.cs
│   │   ├── UpdateVersionListFailureCallback.cs
│   │   ├── UpdateVersionListSuccessCallback.cs
│   │   └── VerifyResourcesCompleteCallback.cs
│   ├── Scene/
│   │   ├── ISceneManager.cs
│   │   ├── LoadSceneDependencyAssetEventArgs.cs
│   │   ├── LoadSceneFailureEventArgs.cs
│   │   ├── LoadSceneSuccessEventArgs.cs
│   │   ├── LoadSceneUpdateEventArgs.cs
│   │   ├── SceneManager.cs
│   │   ├── UnloadSceneFailureEventArgs.cs
│   │   └── UnloadSceneSuccessEventArgs.cs
│   ├── Setting/
│   │   ├── ISettingHelper.cs
│   │   ├── ISettingManager.cs
│   │   └── SettingManager.cs
│   ├── Sound/
│   │   ├── Constant.cs
│   │   ├── ISoundAgent.cs
│   │   ├── ISoundAgentHelper.cs
│   │   ├── ISoundGroup.cs
│   │   ├── ISoundGroupHelper.cs
│   │   ├── ISoundHelper.cs
│   │   ├── ISoundManager.cs
│   │   ├── PlaySoundDependencyAssetEventArgs.cs
│   │   ├── PlaySoundErrorCode.cs
│   │   ├── PlaySoundFailureEventArgs.cs
│   │   ├── PlaySoundParams.cs
│   │   ├── PlaySoundSuccessEventArgs.cs
│   │   ├── PlaySoundUpdateEventArgs.cs
│   │   ├── ResetSoundAgentEventArgs.cs
│   │   ├── SoundManager.PlaySoundInfo.cs
│   │   ├── SoundManager.SoundAgent.cs
│   │   ├── SoundManager.SoundGroup.cs
│   │   └── SoundManager.cs
│   ├── UI/
│   │   ├── CloseUIFormCompleteEventArgs.cs
│   │   ├── IUIForm.cs
│   │   ├── IUIFormHelper.cs
│   │   ├── IUIGroup.cs
│   │   ├── IUIGroupHelper.cs
│   │   ├── IUIManager.cs
│   │   ├── OpenUIFormDependencyAssetEventArgs.cs
│   │   ├── OpenUIFormFailureEventArgs.cs
│   │   ├── OpenUIFormSuccessEventArgs.cs
│   │   ├── OpenUIFormUpdateEventArgs.cs
│   │   ├── UIManager.OpenUIFormInfo.cs
│   │   ├── UIManager.UIFormInstanceObject.cs
│   │   ├── UIManager.UIGroup.UIFormInfo.cs
│   │   ├── UIManager.UIGroup.cs
│   │   └── UIManager.cs
│   ├── Utility/
│   │   ├── Utility.Assembly.cs
│   │   ├── Utility.Compression.ICompressionHelper.cs
│   │   ├── Utility.Compression.cs
│   │   ├── Utility.Converter.cs
│   │   ├── Utility.Encryption.cs
│   │   ├── Utility.Json.IJsonHelper.cs
│   │   ├── Utility.Json.cs
│   │   ├── Utility.Marshal.cs
│   │   ├── Utility.Path.cs
│   │   ├── Utility.Random.cs
│   │   ├── Utility.Text.ITextHelper.cs
│   │   ├── Utility.Text.cs
│   │   ├── Utility.Verifier.Crc32.cs
│   │   ├── Utility.Verifier.cs
│   │   └── Utility.cs
│   └── WebRequest/
│       ├── Constant.cs
│       ├── IWebRequestAgentHelper.cs
│       ├── IWebRequestManager.cs
│       ├── WebRequestAgentHelperCompleteEventArgs.cs
│       ├── WebRequestAgentHelperErrorEventArgs.cs
│       ├── WebRequestFailureEventArgs.cs
│       ├── WebRequestManager.WebRequestAgent.cs
│       ├── WebRequestManager.WebRequestTask.cs
│       ├── WebRequestManager.WebRequestTaskStatus.cs
│       ├── WebRequestManager.cs
│       ├── WebRequestStartEventArgs.cs
│       └── WebRequestSuccessEventArgs.cs
├── GameFramework.sln
├── LICENSE.md
└── README.md
Download .txt
Showing preview only (295K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3032 symbols across 304 files)

FILE: GameFramework/Base/DataProvider/DataProvider.cs
  class DataProvider (line 17) | internal sealed class DataProvider<T> : IDataProvider<T>
    method DataProvider (line 36) | public DataProvider(T owner)
    method EnsureCachedBytesSize (line 124) | public static void EnsureCachedBytesSize(int ensureSize)
    method FreeCachedBytes (line 142) | public static void FreeCachedBytes()
    method ReadData (line 151) | public void ReadData(string dataAssetName)
    method ReadData (line 161) | public void ReadData(string dataAssetName, int priority)
    method ReadData (line 171) | public void ReadData(string dataAssetName, object userData)
    method ReadData (line 182) | public void ReadData(string dataAssetName, int priority, object userData)
    method ParseData (line 253) | public bool ParseData(string dataString)
    method ParseData (line 264) | public bool ParseData(string dataString, object userData)
    method ParseData (line 296) | public bool ParseData(byte[] dataBytes)
    method ParseData (line 312) | public bool ParseData(byte[] dataBytes, object userData)
    method ParseData (line 329) | public bool ParseData(byte[] dataBytes, int startIndex, int length)
    method ParseData (line 342) | public bool ParseData(byte[] dataBytes, int startIndex, int length, ob...
    method SetResourceManager (line 378) | internal void SetResourceManager(IResourceManager resourceManager)
    method SetDataProviderHelper (line 392) | internal void SetDataProviderHelper(IDataProviderHelper<T> dataProvide...
    method LoadAssetSuccessCallback (line 402) | private void LoadAssetSuccessCallback(string dataAssetName, object dat...
    method LoadAssetOrBinaryFailureCallback (line 436) | private void LoadAssetOrBinaryFailureCallback(string dataAssetName, Lo...
    method LoadAssetUpdateCallback (line 450) | private void LoadAssetUpdateCallback(string dataAssetName, float progr...
    method LoadAssetDependencyAssetCallback (line 460) | private void LoadAssetDependencyAssetCallback(string dataAssetName, st...
    method LoadBinarySuccessCallback (line 470) | private void LoadBinarySuccessCallback(string dataAssetName, byte[] da...

FILE: GameFramework/Base/DataProvider/DataProviderCreator.cs
  class DataProviderCreator (line 15) | public static class DataProviderCreator
    method GetCachedBytesSize (line 22) | public static int GetCachedBytesSize<T>()
    method EnsureCachedBytesSize (line 32) | public static void EnsureCachedBytesSize<T>(int ensureSize)
    method FreeCachedBytes (line 41) | public static void FreeCachedBytes<T>()
    method Create (line 54) | public static IDataProvider<T> Create<T>(T owner, IResourceManager res...

FILE: GameFramework/Base/DataProvider/IDataProvider.cs
  type IDataProvider (line 16) | public interface IDataProvider<T>
    method ReadData (line 42) | void ReadData(string dataAssetName);
    method ReadData (line 49) | void ReadData(string dataAssetName, int priority);
    method ReadData (line 56) | void ReadData(string dataAssetName, object userData);
    method ReadData (line 64) | void ReadData(string dataAssetName, int priority, object userData);
    method ParseData (line 71) | bool ParseData(string dataString);
    method ParseData (line 79) | bool ParseData(string dataString, object userData);
    method ParseData (line 86) | bool ParseData(byte[] dataBytes);
    method ParseData (line 94) | bool ParseData(byte[] dataBytes, object userData);
    method ParseData (line 103) | bool ParseData(byte[] dataBytes, int startIndex, int length);
    method ParseData (line 113) | bool ParseData(byte[] dataBytes, int startIndex, int length, object us...

FILE: GameFramework/Base/DataProvider/IDataProviderHelper.cs
  type IDataProviderHelper (line 13) | public interface IDataProviderHelper<T>
    method ReadData (line 23) | bool ReadData(T dataProviderOwner, string dataAssetName, object dataAs...
    method ReadData (line 35) | bool ReadData(T dataProviderOwner, string dataAssetName, byte[] dataBy...
    method ParseData (line 44) | bool ParseData(T dataProviderOwner, string dataString, object userData);
    method ParseData (line 55) | bool ParseData(T dataProviderOwner, byte[] dataBytes, int startIndex, ...
    method ReleaseDataAsset (line 62) | void ReleaseDataAsset(T dataProviderOwner, object dataAsset);

FILE: GameFramework/Base/DataProvider/ReadDataDependencyAssetEventArgs.cs
  class ReadDataDependencyAssetEventArgs (line 13) | public sealed class ReadDataDependencyAssetEventArgs : GameFrameworkEven...
    method ReadDataDependencyAssetEventArgs (line 18) | public ReadDataDependencyAssetEventArgs()
    method Create (line 81) | public static ReadDataDependencyAssetEventArgs Create(string dataAsset...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Base/DataProvider/ReadDataFailureEventArgs.cs
  class ReadDataFailureEventArgs (line 13) | public sealed class ReadDataFailureEventArgs : GameFrameworkEventArgs
    method ReadDataFailureEventArgs (line 18) | public ReadDataFailureEventArgs()
    method Create (line 59) | public static ReadDataFailureEventArgs Create(string dataAssetName, st...
    method Clear (line 71) | public override void Clear()

FILE: GameFramework/Base/DataProvider/ReadDataSuccessEventArgs.cs
  class ReadDataSuccessEventArgs (line 13) | public sealed class ReadDataSuccessEventArgs : GameFrameworkEventArgs
    method ReadDataSuccessEventArgs (line 18) | public ReadDataSuccessEventArgs()
    method Create (line 59) | public static ReadDataSuccessEventArgs Create(string dataAssetName, fl...
    method Clear (line 71) | public override void Clear()

FILE: GameFramework/Base/DataProvider/ReadDataUpdateEventArgs.cs
  class ReadDataUpdateEventArgs (line 13) | public sealed class ReadDataUpdateEventArgs : GameFrameworkEventArgs
    method ReadDataUpdateEventArgs (line 18) | public ReadDataUpdateEventArgs()
    method Create (line 59) | public static ReadDataUpdateEventArgs Create(string dataAssetName, flo...
    method Clear (line 71) | public override void Clear()

FILE: GameFramework/Base/DataStruct/TypeNamePair.cs
  type TypeNamePair (line 16) | [StructLayout(LayoutKind.Auto)]
    method TypeNamePair (line 26) | public TypeNamePair(Type type)
    method TypeNamePair (line 36) | public TypeNamePair(Type type, string name)
    method ToString (line 73) | public override string ToString()
    method GetHashCode (line 88) | public override int GetHashCode()
    method Equals (line 98) | public override bool Equals(object obj)
    method Equals (line 108) | public bool Equals(TypeNamePair value)

FILE: GameFramework/Base/EventPool/BaseEventArgs.cs
  class BaseEventArgs (line 13) | public abstract class BaseEventArgs : GameFrameworkEventArgs

FILE: GameFramework/Base/EventPool/EventPool.Event.cs
  class EventPool (line 10) | internal sealed partial class EventPool<T> where T : BaseEventArgs
    class Event (line 15) | private sealed class Event : IReference
      method Event (line 20) | public Event()
      method Create (line 42) | public static Event Create(object sender, T e)
      method Clear (line 50) | public void Clear()

FILE: GameFramework/Base/EventPool/EventPool.cs
  class EventPool (line 17) | internal sealed partial class EventPool<T> where T : BaseEventArgs
    method EventPool (line 30) | public EventPool(EventPoolMode mode)
    method Update (line 67) | public void Update(float elapseSeconds, float realElapseSeconds)
    method Shutdown (line 83) | public void Shutdown()
    method Clear (line 95) | public void Clear()
    method Count (line 108) | public int Count(int id)
    method Check (line 125) | public bool Check(int id, EventHandler<T> handler)
    method Subscribe (line 140) | public void Subscribe(int id, EventHandler<T> handler)
    method Unsubscribe (line 170) | public void Unsubscribe(int id, EventHandler<T> handler)
    method SetDefaultHandler (line 208) | public void SetDefaultHandler(EventHandler<T> handler)
    method Fire (line 218) | public void Fire(object sender, T e)
    method FireNow (line 237) | public void FireNow(object sender, T e)
    method HandleEvent (line 252) | private void HandleEvent(object sender, T e)

FILE: GameFramework/Base/EventPool/EventPoolMode.cs
  type EventPoolMode (line 15) | [Flags]

FILE: GameFramework/Base/GameFrameworkEntry.cs
  class GameFrameworkEntry (line 16) | public static class GameFrameworkEntry
    method Update (line 25) | public static void Update(float elapseSeconds, float realElapseSeconds)
    method Shutdown (line 36) | public static void Shutdown()
    method GetModule (line 55) | public static T GetModule<T>() where T : class
    method GetModule (line 84) | private static GameFrameworkModule GetModule(Type moduleType)
    method CreateModule (line 102) | private static GameFrameworkModule CreateModule(Type moduleType)

FILE: GameFramework/Base/GameFrameworkEventArgs.cs
  class GameFrameworkEventArgs (line 15) | public abstract class GameFrameworkEventArgs : EventArgs, IReference
    method GameFrameworkEventArgs (line 20) | public GameFrameworkEventArgs()
    method Clear (line 27) | public abstract void Clear();

FILE: GameFramework/Base/GameFrameworkException.cs
  class GameFrameworkException (line 16) | [Serializable]
    method GameFrameworkException (line 22) | public GameFrameworkException()
    method GameFrameworkException (line 31) | public GameFrameworkException(string message)
    method GameFrameworkException (line 41) | public GameFrameworkException(string message, Exception innerException)
    method GameFrameworkException (line 51) | protected GameFrameworkException(SerializationInfo info, StreamingCont...

FILE: GameFramework/Base/GameFrameworkLinkedList.cs
  class GameFrameworkLinkedList (line 19) | public sealed class GameFrameworkLinkedList<T> : ICollection<T>, IEnumer...
    method GameFrameworkLinkedList (line 27) | public GameFrameworkLinkedList()
    method AddAfter (line 116) | public LinkedListNode<T> AddAfter(LinkedListNode<T> node, T value)
    method AddAfter (line 128) | public void AddAfter(LinkedListNode<T> node, LinkedListNode<T> newNode)
    method AddBefore (line 139) | public LinkedListNode<T> AddBefore(LinkedListNode<T> node, T value)
    method AddBefore (line 151) | public void AddBefore(LinkedListNode<T> node, LinkedListNode<T> newNode)
    method AddFirst (line 161) | public LinkedListNode<T> AddFirst(T value)
    method AddFirst (line 172) | public void AddFirst(LinkedListNode<T> node)
    method AddLast (line 182) | public LinkedListNode<T> AddLast(T value)
    method AddLast (line 193) | public void AddLast(LinkedListNode<T> node)
    method Clear (line 201) | public void Clear()
    method ClearCachedNodes (line 216) | public void ClearCachedNodes()
    method Contains (line 226) | public bool Contains(T value)
    method CopyTo (line 236) | public void CopyTo(T[] array, int index)
    method CopyTo (line 246) | public void CopyTo(Array array, int index)
    method Find (line 256) | public LinkedListNode<T> Find(T value)
    method FindLast (line 266) | public LinkedListNode<T> FindLast(T value)
    method Remove (line 276) | public bool Remove(T value)
    method Remove (line 293) | public void Remove(LinkedListNode<T> node)
    method RemoveFirst (line 302) | public void RemoveFirst()
    method RemoveLast (line 317) | public void RemoveLast()
    method GetEnumerator (line 333) | public Enumerator GetEnumerator()
    method AcquireNode (line 338) | private LinkedListNode<T> AcquireNode(T value)
    method ReleaseNode (line 354) | private void ReleaseNode(LinkedListNode<T> node)
    method Add (line 364) | void ICollection<T>.Add(T value)
    method GetEnumerator (line 373) | IEnumerator<T> IEnumerable<T>.GetEnumerator()
    method GetEnumerator (line 382) | IEnumerator IEnumerable.GetEnumerator()
    type Enumerator (line 390) | [StructLayout(LayoutKind.Auto)]
      method Enumerator (line 395) | internal Enumerator(LinkedList<T> linkedList)
      method Dispose (line 430) | public void Dispose()
      method MoveNext (line 439) | public bool MoveNext()
      method Reset (line 447) | void IEnumerator.Reset()

FILE: GameFramework/Base/GameFrameworkLinkedListRange.cs
  type GameFrameworkLinkedListRange (line 18) | [StructLayout(LayoutKind.Auto)]
    method GameFrameworkLinkedListRange (line 29) | public GameFrameworkLinkedListRange(LinkedListNode<T> first, LinkedLis...
    method Contains (line 100) | public bool Contains(T value)
    method GetEnumerator (line 117) | public Enumerator GetEnumerator()
    method GetEnumerator (line 126) | IEnumerator<T> IEnumerable<T>.GetEnumerator()
    method GetEnumerator (line 135) | IEnumerator IEnumerable.GetEnumerator()
    type Enumerator (line 143) | [StructLayout(LayoutKind.Auto)]
      method Enumerator (line 150) | internal Enumerator(GameFrameworkLinkedListRange<T> range)
      method Dispose (line 187) | public void Dispose()
      method MoveNext (line 195) | public bool MoveNext()
      method Reset (line 210) | void IEnumerator.Reset()

FILE: GameFramework/Base/GameFrameworkModule.cs
  class GameFrameworkModule (line 13) | internal abstract class GameFrameworkModule
    method Update (line 32) | internal abstract void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 37) | internal abstract void Shutdown();

FILE: GameFramework/Base/GameFrameworkMultiDictionary.cs
  class GameFrameworkMultiDictionary (line 19) | public sealed class GameFrameworkMultiDictionary<TKey, TValue> : IEnumer...
    method GameFrameworkMultiDictionary (line 27) | public GameFrameworkMultiDictionary()
    method Clear (line 62) | public void Clear()
    method Contains (line 73) | public bool Contains(TKey key)
    method Contains (line 84) | public bool Contains(TKey key, TValue value)
    method TryGetValue (line 101) | public bool TryGetValue(TKey key, out GameFrameworkLinkedListRange<TVa...
    method Add (line 111) | public void Add(TKey key, TValue value)
    method Remove (line 132) | public bool Remove(TKey key, TValue value)
    method RemoveAll (line 169) | public bool RemoveAll(TKey key)
    method GetEnumerator (line 194) | public Enumerator GetEnumerator()
    method GetEnumerator (line 203) | IEnumerator<KeyValuePair<TKey, GameFrameworkLinkedListRange<TValue>>> ...
    method GetEnumerator (line 212) | IEnumerator IEnumerable.GetEnumerator()
    type Enumerator (line 220) | [StructLayout(LayoutKind.Auto)]
      method Enumerator (line 225) | internal Enumerator(Dictionary<TKey, GameFrameworkLinkedListRange<TV...
      method Dispose (line 260) | public void Dispose()
      method MoveNext (line 269) | public bool MoveNext()
      method Reset (line 277) | void IEnumerator.Reset()

FILE: GameFramework/Base/GameFrameworkSerializer.cs
  class GameFrameworkSerializer (line 17) | public abstract class GameFrameworkSerializer<T>
    method GameFrameworkSerializer (line 27) | public GameFrameworkSerializer()
    method RegisterSerializeCallback (line 64) | public void RegisterSerializeCallback(byte version, SerializeCallback ...
    method RegisterDeserializeCallback (line 83) | public void RegisterDeserializeCallback(byte version, DeserializeCallb...
    method RegisterTryGetValueCallback (line 98) | public void RegisterTryGetValueCallback(byte version, TryGetValueCallb...
    method Serialize (line 114) | public bool Serialize(Stream stream, T data)
    method Serialize (line 131) | public bool Serialize(Stream stream, T data, byte version)
    method Deserialize (line 152) | public T Deserialize(Stream stream)
    method TryGetValue (line 180) | public bool TryGetValue(Stream stream, string key, out object value)
    method GetHeader (line 206) | protected abstract byte[] GetHeader();

FILE: GameFramework/Base/Log/GameFrameworkLog.ILogHelper.cs
  class GameFrameworkLog (line 10) | public static partial class GameFrameworkLog
    type ILogHelper (line 15) | public interface ILogHelper
      method Log (line 22) | void Log(GameFrameworkLogLevel level, object message);

FILE: GameFramework/Base/Log/GameFrameworkLog.cs
  class GameFrameworkLog (line 13) | public static partial class GameFrameworkLog
    method SetLogHelper (line 21) | public static void SetLogHelper(ILogHelper logHelper)
    method Debug (line 30) | public static void Debug(object message)
    method Debug (line 44) | public static void Debug(string message)
    method Debug (line 60) | public static void Debug<T>(string format, T arg)
    method Debug (line 78) | public static void Debug<T1, T2>(string format, T1 arg1, T2 arg2)
    method Debug (line 98) | public static void Debug<T1, T2, T3>(string format, T1 arg1, T2 arg2, ...
    method Debug (line 120) | public static void Debug<T1, T2, T3, T4>(string format, T1 arg1, T2 ar...
    method Debug (line 144) | public static void Debug<T1, T2, T3, T4, T5>(string format, T1 arg1, T...
    method Debug (line 170) | public static void Debug<T1, T2, T3, T4, T5, T6>(string format, T1 arg...
    method Debug (line 198) | public static void Debug<T1, T2, T3, T4, T5, T6, T7>(string format, T1...
    method Debug (line 228) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8>(string format...
    method Debug (line 260) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string fo...
    method Debug (line 294) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(stri...
    method Debug (line 330) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>...
    method Debug (line 368) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Debug (line 408) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Debug (line 450) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Debug (line 494) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Debug (line 540) | public static void Debug<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Info (line 554) | public static void Info(object message)
    method Info (line 568) | public static void Info(string message)
    method Info (line 584) | public static void Info<T>(string format, T arg)
    method Info (line 602) | public static void Info<T1, T2>(string format, T1 arg1, T2 arg2)
    method Info (line 622) | public static void Info<T1, T2, T3>(string format, T1 arg1, T2 arg2, T...
    method Info (line 644) | public static void Info<T1, T2, T3, T4>(string format, T1 arg1, T2 arg...
    method Info (line 668) | public static void Info<T1, T2, T3, T4, T5>(string format, T1 arg1, T2...
    method Info (line 694) | public static void Info<T1, T2, T3, T4, T5, T6>(string format, T1 arg1...
    method Info (line 722) | public static void Info<T1, T2, T3, T4, T5, T6, T7>(string format, T1 ...
    method Info (line 752) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8>(string format,...
    method Info (line 784) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string for...
    method Info (line 818) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(strin...
    method Info (line 854) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(...
    method Info (line 892) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method Info (line 932) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method Info (line 974) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method Info (line 1018) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method Info (line 1064) | public static void Info<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method Warning (line 1078) | public static void Warning(object message)
    method Warning (line 1092) | public static void Warning(string message)
    method Warning (line 1108) | public static void Warning<T>(string format, T arg)
    method Warning (line 1126) | public static void Warning<T1, T2>(string format, T1 arg1, T2 arg2)
    method Warning (line 1146) | public static void Warning<T1, T2, T3>(string format, T1 arg1, T2 arg2...
    method Warning (line 1168) | public static void Warning<T1, T2, T3, T4>(string format, T1 arg1, T2 ...
    method Warning (line 1192) | public static void Warning<T1, T2, T3, T4, T5>(string format, T1 arg1,...
    method Warning (line 1218) | public static void Warning<T1, T2, T3, T4, T5, T6>(string format, T1 a...
    method Warning (line 1246) | public static void Warning<T1, T2, T3, T4, T5, T6, T7>(string format, ...
    method Warning (line 1276) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8>(string form...
    method Warning (line 1308) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string ...
    method Warning (line 1342) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(st...
    method Warning (line 1378) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method Warning (line 1416) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method Warning (line 1456) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method Warning (line 1498) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method Warning (line 1542) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method Warning (line 1588) | public static void Warning<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method Error (line 1602) | public static void Error(object message)
    method Error (line 1616) | public static void Error(string message)
    method Error (line 1632) | public static void Error<T>(string format, T arg)
    method Error (line 1650) | public static void Error<T1, T2>(string format, T1 arg1, T2 arg2)
    method Error (line 1670) | public static void Error<T1, T2, T3>(string format, T1 arg1, T2 arg2, ...
    method Error (line 1692) | public static void Error<T1, T2, T3, T4>(string format, T1 arg1, T2 ar...
    method Error (line 1716) | public static void Error<T1, T2, T3, T4, T5>(string format, T1 arg1, T...
    method Error (line 1742) | public static void Error<T1, T2, T3, T4, T5, T6>(string format, T1 arg...
    method Error (line 1770) | public static void Error<T1, T2, T3, T4, T5, T6, T7>(string format, T1...
    method Error (line 1800) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8>(string format...
    method Error (line 1832) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string fo...
    method Error (line 1866) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(stri...
    method Error (line 1902) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>...
    method Error (line 1940) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Error (line 1980) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Error (line 2022) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Error (line 2066) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Error (line 2112) | public static void Error<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Fatal (line 2126) | public static void Fatal(object message)
    method Fatal (line 2140) | public static void Fatal(string message)
    method Fatal (line 2156) | public static void Fatal<T>(string format, T arg)
    method Fatal (line 2174) | public static void Fatal<T1, T2>(string format, T1 arg1, T2 arg2)
    method Fatal (line 2194) | public static void Fatal<T1, T2, T3>(string format, T1 arg1, T2 arg2, ...
    method Fatal (line 2216) | public static void Fatal<T1, T2, T3, T4>(string format, T1 arg1, T2 ar...
    method Fatal (line 2240) | public static void Fatal<T1, T2, T3, T4, T5>(string format, T1 arg1, T...
    method Fatal (line 2266) | public static void Fatal<T1, T2, T3, T4, T5, T6>(string format, T1 arg...
    method Fatal (line 2294) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7>(string format, T1...
    method Fatal (line 2324) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8>(string format...
    method Fatal (line 2356) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string fo...
    method Fatal (line 2390) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(stri...
    method Fatal (line 2426) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>...
    method Fatal (line 2464) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Fatal (line 2504) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Fatal (line 2546) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Fatal (line 2590) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...
    method Fatal (line 2636) | public static void Fatal<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,...

FILE: GameFramework/Base/Log/GameFrameworkLogLevel.cs
  type GameFrameworkLogLevel (line 13) | public enum GameFrameworkLogLevel : byte

FILE: GameFramework/Base/ReferencePool/IReference.cs
  type IReference (line 13) | public interface IReference
    method Clear (line 18) | void Clear();

FILE: GameFramework/Base/ReferencePool/ReferencePool.ReferenceCollection.cs
  class ReferencePool (line 13) | public static partial class ReferencePool
    class ReferenceCollection (line 15) | private sealed class ReferenceCollection
      method ReferenceCollection (line 25) | public ReferenceCollection(Type referenceType)
      method Acquire (line 92) | public T Acquire<T>() where T : class, IReference, new()
      method Acquire (line 113) | public IReference Acquire()
      method Release (line 129) | public void Release(IReference reference)
      method Add (line 146) | public void Add<T>(int count) where T : class, IReference, new()
      method Add (line 163) | public void Add(int count)
      method Remove (line 175) | public void Remove(int count)
      method RemoveAll (line 192) | public void RemoveAll()

FILE: GameFramework/Base/ReferencePool/ReferencePool.cs
  class ReferencePool (line 16) | public static partial class ReferencePool
    method GetAllReferencePoolInfos (line 51) | public static ReferencePoolInfo[] GetAllReferencePoolInfos()
    method ClearAll (line 71) | public static void ClearAll()
    method Acquire (line 89) | public static T Acquire<T>() where T : class, IReference, new()
    method Acquire (line 99) | public static IReference Acquire(Type referenceType)
    method Release (line 109) | public static void Release(IReference reference)
    method Add (line 126) | public static void Add<T>(int count) where T : class, IReference, new()
    method Add (line 136) | public static void Add(Type referenceType, int count)
    method Remove (line 147) | public static void Remove<T>(int count) where T : class, IReference
    method Remove (line 157) | public static void Remove(Type referenceType, int count)
    method RemoveAll (line 167) | public static void RemoveAll<T>() where T : class, IReference
    method RemoveAll (line 176) | public static void RemoveAll(Type referenceType)
    method InternalCheckReferenceType (line 182) | private static void InternalCheckReferenceType(Type referenceType)
    method GetReferenceCollection (line 205) | private static ReferenceCollection GetReferenceCollection(Type referen...

FILE: GameFramework/Base/ReferencePool/ReferencePoolInfo.cs
  type ReferencePoolInfo (line 16) | [StructLayout(LayoutKind.Auto)]
    method ReferencePoolInfo (line 37) | public ReferencePoolInfo(Type type, int unusedReferenceCount, int usin...

FILE: GameFramework/Base/TaskPool/ITaskAgent.cs
  type ITaskAgent (line 14) | internal interface ITaskAgent<T> where T : TaskBase
    method Initialize (line 27) | void Initialize();
    method Update (line 34) | void Update(float elapseSeconds, float realElapseSeconds);
    method Shutdown (line 39) | void Shutdown();
    method Start (line 46) | StartTaskStatus Start(T task);
    method Reset (line 51) | void Reset();

FILE: GameFramework/Base/TaskPool/StartTaskStatus.cs
  type StartTaskStatus (line 13) | public enum StartTaskStatus : byte

FILE: GameFramework/Base/TaskPool/TaskBase.cs
  class TaskBase (line 13) | internal abstract class TaskBase : IReference
    method TaskBase (line 30) | public TaskBase()
    method Initialize (line 116) | internal void Initialize(int serialId, string tag, int priority, objec...
    method Clear (line 128) | public virtual void Clear()

FILE: GameFramework/Base/TaskPool/TaskInfo.cs
  type TaskInfo (line 15) | [StructLayout(LayoutKind.Auto)]
    method TaskInfo (line 35) | public TaskInfo(int serialId, string tag, int priority, object userDat...

FILE: GameFramework/Base/TaskPool/TaskPool.cs
  class TaskPool (line 16) | internal sealed class TaskPool<T> where T : TaskBase
    method TaskPool (line 26) | public TaskPool()
    method Update (line 98) | public void Update(float elapseSeconds, float realElapseSeconds)
    method Shutdown (line 112) | public void Shutdown()
    method AddAgent (line 126) | public void AddAgent(ITaskAgent<T> agent)
    method GetTaskInfo (line 142) | public TaskInfo GetTaskInfo(int serialId)
    method GetTaskInfos (line 169) | public TaskInfo[] GetTaskInfos(string tag)
    method GetTaskInfos (line 181) | public void GetTaskInfos(string tag, List<TaskInfo> results)
    method GetAllTaskInfos (line 211) | public TaskInfo[] GetAllTaskInfos()
    method GetAllTaskInfos (line 233) | public void GetAllTaskInfos(List<TaskInfo> results)
    method AddTask (line 257) | public void AddTask(T task)
    method RemoveTask (line 285) | public bool RemoveTask(int serialId)
    method RemoveTasks (line 323) | public int RemoveTasks(string tag)
    method RemoveAllTasks (line 367) | public int RemoveAllTasks()
    method ProcessRunningTasks (line 391) | private void ProcessRunningTasks(float elapseSeconds, float realElapse...
    method ProcessWaitingTasks (line 413) | private void ProcessWaitingTasks(float elapseSeconds, float realElapse...

FILE: GameFramework/Base/TaskPool/TaskStatus.cs
  type TaskStatus (line 13) | public enum TaskStatus : byte

FILE: GameFramework/Base/Variable/GenericVariable.cs
  class Variable (line 16) | public abstract class Variable<T> : Variable
    method Variable (line 23) | public Variable()
    method GetValue (line 58) | public override object GetValue()
    method SetValue (line 67) | public override void SetValue(object value)
    method Clear (line 75) | public override void Clear()
    method ToString (line 84) | public override string ToString()

FILE: GameFramework/Base/Variable/Variable.cs
  class Variable (line 15) | public abstract class Variable : IReference
    method Variable (line 20) | public Variable()
    method GetValue (line 36) | public abstract object GetValue();
    method SetValue (line 42) | public abstract void SetValue(object value);
    method Clear (line 47) | public abstract void Clear();

FILE: GameFramework/Base/Version/Version.IVersionHelper.cs
  class Version (line 10) | public static partial class Version
    type IVersionHelper (line 15) | public interface IVersionHelper

FILE: GameFramework/Base/Version/Version.cs
  class Version (line 13) | public static partial class Version
    method SetVersionHelper (line 66) | public static void SetVersionHelper(IVersionHelper versionHelper)

FILE: GameFramework/Config/ConfigManager.ConfigData.cs
  class ConfigManager (line 12) | internal sealed partial class ConfigManager : GameFrameworkModule, IConf...
    type ConfigData (line 14) | [StructLayout(LayoutKind.Auto)]
      method ConfigData (line 22) | public ConfigData(bool boolValue, int intValue, float floatValue, st...

FILE: GameFramework/Config/ConfigManager.cs
  class ConfigManager (line 17) | internal sealed partial class ConfigManager : GameFrameworkModule, IConf...
    method ConfigManager (line 26) | public ConfigManager()
    method Update (line 120) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 127) | internal override void Shutdown()
    method SetResourceManager (line 135) | public void SetResourceManager(IResourceManager resourceManager)
    method SetDataProviderHelper (line 144) | public void SetDataProviderHelper(IDataProviderHelper<IConfigManager> ...
    method SetConfigHelper (line 153) | public void SetConfigHelper(IConfigHelper configHelper)
    method EnsureCachedBytesSize (line 167) | public void EnsureCachedBytesSize(int ensureSize)
    method FreeCachedBytes (line 175) | public void FreeCachedBytes()
    method ReadData (line 184) | public void ReadData(string configAssetName)
    method ReadData (line 194) | public void ReadData(string configAssetName, int priority)
    method ReadData (line 204) | public void ReadData(string configAssetName, object userData)
    method ReadData (line 215) | public void ReadData(string configAssetName, int priority, object user...
    method ParseData (line 225) | public bool ParseData(string configString)
    method ParseData (line 236) | public bool ParseData(string configString, object userData)
    method ParseData (line 246) | public bool ParseData(byte[] configBytes)
    method ParseData (line 257) | public bool ParseData(byte[] configBytes, object userData)
    method ParseData (line 269) | public bool ParseData(byte[] configBytes, int startIndex, int length)
    method ParseData (line 282) | public bool ParseData(byte[] configBytes, int startIndex, int length, ...
    method HasConfig (line 292) | public bool HasConfig(string configName)
    method GetBool (line 302) | public bool GetBool(string configName)
    method GetBool (line 319) | public bool GetBool(string configName, bool defaultValue)
    method GetInt (line 330) | public int GetInt(string configName)
    method GetInt (line 347) | public int GetInt(string configName, int defaultValue)
    method GetFloat (line 358) | public float GetFloat(string configName)
    method GetFloat (line 375) | public float GetFloat(string configName, float defaultValue)
    method GetString (line 386) | public string GetString(string configName)
    method GetString (line 403) | public string GetString(string configName, string defaultValue)
    method AddConfig (line 415) | public bool AddConfig(string configName, string configValue)
    method AddConfig (line 438) | public bool AddConfig(string configName, bool boolValue, int intValue,...
    method RemoveConfig (line 453) | public bool RemoveConfig(string configName)
    method RemoveAllConfigs (line 466) | public void RemoveAllConfigs()
    method GetConfigData (line 471) | private ConfigData? GetConfigData(string configName)

FILE: GameFramework/Config/IConfigHelper.cs
  type IConfigHelper (line 13) | public interface IConfigHelper

FILE: GameFramework/Config/IConfigManager.cs
  type IConfigManager (line 15) | public interface IConfigManager : IDataProvider<IConfigManager>
    method SetResourceManager (line 37) | void SetResourceManager(IResourceManager resourceManager);
    method SetDataProviderHelper (line 43) | void SetDataProviderHelper(IDataProviderHelper<IConfigManager> dataPro...
    method SetConfigHelper (line 49) | void SetConfigHelper(IConfigHelper configHelper);
    method EnsureCachedBytesSize (line 55) | void EnsureCachedBytesSize(int ensureSize);
    method FreeCachedBytes (line 60) | void FreeCachedBytes();
    method HasConfig (line 67) | bool HasConfig(string configName);
    method GetBool (line 74) | bool GetBool(string configName);
    method GetBool (line 82) | bool GetBool(string configName, bool defaultValue);
    method GetInt (line 89) | int GetInt(string configName);
    method GetInt (line 97) | int GetInt(string configName, int defaultValue);
    method GetFloat (line 104) | float GetFloat(string configName);
    method GetFloat (line 112) | float GetFloat(string configName, float defaultValue);
    method GetString (line 119) | string GetString(string configName);
    method GetString (line 127) | string GetString(string configName, string defaultValue);
    method AddConfig (line 135) | bool AddConfig(string configName, string configValue);
    method AddConfig (line 146) | bool AddConfig(string configName, bool boolValue, int intValue, float ...
    method RemoveConfig (line 153) | bool RemoveConfig(string configName);
    method RemoveAllConfigs (line 158) | void RemoveAllConfigs();

FILE: GameFramework/DataNode/DataNodeManager.DataNode.cs
  class DataNodeManager (line 12) | internal sealed partial class DataNodeManager : GameFrameworkModule, IDa...
    class DataNode (line 17) | private sealed class DataNode : IDataNode, IReference
      method DataNode (line 26) | public DataNode()
      method Create (line 40) | public static DataNode Create(string name, DataNode parent)
      method GetData (line 102) | public T GetData<T>() where T : Variable
      method GetData (line 111) | public Variable GetData()
      method SetData (line 121) | public void SetData<T>(T data) where T : Variable
      method SetData (line 130) | public void SetData(Variable data)
      method HasChild (line 145) | public bool HasChild(int index)
      method HasChild (line 155) | public bool HasChild(string name)
      method GetChild (line 183) | public IDataNode GetChild(int index)
      method GetChild (line 193) | public IDataNode GetChild(string name)
      method GetOrAddChild (line 221) | public IDataNode GetOrAddChild(string name)
      method GetAllChild (line 245) | public IDataNode[] GetAllChild()
      method GetAllChild (line 259) | public void GetAllChild(List<IDataNode> results)
      method RemoveChild (line 282) | public void RemoveChild(int index)
      method RemoveChild (line 298) | public void RemoveChild(string name)
      method Clear (line 310) | public void Clear()
      method ToString (line 333) | public override string ToString()
      method ToDataString (line 342) | public string ToDataString()
      method IsValidName (line 357) | private static bool IsValidName(string name)
      method Clear (line 375) | void IReference.Clear()

FILE: GameFramework/DataNode/DataNodeManager.cs
  class DataNodeManager (line 15) | internal sealed partial class DataNodeManager : GameFrameworkModule, IDa...
    method DataNodeManager (line 26) | public DataNodeManager()
    method Update (line 47) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 54) | internal override void Shutdown()
    method GetData (line 66) | public T GetData<T>(string path) where T : Variable
    method GetData (line 76) | public Variable GetData(string path)
    method GetData (line 88) | public T GetData<T>(string path, IDataNode node) where T : Variable
    method GetData (line 105) | public Variable GetData(string path, IDataNode node)
    method SetData (line 122) | public void SetData<T>(string path, T data) where T : Variable
    method SetData (line 132) | public void SetData(string path, Variable data)
    method SetData (line 144) | public void SetData<T>(string path, T data, IDataNode node) where T : ...
    method SetData (line 156) | public void SetData(string path, Variable data, IDataNode node)
    method GetNode (line 167) | public IDataNode GetNode(string path)
    method GetNode (line 178) | public IDataNode GetNode(string path, IDataNode node)
    method GetOrAddNode (line 199) | public IDataNode GetOrAddNode(string path)
    method GetOrAddNode (line 210) | public IDataNode GetOrAddNode(string path, IDataNode node)
    method RemoveNode (line 226) | public void RemoveNode(string path)
    method RemoveNode (line 236) | public void RemoveNode(string path, IDataNode node)
    method Clear (line 260) | public void Clear()
    method GetSplitedPath (line 270) | private static string[] GetSplitedPath(string path)

FILE: GameFramework/DataNode/IDataNode.cs
  type IDataNode (line 15) | public interface IDataNode
    method GetData (line 54) | T GetData<T>() where T : Variable;
    method GetData (line 60) | Variable GetData();
    method SetData (line 67) | void SetData<T>(T data) where T : Variable;
    method SetData (line 73) | void SetData(Variable data);
    method HasChild (line 80) | bool HasChild(int index);
    method HasChild (line 87) | bool HasChild(string name);
    method GetChild (line 94) | IDataNode GetChild(int index);
    method GetChild (line 101) | IDataNode GetChild(string name);
    method GetOrAddChild (line 108) | IDataNode GetOrAddChild(string name);
    method GetAllChild (line 114) | IDataNode[] GetAllChild();
    method GetAllChild (line 120) | void GetAllChild(List<IDataNode> results);
    method RemoveChild (line 126) | void RemoveChild(int index);
    method RemoveChild (line 132) | void RemoveChild(string name);
    method Clear (line 137) | void Clear();
    method ToString (line 143) | string ToString();
    method ToDataString (line 149) | string ToDataString();

FILE: GameFramework/DataNode/IDataNodeManager.cs
  type IDataNodeManager (line 13) | public interface IDataNodeManager
    method GetData (line 29) | T GetData<T>(string path) where T : Variable;
    method GetData (line 36) | Variable GetData(string path);
    method GetData (line 45) | T GetData<T>(string path, IDataNode node) where T : Variable;
    method GetData (line 53) | Variable GetData(string path, IDataNode node);
    method SetData (line 61) | void SetData<T>(string path, T data) where T : Variable;
    method SetData (line 68) | void SetData(string path, Variable data);
    method SetData (line 77) | void SetData<T>(string path, T data, IDataNode node) where T : Variable;
    method SetData (line 85) | void SetData(string path, Variable data, IDataNode node);
    method GetNode (line 92) | IDataNode GetNode(string path);
    method GetNode (line 100) | IDataNode GetNode(string path, IDataNode node);
    method GetOrAddNode (line 107) | IDataNode GetOrAddNode(string path);
    method GetOrAddNode (line 115) | IDataNode GetOrAddNode(string path, IDataNode node);
    method RemoveNode (line 121) | void RemoveNode(string path);
    method RemoveNode (line 128) | void RemoveNode(string path, IDataNode node);
    method Clear (line 133) | void Clear();

FILE: GameFramework/DataTable/DataTableBase.cs
  class DataTableBase (line 16) | public abstract class DataTableBase : IDataProvider<DataTableBase>
    method DataTableBase (line 24) | public DataTableBase()
    method DataTableBase (line 33) | public DataTableBase(string name)
    method ReadData (line 141) | public void ReadData(string dataTableAssetName)
    method ReadData (line 151) | public void ReadData(string dataTableAssetName, int priority)
    method ReadData (line 161) | public void ReadData(string dataTableAssetName, object userData)
    method ReadData (line 172) | public void ReadData(string dataTableAssetName, int priority, object u...
    method ParseData (line 182) | public bool ParseData(string dataTableString)
    method ParseData (line 193) | public bool ParseData(string dataTableString, object userData)
    method ParseData (line 203) | public bool ParseData(byte[] dataTableBytes)
    method ParseData (line 214) | public bool ParseData(byte[] dataTableBytes, object userData)
    method ParseData (line 226) | public bool ParseData(byte[] dataTableBytes, int startIndex, int length)
    method ParseData (line 239) | public bool ParseData(byte[] dataTableBytes, int startIndex, int lengt...
    method HasDataRow (line 249) | public abstract bool HasDataRow(int id);
    method AddDataRow (line 257) | public abstract bool AddDataRow(string dataRowString, object userData);
    method AddDataRow (line 267) | public abstract bool AddDataRow(byte[] dataRowBytes, int startIndex, i...
    method RemoveDataRow (line 274) | public abstract bool RemoveDataRow(int id);
    method RemoveAllDataRows (line 279) | public abstract void RemoveAllDataRows();
    method SetResourceManager (line 285) | internal void SetResourceManager(IResourceManager resourceManager)
    method SetDataProviderHelper (line 294) | internal void SetDataProviderHelper(IDataProviderHelper<DataTableBase>...
    method Shutdown (line 302) | internal abstract void Shutdown();

FILE: GameFramework/DataTable/DataTableManager.DataTable.cs
  class DataTableManager (line 14) | internal sealed partial class DataTableManager : GameFrameworkModule, ID...
    class DataTable (line 20) | private sealed class DataTable<T> : DataTableBase, IDataTable<T> where...
      method DataTable (line 30) | public DataTable(string name)
      method HasDataRow (line 100) | public override bool HasDataRow(int id)
      method HasDataRow (line 110) | public bool HasDataRow(Predicate<T> condition)
      method GetDataRow (line 133) | public T GetDataRow(int id)
      method GetDataRow (line 150) | public T GetDataRow(Predicate<T> condition)
      method GetDataRows (line 173) | public T[] GetDataRows(Predicate<T> condition)
      method GetDataRows (line 197) | public void GetDataRows(Predicate<T> condition, List<T> results)
      method GetDataRows (line 224) | public T[] GetDataRows(Comparison<T> comparison)
      method GetDataRows (line 246) | public void GetDataRows(Comparison<T> comparison, List<T> results)
      method GetDataRows (line 273) | public T[] GetDataRows(Predicate<T> condition, Comparison<T> compari...
      method GetDataRows (line 304) | public void GetDataRows(Predicate<T> condition, Comparison<T> compar...
      method GetAllDataRows (line 337) | public T[] GetAllDataRows()
      method GetAllDataRows (line 353) | public void GetAllDataRows(List<T> results)
      method AddDataRow (line 373) | public override bool AddDataRow(string dataRowString, object userData)
      method AddDataRow (line 405) | public override bool AddDataRow(byte[] dataRowBytes, int startIndex,...
      method RemoveDataRow (line 434) | public override bool RemoveDataRow(int id)
      method RemoveAllDataRows (line 470) | public override void RemoveAllDataRows()
      method GetEnumerator (line 481) | public IEnumerator<T> GetEnumerator()
      method GetEnumerator (line 490) | IEnumerator IEnumerable.GetEnumerator()
      method Shutdown (line 498) | internal override void Shutdown()
      method InternalAddDataRow (line 503) | private void InternalAddDataRow(T dataRow)

FILE: GameFramework/DataTable/DataTableManager.cs
  class DataTableManager (line 17) | internal sealed partial class DataTableManager : GameFrameworkModule, ID...
    method DataTableManager (line 27) | public DataTableManager()
    method Update (line 62) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 69) | internal override void Shutdown()
    method SetResourceManager (line 83) | public void SetResourceManager(IResourceManager resourceManager)
    method SetDataProviderHelper (line 97) | public void SetDataProviderHelper(IDataProviderHelper<DataTableBase> d...
    method SetDataTableHelper (line 111) | public void SetDataTableHelper(IDataTableHelper dataTableHelper)
    method EnsureCachedBytesSize (line 125) | public void EnsureCachedBytesSize(int ensureSize)
    method FreeCachedBytes (line 133) | public void FreeCachedBytes()
    method HasDataTable (line 143) | public bool HasDataTable<T>() where T : IDataRow
    method HasDataTable (line 153) | public bool HasDataTable(Type dataRowType)
    method HasDataTable (line 174) | public bool HasDataTable<T>(string name) where T : IDataRow
    method HasDataTable (line 185) | public bool HasDataTable(Type dataRowType, string name)
    method GetDataTable (line 205) | public IDataTable<T> GetDataTable<T>() where T : IDataRow
    method GetDataTable (line 215) | public DataTableBase GetDataTable(Type dataRowType)
    method GetDataTable (line 236) | public IDataTable<T> GetDataTable<T>(string name) where T : IDataRow
    method GetDataTable (line 247) | public DataTableBase GetDataTable(Type dataRowType, string name)
    method GetAllDataTables (line 266) | public DataTableBase[] GetAllDataTables()
    method GetAllDataTables (line 282) | public void GetAllDataTables(List<DataTableBase> results)
    method CreateDataTable (line 301) | public IDataTable<T> CreateDataTable<T>() where T : class, IDataRow, n...
    method CreateDataTable (line 311) | public DataTableBase CreateDataTable(Type dataRowType)
    method CreateDataTable (line 322) | public IDataTable<T> CreateDataTable<T>(string name) where T : class, ...
    method CreateDataTable (line 353) | public DataTableBase CreateDataTable(Type dataRowType, string name)
    method DestroyDataTable (line 393) | public bool DestroyDataTable<T>() where T : IDataRow
    method DestroyDataTable (line 403) | public bool DestroyDataTable(Type dataRowType)
    method DestroyDataTable (line 423) | public bool DestroyDataTable<T>(string name) where T : IDataRow
    method DestroyDataTable (line 434) | public bool DestroyDataTable(Type dataRowType, string name)
    method DestroyDataTable (line 455) | public bool DestroyDataTable<T>(IDataTable<T> dataTable) where T : IDa...
    method DestroyDataTable (line 470) | public bool DestroyDataTable(DataTableBase dataTable)
    method InternalHasDataTable (line 480) | private bool InternalHasDataTable(TypeNamePair typeNamePair)
    method InternalGetDataTable (line 485) | private DataTableBase InternalGetDataTable(TypeNamePair typeNamePair)
    method InternalDestroyDataTable (line 496) | private bool InternalDestroyDataTable(TypeNamePair typeNamePair)

FILE: GameFramework/DataTable/IDataRow.cs
  type IDataRow (line 13) | public interface IDataRow
    method ParseDataRow (line 29) | bool ParseDataRow(string dataRowString, object userData);
    method ParseDataRow (line 39) | bool ParseDataRow(byte[] dataRowBytes, int startIndex, int length, obj...

FILE: GameFramework/DataTable/IDataTable.cs
  type IDataTable (line 17) | public interface IDataTable<T> : IEnumerable<T> where T : IDataRow
    method HasDataRow (line 82) | bool HasDataRow(int id);
    method HasDataRow (line 89) | bool HasDataRow(Predicate<T> condition);
    method GetDataRow (line 96) | T GetDataRow(int id);
    method GetDataRow (line 104) | T GetDataRow(Predicate<T> condition);
    method GetDataRows (line 111) | T[] GetDataRows(Predicate<T> condition);
    method GetDataRows (line 118) | void GetDataRows(Predicate<T> condition, List<T> results);
    method GetDataRows (line 125) | T[] GetDataRows(Comparison<T> comparison);
    method GetDataRows (line 132) | void GetDataRows(Comparison<T> comparison, List<T> results);
    method GetDataRows (line 140) | T[] GetDataRows(Predicate<T> condition, Comparison<T> comparison);
    method GetDataRows (line 148) | void GetDataRows(Predicate<T> condition, Comparison<T> comparison, Lis...
    method GetAllDataRows (line 154) | T[] GetAllDataRows();
    method GetAllDataRows (line 160) | void GetAllDataRows(List<T> results);
    method AddDataRow (line 168) | bool AddDataRow(string dataRowString, object userData);
    method AddDataRow (line 178) | bool AddDataRow(byte[] dataRowBytes, int startIndex, int length, objec...
    method RemoveDataRow (line 185) | bool RemoveDataRow(int id);
    method RemoveAllDataRows (line 190) | void RemoveAllDataRows();

FILE: GameFramework/DataTable/IDataTableHelper.cs
  type IDataTableHelper (line 13) | public interface IDataTableHelper

FILE: GameFramework/DataTable/IDataTableManager.cs
  type IDataTableManager (line 17) | public interface IDataTableManager
    method SetResourceManager (line 39) | void SetResourceManager(IResourceManager resourceManager);
    method SetDataProviderHelper (line 45) | void SetDataProviderHelper(IDataProviderHelper<DataTableBase> dataProv...
    method SetDataTableHelper (line 51) | void SetDataTableHelper(IDataTableHelper dataTableHelper);
    method EnsureCachedBytesSize (line 57) | void EnsureCachedBytesSize(int ensureSize);
    method FreeCachedBytes (line 62) | void FreeCachedBytes();
    method HasDataTable (line 69) | bool HasDataTable<T>() where T : IDataRow;
    method HasDataTable (line 76) | bool HasDataTable(Type dataRowType);
    method HasDataTable (line 84) | bool HasDataTable<T>(string name) where T : IDataRow;
    method HasDataTable (line 92) | bool HasDataTable(Type dataRowType, string name);
    method GetDataTable (line 99) | IDataTable<T> GetDataTable<T>() where T : IDataRow;
    method GetDataTable (line 106) | DataTableBase GetDataTable(Type dataRowType);
    method GetDataTable (line 114) | IDataTable<T> GetDataTable<T>(string name) where T : IDataRow;
    method GetDataTable (line 122) | DataTableBase GetDataTable(Type dataRowType, string name);
    method GetAllDataTables (line 128) | DataTableBase[] GetAllDataTables();
    method GetAllDataTables (line 134) | void GetAllDataTables(List<DataTableBase> results);
    method CreateDataTable (line 141) | IDataTable<T> CreateDataTable<T>() where T : class, IDataRow, new();
    method CreateDataTable (line 148) | DataTableBase CreateDataTable(Type dataRowType);
    method CreateDataTable (line 156) | IDataTable<T> CreateDataTable<T>(string name) where T : class, IDataRo...
    method CreateDataTable (line 164) | DataTableBase CreateDataTable(Type dataRowType, string name);
    method DestroyDataTable (line 171) | bool DestroyDataTable<T>() where T : IDataRow;
    method DestroyDataTable (line 178) | bool DestroyDataTable(Type dataRowType);
    method DestroyDataTable (line 186) | bool DestroyDataTable<T>(string name) where T : IDataRow;
    method DestroyDataTable (line 194) | bool DestroyDataTable(Type dataRowType, string name);
    method DestroyDataTable (line 202) | bool DestroyDataTable<T>(IDataTable<T> dataTable) where T : IDataRow;
    method DestroyDataTable (line 209) | bool DestroyDataTable(DataTableBase dataTable);

FILE: GameFramework/Debugger/DebuggerManager.DebuggerWindowGroup.cs
  class DebuggerManager (line 12) | internal sealed partial class DebuggerManager : GameFrameworkModule, IDe...
    class DebuggerWindowGroup (line 17) | private sealed class DebuggerWindowGroup : IDebuggerWindowGroup
      method DebuggerWindowGroup (line 23) | public DebuggerWindowGroup()
      method Initialize (line 76) | public void Initialize(params object[] args)
      method Shutdown (line 83) | public void Shutdown()
      method OnEnter (line 96) | public void OnEnter()
      method OnLeave (line 104) | public void OnLeave()
      method OnUpdate (line 114) | public void OnUpdate(float elapseSeconds, float realElapseSeconds)
      method OnDraw (line 122) | public void OnDraw()
      method RefreshDebuggerWindowNames (line 126) | private void RefreshDebuggerWindowNames()
      method GetDebuggerWindowNames (line 139) | public string[] GetDebuggerWindowNames()
      method GetDebuggerWindow (line 149) | public IDebuggerWindow GetDebuggerWindow(string path)
      method SelectDebuggerWindow (line 178) | public bool SelectDebuggerWindow(string path)
      method RegisterDebuggerWindow (line 207) | public void RegisterDebuggerWindow(string path, IDebuggerWindow debu...
      method UnregisterDebuggerWindow (line 251) | public bool UnregisterDebuggerWindow(string path)
      method InternalGetDebuggerWindow (line 279) | private IDebuggerWindow InternalGetDebuggerWindow(string name)
      method InternalSelectDebuggerWindow (line 292) | private bool InternalSelectDebuggerWindow(string name)

FILE: GameFramework/Debugger/DebuggerManager.cs
  class DebuggerManager (line 13) | internal sealed partial class DebuggerManager : GameFrameworkModule, IDe...
    method DebuggerManager (line 21) | public DebuggerManager()
    method Update (line 70) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 83) | internal override void Shutdown()
    method RegisterDebuggerWindow (line 95) | public void RegisterDebuggerWindow(string path, IDebuggerWindow debugg...
    method UnregisterDebuggerWindow (line 116) | public bool UnregisterDebuggerWindow(string path)
    method GetDebuggerWindow (line 126) | public IDebuggerWindow GetDebuggerWindow(string path)
    method SelectDebuggerWindow (line 136) | public bool SelectDebuggerWindow(string path)

FILE: GameFramework/Debugger/IDebuggerManager.cs
  type IDebuggerManager (line 13) | public interface IDebuggerManager
    method RegisterDebuggerWindow (line 38) | void RegisterDebuggerWindow(string path, IDebuggerWindow debuggerWindo...
    method UnregisterDebuggerWindow (line 45) | bool UnregisterDebuggerWindow(string path);
    method GetDebuggerWindow (line 52) | IDebuggerWindow GetDebuggerWindow(string path);
    method SelectDebuggerWindow (line 59) | bool SelectDebuggerWindow(string path);

FILE: GameFramework/Debugger/IDebuggerWindow.cs
  type IDebuggerWindow (line 13) | public interface IDebuggerWindow
    method Initialize (line 19) | void Initialize(params object[] args);
    method Shutdown (line 24) | void Shutdown();
    method OnEnter (line 29) | void OnEnter();
    method OnLeave (line 34) | void OnLeave();
    method OnUpdate (line 41) | void OnUpdate(float elapseSeconds, float realElapseSeconds);
    method OnDraw (line 46) | void OnDraw();

FILE: GameFramework/Debugger/IDebuggerWindowGroup.cs
  type IDebuggerWindowGroup (line 13) | public interface IDebuggerWindowGroup : IDebuggerWindow
    method GetDebuggerWindowNames (line 43) | string[] GetDebuggerWindowNames();
    method GetDebuggerWindow (line 50) | IDebuggerWindow GetDebuggerWindow(string path);
    method RegisterDebuggerWindow (line 57) | void RegisterDebuggerWindow(string path, IDebuggerWindow debuggerWindow);

FILE: GameFramework/Download/Constant.cs
  class Constant (line 13) | internal static class Constant

FILE: GameFramework/Download/DownloadAgentHelperCompleteEventArgs.cs
  class DownloadAgentHelperCompleteEventArgs (line 13) | public sealed class DownloadAgentHelperCompleteEventArgs : GameFramework...
    method DownloadAgentHelperCompleteEventArgs (line 18) | public DownloadAgentHelperCompleteEventArgs()
    method Create (line 37) | public static DownloadAgentHelperCompleteEventArgs Create(long length)
    method Clear (line 52) | public override void Clear()

FILE: GameFramework/Download/DownloadAgentHelperErrorEventArgs.cs
  class DownloadAgentHelperErrorEventArgs (line 13) | public sealed class DownloadAgentHelperErrorEventArgs : GameFrameworkEve...
    method DownloadAgentHelperErrorEventArgs (line 18) | public DownloadAgentHelperErrorEventArgs()
    method Create (line 48) | public static DownloadAgentHelperErrorEventArgs Create(bool deleteDown...
    method Clear (line 59) | public override void Clear()

FILE: GameFramework/Download/DownloadAgentHelperUpdateBytesEventArgs.cs
  class DownloadAgentHelperUpdateBytesEventArgs (line 13) | public sealed class DownloadAgentHelperUpdateBytesEventArgs : GameFramew...
    method DownloadAgentHelperUpdateBytesEventArgs (line 20) | public DownloadAgentHelperUpdateBytesEventArgs()
    method Create (line 52) | public static DownloadAgentHelperUpdateBytesEventArgs Create(byte[] by...
    method Clear (line 79) | public override void Clear()
    method GetBytes (line 89) | public byte[] GetBytes()

FILE: GameFramework/Download/DownloadAgentHelperUpdateLengthEventArgs.cs
  class DownloadAgentHelperUpdateLengthEventArgs (line 13) | public sealed class DownloadAgentHelperUpdateLengthEventArgs : GameFrame...
    method DownloadAgentHelperUpdateLengthEventArgs (line 18) | public DownloadAgentHelperUpdateLengthEventArgs()
    method Create (line 37) | public static DownloadAgentHelperUpdateLengthEventArgs Create(int delt...
    method Clear (line 52) | public override void Clear()

FILE: GameFramework/Download/DownloadFailureEventArgs.cs
  class DownloadFailureEventArgs (line 13) | public sealed class DownloadFailureEventArgs : GameFrameworkEventArgs
    method DownloadFailureEventArgs (line 18) | public DownloadFailureEventArgs()
    method Create (line 81) | public static DownloadFailureEventArgs Create(int serialId, string dow...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Download/DownloadManager.DownloadAgent.cs
  class DownloadManager (line 13) | internal sealed partial class DownloadManager : GameFrameworkModule, IDo...
    class DownloadAgent (line 18) | private sealed class DownloadAgent : ITaskAgent<DownloadTask>, IDispos...
      method DownloadAgent (line 39) | public DownloadAgent(IDownloadAgentHelper downloadAgentHelper)
      method Initialize (line 131) | public void Initialize()
      method Update (line 144) | public void Update(float elapseSeconds, float realElapseSeconds)
      method Shutdown (line 161) | public void Shutdown()
      method Start (line 176) | public StartTaskStatus Start(DownloadTask task)
      method Reset (line 237) | public void Reset()
      method Dispose (line 258) | public void Dispose()
      method Dispose (line 268) | private void Dispose(bool disposing)
      method OnDownloadAgentHelperUpdateBytes (line 287) | private void OnDownloadAgentHelperUpdateBytes(object sender, Downloa...
      method OnDownloadAgentHelperUpdateLength (line 310) | private void OnDownloadAgentHelperUpdateLength(object sender, Downlo...
      method OnDownloadAgentHelperComplete (line 320) | private void OnDownloadAgentHelperComplete(object sender, DownloadAg...
      method OnDownloadAgentHelperError (line 350) | private void OnDownloadAgentHelperError(object sender, DownloadAgent...

FILE: GameFramework/Download/DownloadManager.DownloadCounter.DownloadCounterNode.cs
  class DownloadManager (line 10) | internal sealed partial class DownloadManager : GameFrameworkModule, IDo...
    class DownloadCounter (line 12) | private sealed partial class DownloadCounter
      class DownloadCounterNode (line 14) | private sealed class DownloadCounterNode : IReference
        method DownloadCounterNode (line 19) | public DownloadCounterNode()
        method Create (line 41) | public static DownloadCounterNode Create()
        method Update (line 46) | public void Update(float elapseSeconds, float realElapseSeconds)
        method AddDeltaLength (line 51) | public void AddDeltaLength(int deltaLength)
        method Clear (line 56) | public void Clear()

FILE: GameFramework/Download/DownloadManager.DownloadCounter.cs
  class DownloadManager (line 10) | internal sealed partial class DownloadManager : GameFrameworkModule, IDo...
    class DownloadCounter (line 12) | private sealed partial class DownloadCounter
      method DownloadCounter (line 21) | public DownloadCounter(float updateInterval, float recordInterval)
      method Shutdown (line 83) | public void Shutdown()
      method Update (line 88) | public void Update(float elapseSeconds, float realElapseSeconds)
      method RecordDeltaLength (line 138) | public void RecordDeltaLength(int deltaLength)
      method Reset (line 161) | private void Reset()

FILE: GameFramework/Download/DownloadManager.DownloadTask.cs
  class DownloadManager (line 10) | internal sealed partial class DownloadManager : GameFrameworkModule, IDo...
    class DownloadTask (line 15) | private sealed class DownloadTask : TaskBase
      method DownloadTask (line 28) | public DownloadTask()
      method Create (line 118) | public static DownloadTask Create(string downloadPath, string downlo...
      method Clear (line 132) | public override void Clear()

FILE: GameFramework/Download/DownloadManager.DownloadTaskStatus.cs
  class DownloadManager (line 10) | internal sealed partial class DownloadManager : GameFrameworkModule, IDo...
    type DownloadTaskStatus (line 15) | private enum DownloadTaskStatus : byte

FILE: GameFramework/Download/DownloadManager.cs
  class DownloadManager (line 16) | internal sealed partial class DownloadManager : GameFrameworkModule, IDo...
    method DownloadManager (line 32) | public DownloadManager()
    method Update (line 221) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 230) | internal override void Shutdown()
    method AddDownloadAgentHelper (line 240) | public void AddDownloadAgentHelper(IDownloadAgentHelper downloadAgentH...
    method GetDownloadInfo (line 256) | public TaskInfo GetDownloadInfo(int serialId)
    method GetDownloadInfos (line 266) | public TaskInfo[] GetDownloadInfos(string tag)
    method GetDownloadInfos (line 276) | public void GetDownloadInfos(string tag, List<TaskInfo> results)
    method GetAllDownloadInfos (line 285) | public TaskInfo[] GetAllDownloadInfos()
    method GetAllDownloadInfos (line 294) | public void GetAllDownloadInfos(List<TaskInfo> results)
    method AddDownload (line 305) | public int AddDownload(string downloadPath, string downloadUri)
    method AddDownload (line 317) | public int AddDownload(string downloadPath, string downloadUri, string...
    method AddDownload (line 329) | public int AddDownload(string downloadPath, string downloadUri, int pr...
    method AddDownload (line 341) | public int AddDownload(string downloadPath, string downloadUri, object...
    method AddDownload (line 354) | public int AddDownload(string downloadPath, string downloadUri, string...
    method AddDownload (line 367) | public int AddDownload(string downloadPath, string downloadUri, string...
    method AddDownload (line 380) | public int AddDownload(string downloadPath, string downloadUri, int pr...
    method AddDownload (line 394) | public int AddDownload(string downloadPath, string downloadUri, string...
    method RemoveDownload (line 421) | public bool RemoveDownload(int serialId)
    method RemoveDownloads (line 431) | public int RemoveDownloads(string tag)
    method RemoveAllDownloads (line 440) | public int RemoveAllDownloads()
    method OnDownloadAgentStart (line 445) | private void OnDownloadAgentStart(DownloadAgent sender)
    method OnDownloadAgentUpdate (line 455) | private void OnDownloadAgentUpdate(DownloadAgent sender, int deltaLength)
    method OnDownloadAgentSuccess (line 466) | private void OnDownloadAgentSuccess(DownloadAgent sender, long length)
    method OnDownloadAgentFailure (line 476) | private void OnDownloadAgentFailure(DownloadAgent sender, string error...

FILE: GameFramework/Download/DownloadStartEventArgs.cs
  class DownloadStartEventArgs (line 13) | public sealed class DownloadStartEventArgs : GameFrameworkEventArgs
    method DownloadStartEventArgs (line 18) | public DownloadStartEventArgs()
    method Create (line 81) | public static DownloadStartEventArgs Create(int serialId, string downl...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Download/DownloadSuccessEventArgs.cs
  class DownloadSuccessEventArgs (line 13) | public sealed class DownloadSuccessEventArgs : GameFrameworkEventArgs
    method DownloadSuccessEventArgs (line 18) | public DownloadSuccessEventArgs()
    method Create (line 81) | public static DownloadSuccessEventArgs Create(int serialId, string dow...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Download/DownloadUpdateEventArgs.cs
  class DownloadUpdateEventArgs (line 13) | public sealed class DownloadUpdateEventArgs : GameFrameworkEventArgs
    method DownloadUpdateEventArgs (line 18) | public DownloadUpdateEventArgs()
    method Create (line 81) | public static DownloadUpdateEventArgs Create(int serialId, string down...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Download/IDownloadAgentHelper.cs
  type IDownloadAgentHelper (line 15) | public interface IDownloadAgentHelper
    method Download (line 42) | void Download(string downloadUri, object userData);
    method Download (line 50) | void Download(string downloadUri, long fromPosition, object userData);
    method Download (line 59) | void Download(string downloadUri, long fromPosition, long toPosition, ...
    method Reset (line 64) | void Reset();

FILE: GameFramework/Download/IDownloadManager.cs
  type IDownloadManager (line 16) | public interface IDownloadManager
    method AddDownloadAgentHelper (line 109) | void AddDownloadAgentHelper(IDownloadAgentHelper downloadAgentHelper);
    method GetDownloadInfo (line 116) | TaskInfo GetDownloadInfo(int serialId);
    method GetDownloadInfos (line 123) | TaskInfo[] GetDownloadInfos(string tag);
    method GetDownloadInfos (line 130) | void GetDownloadInfos(string tag, List<TaskInfo> results);
    method GetAllDownloadInfos (line 136) | TaskInfo[] GetAllDownloadInfos();
    method GetAllDownloadInfos (line 142) | void GetAllDownloadInfos(List<TaskInfo> results);
    method AddDownload (line 150) | int AddDownload(string downloadPath, string downloadUri);
    method AddDownload (line 159) | int AddDownload(string downloadPath, string downloadUri, string tag);
    method AddDownload (line 168) | int AddDownload(string downloadPath, string downloadUri, int priority);
    method AddDownload (line 177) | int AddDownload(string downloadPath, string downloadUri, object userDa...
    method AddDownload (line 187) | int AddDownload(string downloadPath, string downloadUri, string tag, i...
    method AddDownload (line 197) | int AddDownload(string downloadPath, string downloadUri, string tag, o...
    method AddDownload (line 207) | int AddDownload(string downloadPath, string downloadUri, int priority,...
    method AddDownload (line 218) | int AddDownload(string downloadPath, string downloadUri, string tag, i...
    method RemoveDownload (line 225) | bool RemoveDownload(int serialId);
    method RemoveDownloads (line 232) | int RemoveDownloads(string tag);
    method RemoveAllDownloads (line 238) | int RemoveAllDownloads();

FILE: GameFramework/Entity/EntityManager.EntityGroup.cs
  class EntityManager (line 13) | internal sealed partial class EntityManager : GameFrameworkModule, IEnti...
    class EntityGroup (line 18) | private sealed class EntityGroup : IEntityGroup
      method EntityGroup (line 36) | public EntityGroup(string name, float instanceAutoReleaseInterval, i...
      method Update (line 154) | public void Update(float elapseSeconds, float realElapseSeconds)
      method HasEntity (line 171) | public bool HasEntity(int entityId)
      method HasEntity (line 189) | public bool HasEntity(string entityAssetName)
      method GetEntity (line 212) | public IEntity GetEntity(int entityId)
      method GetEntity (line 230) | public IEntity GetEntity(string entityAssetName)
      method GetEntities (line 253) | public IEntity[] GetEntities(string entityAssetName)
      method GetEntities (line 277) | public void GetEntities(string entityAssetName, List<IEntity> results)
      method GetAllEntities (line 303) | public IEntity[] GetAllEntities()
      method GetAllEntities (line 318) | public void GetAllEntities(List<IEntity> results)
      method AddEntity (line 336) | public void AddEntity(IEntity entity)
      method RemoveEntity (line 345) | public void RemoveEntity(IEntity entity)
      method RegisterEntityInstanceObject (line 358) | public void RegisterEntityInstanceObject(EntityInstanceObject obj, b...
      method SpawnEntityInstanceObject (line 363) | public EntityInstanceObject SpawnEntityInstanceObject(string name)
      method UnspawnEntity (line 368) | public void UnspawnEntity(IEntity entity)
      method SetEntityInstanceLocked (line 373) | public void SetEntityInstanceLocked(object entityInstance, bool locked)
      method SetEntityInstancePriority (line 383) | public void SetEntityInstancePriority(object entityInstance, int pri...

FILE: GameFramework/Entity/EntityManager.EntityInfo.cs
  class EntityManager (line 12) | internal sealed partial class EntityManager : GameFrameworkModule, IEnti...
    class EntityInfo (line 17) | private sealed class EntityInfo : IReference
      method EntityInfo (line 24) | public EntityInfo()
      method Create (line 72) | public static EntityInfo Create(IEntity entity)
      method Clear (line 85) | public void Clear()
      method GetChildEntity (line 93) | public IEntity GetChildEntity()
      method GetChildEntities (line 98) | public IEntity[] GetChildEntities()
      method GetChildEntities (line 103) | public void GetChildEntities(List<IEntity> results)
      method AddChildEntity (line 117) | public void AddChildEntity(IEntity childEntity)
      method RemoveChildEntity (line 127) | public void RemoveChildEntity(IEntity childEntity)

FILE: GameFramework/Entity/EntityManager.EntityInstanceObject.cs
  class EntityManager (line 12) | internal sealed partial class EntityManager : GameFrameworkModule, IEnti...
    class EntityInstanceObject (line 17) | private sealed class EntityInstanceObject : ObjectBase
      method EntityInstanceObject (line 22) | public EntityInstanceObject()
      method Create (line 28) | public static EntityInstanceObject Create(string name, object entity...
      method Clear (line 47) | public override void Clear()
      method Release (line 54) | protected internal override void Release(bool isShutdown)

FILE: GameFramework/Entity/EntityManager.EntityStatus.cs
  class EntityManager (line 10) | internal sealed partial class EntityManager : GameFrameworkModule, IEnti...
    type EntityStatus (line 15) | private enum EntityStatus : byte

FILE: GameFramework/Entity/EntityManager.ShowEntityInfo.cs
  class EntityManager (line 10) | internal sealed partial class EntityManager : GameFrameworkModule, IEnti...
    class ShowEntityInfo (line 12) | private sealed class ShowEntityInfo : IReference
      method ShowEntityInfo (line 19) | public ShowEntityInfo()
      method Create (line 59) | public static ShowEntityInfo Create(int serialId, int entityId, Enti...
      method Clear (line 69) | public void Clear()

FILE: GameFramework/Entity/EntityManager.cs
  class EntityManager (line 18) | internal sealed partial class EntityManager : GameFrameworkModule, IEnti...
    method EntityManager (line 40) | public EntityManager()
    method Update (line 162) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 190) | internal override void Shutdown()
    method SetObjectPoolManager (line 204) | public void SetObjectPoolManager(IObjectPoolManager objectPoolManager)
    method SetResourceManager (line 218) | public void SetResourceManager(IResourceManager resourceManager)
    method SetEntityHelper (line 232) | public void SetEntityHelper(IEntityHelper entityHelper)
    method HasEntityGroup (line 247) | public bool HasEntityGroup(string entityGroupName)
    method GetEntityGroup (line 262) | public IEntityGroup GetEntityGroup(string entityGroupName)
    method GetAllEntityGroups (line 282) | public IEntityGroup[] GetAllEntityGroups()
    method GetAllEntityGroups (line 298) | public void GetAllEntityGroups(List<IEntityGroup> results)
    method AddEntityGroup (line 322) | public bool AddEntityGroup(string entityGroupName, float instanceAutoR...
    method HasEntity (line 354) | public bool HasEntity(int entityId)
    method HasEntity (line 364) | public bool HasEntity(string entityAssetName)
    method GetEntity (line 387) | public IEntity GetEntity(int entityId)
    method GetEntity (line 403) | public IEntity GetEntity(string entityAssetName)
    method GetEntities (line 426) | public IEntity[] GetEntities(string entityAssetName)
    method GetEntities (line 450) | public void GetEntities(string entityAssetName, List<IEntity> results)
    method GetAllLoadedEntities (line 476) | public IEntity[] GetAllLoadedEntities()
    method GetAllLoadedEntities (line 492) | public void GetAllLoadedEntities(List<IEntity> results)
    method GetAllLoadingEntityIds (line 510) | public int[] GetAllLoadingEntityIds()
    method GetAllLoadingEntityIds (line 526) | public void GetAllLoadingEntityIds(List<int> results)
    method IsLoadingEntity (line 545) | public bool IsLoadingEntity(int entityId)
    method IsValidEntity (line 555) | public bool IsValidEntity(IEntity entity)
    method ShowEntity (line 571) | public void ShowEntity(int entityId, string entityAssetName, string en...
    method ShowEntity (line 583) | public void ShowEntity(int entityId, string entityAssetName, string en...
    method ShowEntity (line 595) | public void ShowEntity(int entityId, string entityAssetName, string en...
    method ShowEntity (line 608) | public void ShowEntity(int entityId, string entityAssetName, string en...
    method HideEntity (line 662) | public void HideEntity(int entityId)
    method HideEntity (line 672) | public void HideEntity(int entityId, object userData)
    method HideEntity (line 694) | public void HideEntity(IEntity entity)
    method HideEntity (line 704) | public void HideEntity(IEntity entity, object userData)
    method HideAllLoadedEntities (line 717) | public void HideAllLoadedEntities()
    method HideAllLoadedEntities (line 726) | public void HideAllLoadedEntities(object userData)
    method HideAllLoadingEntities (line 741) | public void HideAllLoadingEntities()
    method GetParentEntity (line 756) | public IEntity GetParentEntity(int childEntityId)
    method GetParentEntity (line 772) | public IEntity GetParentEntity(IEntity childEntity)
    method GetChildEntityCount (line 787) | public int GetChildEntityCount(int parentEntityId)
    method GetChildEntity (line 803) | public IEntity GetChildEntity(int parentEntityId)
    method GetChildEntity (line 819) | public IEntity GetChildEntity(IEntity parentEntity)
    method GetChildEntities (line 834) | public IEntity[] GetChildEntities(int parentEntityId)
    method GetChildEntities (line 850) | public void GetChildEntities(int parentEntityId, List<IEntity> results)
    method GetChildEntities (line 866) | public IEntity[] GetChildEntities(IEntity parentEntity)
    method GetChildEntities (line 881) | public void GetChildEntities(IEntity parentEntity, List<IEntity> results)
    method AttachEntity (line 896) | public void AttachEntity(int childEntityId, int parentEntityId)
    method AttachEntity (line 907) | public void AttachEntity(int childEntityId, int parentEntityId, object...
    method AttachEntity (line 950) | public void AttachEntity(int childEntityId, IEntity parentEntity)
    method AttachEntity (line 961) | public void AttachEntity(int childEntityId, IEntity parentEntity, obje...
    method AttachEntity (line 976) | public void AttachEntity(IEntity childEntity, int parentEntityId)
    method AttachEntity (line 987) | public void AttachEntity(IEntity childEntity, int parentEntityId, obje...
    method AttachEntity (line 1002) | public void AttachEntity(IEntity childEntity, IEntity parentEntity)
    method AttachEntity (line 1013) | public void AttachEntity(IEntity childEntity, IEntity parentEntity, ob...
    method DetachEntity (line 1032) | public void DetachEntity(int childEntityId)
    method DetachEntity (line 1042) | public void DetachEntity(int childEntityId, object userData)
    method DetachEntity (line 1073) | public void DetachEntity(IEntity childEntity)
    method DetachEntity (line 1083) | public void DetachEntity(IEntity childEntity, object userData)
    method DetachChildEntities (line 1097) | public void DetachChildEntities(int parentEntityId)
    method DetachChildEntities (line 1107) | public void DetachChildEntities(int parentEntityId, object userData)
    method DetachChildEntities (line 1126) | public void DetachChildEntities(IEntity parentEntity)
    method DetachChildEntities (line 1136) | public void DetachChildEntities(IEntity parentEntity, object userData)
    method GetEntityInfo (line 1151) | private EntityInfo GetEntityInfo(int entityId)
    method InternalShowEntity (line 1162) | private void InternalShowEntity(int entityId, string entityAssetName, ...
    method InternalHideEntity (line 1203) | private void InternalHideEntity(EntityInfo entityInfo, object userData)
    method LoadAssetSuccessCallback (line 1244) | private void LoadAssetSuccessCallback(string entityAssetName, object e...
    method LoadAssetFailureCallback (line 1268) | private void LoadAssetFailureCallback(string entityAssetName, LoadReso...
    method LoadAssetUpdateCallback (line 1295) | private void LoadAssetUpdateCallback(string entityAssetName, float pro...
    method LoadAssetDependencyAssetCallback (line 1311) | private void LoadAssetDependencyAssetCallback(string entityAssetName, ...

FILE: GameFramework/Entity/HideEntityCompleteEventArgs.cs
  class HideEntityCompleteEventArgs (line 13) | public sealed class HideEntityCompleteEventArgs : GameFrameworkEventArgs
    method HideEntityCompleteEventArgs (line 18) | public HideEntityCompleteEventArgs()
    method Create (line 70) | public static HideEntityCompleteEventArgs Create(int entityId, string ...
    method Clear (line 83) | public override void Clear()

FILE: GameFramework/Entity/IEntity.cs
  type IEntity (line 13) | public interface IEntity
    method OnInit (line 55) | void OnInit(int entityId, string entityAssetName, IEntityGroup entityG...
    method OnRecycle (line 60) | void OnRecycle();
    method OnShow (line 66) | void OnShow(object userData);
    method OnHide (line 73) | void OnHide(bool isShutdown, object userData);
    method OnAttached (line 80) | void OnAttached(IEntity childEntity, object userData);
    method OnDetached (line 87) | void OnDetached(IEntity childEntity, object userData);
    method OnAttachTo (line 94) | void OnAttachTo(IEntity parentEntity, object userData);
    method OnDetachFrom (line 101) | void OnDetachFrom(IEntity parentEntity, object userData);
    method OnUpdate (line 108) | void OnUpdate(float elapseSeconds, float realElapseSeconds);

FILE: GameFramework/Entity/IEntityGroup.cs
  type IEntityGroup (line 15) | public interface IEntityGroup
    method HasEntity (line 82) | bool HasEntity(int entityId);
    method HasEntity (line 89) | bool HasEntity(string entityAssetName);
    method GetEntity (line 96) | IEntity GetEntity(int entityId);
    method GetEntity (line 103) | IEntity GetEntity(string entityAssetName);
    method GetEntities (line 110) | IEntity[] GetEntities(string entityAssetName);
    method GetEntities (line 117) | void GetEntities(string entityAssetName, List<IEntity> results);
    method GetAllEntities (line 123) | IEntity[] GetAllEntities();
    method GetAllEntities (line 129) | void GetAllEntities(List<IEntity> results);
    method SetEntityInstanceLocked (line 136) | void SetEntityInstanceLocked(object entityInstance, bool locked);
    method SetEntityInstancePriority (line 143) | void SetEntityInstancePriority(object entityInstance, int priority);

FILE: GameFramework/Entity/IEntityGroupHelper.cs
  type IEntityGroupHelper (line 13) | public interface IEntityGroupHelper

FILE: GameFramework/Entity/IEntityHelper.cs
  type IEntityHelper (line 13) | public interface IEntityHelper
    method InstantiateEntity (line 20) | object InstantiateEntity(object entityAsset);
    method CreateEntity (line 29) | IEntity CreateEntity(object entityInstance, IEntityGroup entityGroup, ...
    method ReleaseEntity (line 36) | void ReleaseEntity(object entityAsset, object entityInstance);

FILE: GameFramework/Entity/IEntityManager.cs
  type IEntityManager (line 18) | public interface IEntityManager
    method SetObjectPoolManager (line 65) | void SetObjectPoolManager(IObjectPoolManager objectPoolManager);
    method SetResourceManager (line 71) | void SetResourceManager(IResourceManager resourceManager);
    method SetEntityHelper (line 77) | void SetEntityHelper(IEntityHelper entityHelper);
    method HasEntityGroup (line 84) | bool HasEntityGroup(string entityGroupName);
    method GetEntityGroup (line 91) | IEntityGroup GetEntityGroup(string entityGroupName);
    method GetAllEntityGroups (line 97) | IEntityGroup[] GetAllEntityGroups();
    method GetAllEntityGroups (line 103) | void GetAllEntityGroups(List<IEntityGroup> results);
    method AddEntityGroup (line 115) | bool AddEntityGroup(string entityGroupName, float instanceAutoReleaseI...
    method HasEntity (line 122) | bool HasEntity(int entityId);
    method HasEntity (line 129) | bool HasEntity(string entityAssetName);
    method GetEntity (line 136) | IEntity GetEntity(int entityId);
    method GetEntity (line 143) | IEntity GetEntity(string entityAssetName);
    method GetEntities (line 150) | IEntity[] GetEntities(string entityAssetName);
    method GetEntities (line 157) | void GetEntities(string entityAssetName, List<IEntity> results);
    method GetAllLoadedEntities (line 163) | IEntity[] GetAllLoadedEntities();
    method GetAllLoadedEntities (line 169) | void GetAllLoadedEntities(List<IEntity> results);
    method GetAllLoadingEntityIds (line 175) | int[] GetAllLoadingEntityIds();
    method GetAllLoadingEntityIds (line 181) | void GetAllLoadingEntityIds(List<int> results);
    method IsLoadingEntity (line 188) | bool IsLoadingEntity(int entityId);
    method IsValidEntity (line 195) | bool IsValidEntity(IEntity entity);
    method ShowEntity (line 203) | void ShowEntity(int entityId, string entityAssetName, string entityGro...
    method ShowEntity (line 212) | void ShowEntity(int entityId, string entityAssetName, string entityGro...
    method ShowEntity (line 221) | void ShowEntity(int entityId, string entityAssetName, string entityGro...
    method ShowEntity (line 231) | void ShowEntity(int entityId, string entityAssetName, string entityGro...
    method HideEntity (line 237) | void HideEntity(int entityId);
    method HideEntity (line 244) | void HideEntity(int entityId, object userData);
    method HideEntity (line 250) | void HideEntity(IEntity entity);
    method HideEntity (line 257) | void HideEntity(IEntity entity, object userData);
    method HideAllLoadedEntities (line 262) | void HideAllLoadedEntities();
    method HideAllLoadedEntities (line 268) | void HideAllLoadedEntities(object userData);
    method HideAllLoadingEntities (line 273) | void HideAllLoadingEntities();
    method GetParentEntity (line 280) | IEntity GetParentEntity(int childEntityId);
    method GetParentEntity (line 287) | IEntity GetParentEntity(IEntity childEntity);
    method GetChildEntityCount (line 294) | int GetChildEntityCount(int parentEntityId);
    method GetChildEntity (line 301) | IEntity GetChildEntity(int parentEntityId);
    method GetChildEntity (line 308) | IEntity GetChildEntity(IEntity parentEntity);
    method GetChildEntities (line 315) | IEntity[] GetChildEntities(int parentEntityId);
    method GetChildEntities (line 322) | void GetChildEntities(int parentEntityId, List<IEntity> results);
    method GetChildEntities (line 329) | IEntity[] GetChildEntities(IEntity parentEntity);
    method GetChildEntities (line 336) | void GetChildEntities(IEntity parentEntity, List<IEntity> results);
    method AttachEntity (line 343) | void AttachEntity(int childEntityId, int parentEntityId);
    method AttachEntity (line 351) | void AttachEntity(int childEntityId, int parentEntityId, object userDa...
    method AttachEntity (line 358) | void AttachEntity(int childEntityId, IEntity parentEntity);
    method AttachEntity (line 366) | void AttachEntity(int childEntityId, IEntity parentEntity, object user...
    method AttachEntity (line 373) | void AttachEntity(IEntity childEntity, int parentEntityId);
    method AttachEntity (line 381) | void AttachEntity(IEntity childEntity, int parentEntityId, object user...
    method AttachEntity (line 388) | void AttachEntity(IEntity childEntity, IEntity parentEntity);
    method AttachEntity (line 396) | void AttachEntity(IEntity childEntity, IEntity parentEntity, object us...
    method DetachEntity (line 402) | void DetachEntity(int childEntityId);
    method DetachEntity (line 409) | void DetachEntity(int childEntityId, object userData);
    method DetachEntity (line 415) | void DetachEntity(IEntity childEntity);
    method DetachEntity (line 422) | void DetachEntity(IEntity childEntity, object userData);
    method DetachChildEntities (line 428) | void DetachChildEntities(int parentEntityId);
    method DetachChildEntities (line 435) | void DetachChildEntities(int parentEntityId, object userData);
    method DetachChildEntities (line 441) | void DetachChildEntities(IEntity parentEntity);
    method DetachChildEntities (line 448) | void DetachChildEntities(IEntity parentEntity, object userData);

FILE: GameFramework/Entity/ShowEntityDependencyAssetEventArgs.cs
  class ShowEntityDependencyAssetEventArgs (line 13) | public sealed class ShowEntityDependencyAssetEventArgs : GameFrameworkEv...
    method ShowEntityDependencyAssetEventArgs (line 18) | public ShowEntityDependencyAssetEventArgs()
    method Create (line 103) | public static ShowEntityDependencyAssetEventArgs Create(int entityId, ...
    method Clear (line 119) | public override void Clear()

FILE: GameFramework/Entity/ShowEntityFailureEventArgs.cs
  class ShowEntityFailureEventArgs (line 13) | public sealed class ShowEntityFailureEventArgs : GameFrameworkEventArgs
    method ShowEntityFailureEventArgs (line 18) | public ShowEntityFailureEventArgs()
    method Create (line 81) | public static ShowEntityFailureEventArgs Create(int entityId, string e...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Entity/ShowEntitySuccessEventArgs.cs
  class ShowEntitySuccessEventArgs (line 13) | public sealed class ShowEntitySuccessEventArgs : GameFrameworkEventArgs
    method ShowEntitySuccessEventArgs (line 18) | public ShowEntitySuccessEventArgs()
    method Create (line 59) | public static ShowEntitySuccessEventArgs Create(IEntity entity, float ...
    method Clear (line 71) | public override void Clear()

FILE: GameFramework/Entity/ShowEntityUpdateEventArgs.cs
  class ShowEntityUpdateEventArgs (line 13) | public sealed class ShowEntityUpdateEventArgs : GameFrameworkEventArgs
    method ShowEntityUpdateEventArgs (line 18) | public ShowEntityUpdateEventArgs()
    method Create (line 81) | public static ShowEntityUpdateEventArgs Create(int entityId, string en...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Event/EventManager.cs
  class EventManager (line 15) | internal sealed class EventManager : GameFrameworkModule, IEventManager
    method EventManager (line 22) | public EventManager()
    method Update (line 66) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 74) | internal override void Shutdown()
    method Count (line 84) | public int Count(int id)
    method Check (line 95) | public bool Check(int id, EventHandler<GameEventArgs> handler)
    method Subscribe (line 105) | public void Subscribe(int id, EventHandler<GameEventArgs> handler)
    method Unsubscribe (line 115) | public void Unsubscribe(int id, EventHandler<GameEventArgs> handler)
    method SetDefaultHandler (line 124) | public void SetDefaultHandler(EventHandler<GameEventArgs> handler)
    method Fire (line 134) | public void Fire(object sender, GameEventArgs e)
    method FireNow (line 144) | public void FireNow(object sender, GameEventArgs e)

FILE: GameFramework/Event/GameEventArgs.cs
  class GameEventArgs (line 13) | public abstract class GameEventArgs : BaseEventArgs

FILE: GameFramework/Event/IEventManager.cs
  type IEventManager (line 15) | public interface IEventManager
    method Count (line 38) | int Count(int id);
    method Check (line 46) | bool Check(int id, EventHandler<GameEventArgs> handler);
    method Subscribe (line 53) | void Subscribe(int id, EventHandler<GameEventArgs> handler);
    method Unsubscribe (line 60) | void Unsubscribe(int id, EventHandler<GameEventArgs> handler);
    method SetDefaultHandler (line 66) | void SetDefaultHandler(EventHandler<GameEventArgs> handler);
    method Fire (line 73) | void Fire(object sender, GameEventArgs e);
    method FireNow (line 80) | void FireNow(object sender, GameEventArgs e);

FILE: GameFramework/FileSystem/CommonFileSystemStream.cs
  class CommonFileSystemStream (line 16) | public sealed class CommonFileSystemStream : FileSystemStream, IDisposable
    method CommonFileSystemStream (line 26) | public CommonFileSystemStream(string fullPath, FileSystemAccess access...
    method SetLength (line 82) | protected internal override void SetLength(long length)
    method Seek (line 92) | protected internal override void Seek(long offset, SeekOrigin origin)
    method ReadByte (line 101) | protected internal override int ReadByte()
    method Read (line 113) | protected internal override int Read(byte[] buffer, int startIndex, in...
    method WriteByte (line 122) | protected internal override void WriteByte(byte value)
    method Write (line 133) | protected internal override void Write(byte[] buffer, int startIndex, ...
    method Flush (line 141) | protected internal override void Flush()
    method Close (line 149) | protected internal override void Close()
    method Dispose (line 157) | public void Dispose()

FILE: GameFramework/FileSystem/FileInfo.cs
  type FileInfo (line 15) | [StructLayout(LayoutKind.Auto)]
    method FileInfo (line 28) | public FileInfo(string name, long offset, int length)

FILE: GameFramework/FileSystem/FileSystem.BlockData.cs
  class FileSystem (line 12) | internal sealed partial class FileSystem : IFileSystem
    type BlockData (line 17) | [StructLayout(LayoutKind.Sequential)]
      method BlockData (line 26) | public BlockData(int clusterIndex, int length)
      method BlockData (line 31) | public BlockData(int stringIndex, int clusterIndex, int length)
      method Free (line 70) | public BlockData Free()

FILE: GameFramework/FileSystem/FileSystem.HeaderData.cs
  class FileSystem (line 12) | internal sealed partial class FileSystem : IFileSystem
    type HeaderData (line 17) | [StructLayout(LayoutKind.Sequential)]
      method HeaderData (line 37) | public HeaderData(int maxFileCount, int maxBlockCount)
      method HeaderData (line 43) | public HeaderData(byte version, byte[] encryptBytes, int maxFileCoun...
      method GetEncryptBytes (line 94) | public byte[] GetEncryptBytes()
      method SetBlockCount (line 99) | public HeaderData SetBlockCount(int blockCount)

FILE: GameFramework/FileSystem/FileSystem.StringData.cs
  class FileSystem (line 13) | internal sealed partial class FileSystem : IFileSystem
    type StringData (line 18) | [StructLayout(LayoutKind.Sequential)]
      method StringData (line 28) | public StringData(byte length, byte[] bytes)
      method GetString (line 34) | public string GetString(byte[] encryptBytes)
      method SetString (line 46) | public StringData SetString(string value, byte[] encryptBytes)
      method Clear (line 64) | public StringData Clear()

FILE: GameFramework/FileSystem/FileSystem.cs
  class FileSystem (line 18) | internal sealed partial class FileSystem : IFileSystem
    method FileSystem (line 51) | private FileSystem(string fullPath, FileSystemAccess access, FileSyste...
    method Create (line 139) | public static FileSystem Create(string fullPath, FileSystemAccess acce...
    method Load (line 181) | public static FileSystem Load(string fullPath, FileSystemAccess access...
    method Shutdown (line 238) | public void Shutdown()
    method GetFileInfo (line 259) | public FileInfo GetFileInfo(string name)
    method GetAllFileInfos (line 280) | public FileInfo[] GetAllFileInfos()
    method GetAllFileInfos (line 297) | public void GetAllFileInfos(List<FileInfo> results)
    method HasFile (line 317) | public bool HasFile(string name)
    method ReadFile (line 332) | public byte[] ReadFile(string name)
    method ReadFile (line 367) | public int ReadFile(string name, byte[] buffer)
    method ReadFile (line 384) | public int ReadFile(string name, byte[] buffer, int startIndex)
    method ReadFile (line 402) | public int ReadFile(string name, byte[] buffer, int startIndex, int le...
    method ReadFile (line 450) | public int ReadFile(string name, Stream stream)
    method ReadFileSegment (line 494) | public byte[] ReadFileSegment(string name, int length)
    method ReadFileSegment (line 506) | public byte[] ReadFileSegment(string name, int offset, int length)
    method ReadFileSegment (line 561) | public int ReadFileSegment(string name, byte[] buffer)
    method ReadFileSegment (line 578) | public int ReadFileSegment(string name, byte[] buffer, int length)
    method ReadFileSegment (line 591) | public int ReadFileSegment(string name, byte[] buffer, int startIndex,...
    method ReadFileSegment (line 603) | public int ReadFileSegment(string name, int offset, byte[] buffer)
    method ReadFileSegment (line 621) | public int ReadFileSegment(string name, int offset, byte[] buffer, int...
    method ReadFileSegment (line 635) | public int ReadFileSegment(string name, int offset, byte[] buffer, int...
    method ReadFileSegment (line 695) | public int ReadFileSegment(string name, Stream stream, int length)
    method ReadFileSegment (line 708) | public int ReadFileSegment(string name, int offset, Stream stream, int...
    method WriteFile (line 772) | public bool WriteFile(string name, byte[] buffer)
    method WriteFile (line 789) | public bool WriteFile(string name, byte[] buffer, int startIndex)
    method WriteFile (line 807) | public bool WriteFile(string name, byte[] buffer, int startIndex, int ...
    method WriteFile (line 869) | public bool WriteFile(string name, Stream stream)
    method WriteFile (line 932) | public bool WriteFile(string name, string filePath)
    method SaveAsFile (line 956) | public bool SaveAsFile(string name, string filePath)
    method RenameFile (line 1009) | public bool RenameFile(string oldName, string newName)
    method DeleteFile (line 1062) | public bool DeleteFile(string name)
    method ProcessWriteFile (line 1102) | private void ProcessWriteFile(string name, bool hasFile, int oldBlockI...
    method TryCombineFreeBlocks (line 1138) | private bool TryCombineFreeBlocks(int freeBlockIndex)
    method GetEmptyBlockIndex (line 1203) | private int GetEmptyBlockIndex()
    method AllocBlock (line 1224) | private int AllocBlock(int length)
    method AllocString (line 1299) | private int AllocString(string value)
    method WriteHeaderData (line 1330) | private void WriteHeaderData()
    method WriteBlockData (line 1338) | private void WriteBlockData(int blockIndex)
    method ReadStringData (line 1345) | private StringData ReadStringData(int stringIndex)
    method WriteStringData (line 1352) | private void WriteStringData(int stringIndex, StringData stringData)
    method CalcOffsets (line 1359) | private static void CalcOffsets(FileSystem fileSystem)
    method GetUpBoundClusterOffset (line 1366) | private static long GetUpBoundClusterOffset(long offset)
    method GetUpBoundClusterCount (line 1371) | private static int GetUpBoundClusterCount(long length)
    method GetClusterOffset (line 1376) | private static long GetClusterOffset(int clusterIndex)

FILE: GameFramework/FileSystem/FileSystemAccess.cs
  type FileSystemAccess (line 15) | [Flags]

FILE: GameFramework/FileSystem/FileSystemManager.cs
  class FileSystemManager (line 17) | internal sealed class FileSystemManager : GameFrameworkModule, IFileSyst...
    method FileSystemManager (line 26) | public FileSystemManager()
    method Update (line 60) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 67) | internal override void Shutdown()
    method SetFileSystemHelper (line 83) | public void SetFileSystemHelper(IFileSystemHelper fileSystemHelper)
    method HasFileSystem (line 98) | public bool HasFileSystem(string fullPath)
    method GetFileSystem (line 113) | public IFileSystem GetFileSystem(string fullPath)
    method CreateFileSystem (line 137) | public IFileSystem CreateFileSystem(string fullPath, FileSystemAccess ...
    method LoadFileSystem (line 187) | public IFileSystem LoadFileSystem(string fullPath, FileSystemAccess ac...
    method DestroyFileSystem (line 232) | public void DestroyFileSystem(IFileSystem fileSystem, bool deletePhysi...
    method GetAllFileSystems (line 253) | public IFileSystem[] GetAllFileSystems()
    method GetAllFileSystems (line 269) | public void GetAllFileSystems(List<IFileSystem> results)

FILE: GameFramework/FileSystem/FileSystemStream.cs
  class FileSystemStream (line 16) | public abstract class FileSystemStream
    method SetLength (line 49) | protected internal abstract void SetLength(long length);
    method Seek (line 56) | protected internal abstract void Seek(long offset, SeekOrigin origin);
    method ReadByte (line 62) | protected internal abstract int ReadByte();
    method Read (line 71) | protected internal abstract int Read(byte[] buffer, int startIndex, in...
    method Read (line 79) | protected internal int Read(Stream stream, int length)
    method WriteByte (line 97) | protected internal abstract void WriteByte(byte value);
    method Write (line 105) | protected internal abstract void Write(byte[] buffer, int startIndex, ...
    method Write (line 112) | protected internal void Write(Stream stream, int length)
    method Flush (line 128) | protected internal abstract void Flush();
    method Close (line 133) | protected internal abstract void Close();

FILE: GameFramework/FileSystem/IFileSystem.cs
  type IFileSystem (line 16) | public interface IFileSystem
    method GetFileInfo (line 55) | FileInfo GetFileInfo(string name);
    method GetAllFileInfos (line 61) | FileInfo[] GetAllFileInfos();
    method GetAllFileInfos (line 67) | void GetAllFileInfos(List<FileInfo> results);
    method HasFile (line 74) | bool HasFile(string name);
    method ReadFile (line 81) | byte[] ReadFile(string name);
    method ReadFile (line 89) | int ReadFile(string name, byte[] buffer);
    method ReadFile (line 98) | int ReadFile(string name, byte[] buffer, int startIndex);
    method ReadFile (line 108) | int ReadFile(string name, byte[] buffer, int startIndex, int length);
    method ReadFile (line 116) | int ReadFile(string name, Stream stream);
    method ReadFileSegment (line 124) | byte[] ReadFileSegment(string name, int length);
    method ReadFileSegment (line 133) | byte[] ReadFileSegment(string name, int offset, int length);
    method ReadFileSegment (line 141) | int ReadFileSegment(string name, byte[] buffer);
    method ReadFileSegment (line 150) | int ReadFileSegment(string name, byte[] buffer, int length);
    method ReadFileSegment (line 160) | int ReadFileSegment(string name, byte[] buffer, int startIndex, int le...
    method ReadFileSegment (line 169) | int ReadFileSegment(string name, int offset, byte[] buffer);
    method ReadFileSegment (line 179) | int ReadFileSegment(string name, int offset, byte[] buffer, int length);
    method ReadFileSegment (line 190) | int ReadFileSegment(string name, int offset, byte[] buffer, int startI...
    method ReadFileSegment (line 199) | int ReadFileSegment(string name, Stream stream, int length);
    method ReadFileSegment (line 209) | int ReadFileSegment(string name, int offset, Stream stream, int length);
    method WriteFile (line 217) | bool WriteFile(string name, byte[] buffer);
    method WriteFile (line 226) | bool WriteFile(string name, byte[] buffer, int startIndex);
    method WriteFile (line 236) | bool WriteFile(string name, byte[] buffer, int startIndex, int length);
    method WriteFile (line 244) | bool WriteFile(string name, Stream stream);
    method WriteFile (line 252) | bool WriteFile(string name, string filePath);
    method SaveAsFile (line 260) | bool SaveAsFile(string name, string filePath);
    method RenameFile (line 268) | bool RenameFile(string oldName, string newName);
    method DeleteFile (line 275) | bool DeleteFile(string name);

FILE: GameFramework/FileSystem/IFileSystemHelper.cs
  type IFileSystemHelper (line 13) | public interface IFileSystemHelper
    method CreateFileSystemStream (line 22) | FileSystemStream CreateFileSystemStream(string fullPath, FileSystemAcc...

FILE: GameFramework/FileSystem/IFileSystemManager.cs
  type IFileSystemManager (line 15) | public interface IFileSystemManager
    method SetFileSystemHelper (line 29) | void SetFileSystemHelper(IFileSystemHelper fileSystemHelper);
    method HasFileSystem (line 36) | bool HasFileSystem(string fullPath);
    method GetFileSystem (line 43) | IFileSystem GetFileSystem(string fullPath);
    method CreateFileSystem (line 53) | IFileSystem CreateFileSystem(string fullPath, FileSystemAccess access,...
    method LoadFileSystem (line 61) | IFileSystem LoadFileSystem(string fullPath, FileSystemAccess access);
    method DestroyFileSystem (line 68) | void DestroyFileSystem(IFileSystem fileSystem, bool deletePhysicalFile);
    method GetAllFileSystems (line 74) | IFileSystem[] GetAllFileSystems();
    method GetAllFileSystems (line 80) | void GetAllFileSystems(List<IFileSystem> results);

FILE: GameFramework/Fsm/Fsm.cs
  class Fsm (line 17) | internal sealed class Fsm<T> : FsmBase, IReference, IFsm<T> where T : class
    method Fsm (line 29) | public Fsm()
    method Create (line 134) | public static Fsm<T> Create(string name, T owner, params FsmState<T>[]...
    method Create (line 177) | public static Fsm<T> Create(string name, T owner, List<FsmState<T>> st...
    method Clear (line 216) | public void Clear()
    method Start (line 256) | public void Start<TState>() where TState : FsmState<T>
    method Start (line 278) | public void Start(Type stateType)
    method HasState (line 311) | public bool HasState<TState>() where TState : FsmState<T>
    method HasState (line 321) | public bool HasState(Type stateType)
    method GetState (line 341) | public TState GetState<TState>() where TState : FsmState<T>
    method GetState (line 357) | public FsmState<T> GetState(Type stateType)
    method GetAllStates (line 382) | public FsmState<T>[] GetAllStates()
    method GetAllStates (line 398) | public void GetAllStates(List<FsmState<T>> results)
    method HasData (line 417) | public bool HasData(string name)
    method GetData (line 438) | public TData GetData<TData>(string name) where TData : Variable
    method GetData (line 448) | public Variable GetData(string name)
    method SetData (line 475) | public void SetData<TData>(string name, TData data) where TData : Vari...
    method SetData (line 485) | public void SetData(string name, Variable data)
    method RemoveData (line 511) | public bool RemoveData(string name)
    method Update (line 537) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 551) | internal override void Shutdown()
    method ChangeState (line 560) | internal void ChangeState<TState>() where TState : FsmState<T>
    method ChangeState (line 569) | internal void ChangeState(Type stateType)

FILE: GameFramework/Fsm/FsmBase.cs
  class FsmBase (line 15) | public abstract class FsmBase
    method FsmBase (line 22) | public FsmBase()
    method Update (line 106) | internal abstract void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 111) | internal abstract void Shutdown();

FILE: GameFramework/Fsm/FsmManager.cs
  class FsmManager (line 16) | internal sealed class FsmManager : GameFrameworkModule, IFsmManager
    method FsmManager (line 24) | public FsmManager()
    method Update (line 58) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 85) | internal override void Shutdown()
    method HasFsm (line 101) | public bool HasFsm<T>() where T : class
    method HasFsm (line 111) | public bool HasFsm(Type ownerType)
    method HasFsm (line 127) | public bool HasFsm<T>(string name) where T : class
    method HasFsm (line 138) | public bool HasFsm(Type ownerType, string name)
    method GetFsm (line 153) | public IFsm<T> GetFsm<T>() where T : class
    method GetFsm (line 163) | public FsmBase GetFsm(Type ownerType)
    method GetFsm (line 179) | public IFsm<T> GetFsm<T>(string name) where T : class
    method GetFsm (line 190) | public FsmBase GetFsm(Type ownerType, string name)
    method GetAllFsms (line 204) | public FsmBase[] GetAllFsms()
    method GetAllFsms (line 220) | public void GetAllFsms(List<FsmBase> results)
    method CreateFsm (line 241) | public IFsm<T> CreateFsm<T>(T owner, params FsmState<T>[] states) wher...
    method CreateFsm (line 254) | public IFsm<T> CreateFsm<T>(string name, T owner, params FsmState<T>[]...
    method CreateFsm (line 274) | public IFsm<T> CreateFsm<T>(T owner, List<FsmState<T>> states) where T...
    method CreateFsm (line 287) | public IFsm<T> CreateFsm<T>(string name, T owner, List<FsmState<T>> st...
    method DestroyFsm (line 305) | public bool DestroyFsm<T>() where T : class
    method DestroyFsm (line 315) | public bool DestroyFsm(Type ownerType)
    method DestroyFsm (line 331) | public bool DestroyFsm<T>(string name) where T : class
    method DestroyFsm (line 342) | public bool DestroyFsm(Type ownerType, string name)
    method DestroyFsm (line 358) | public bool DestroyFsm<T>(IFsm<T> fsm) where T : class
    method DestroyFsm (line 373) | public bool DestroyFsm(FsmBase fsm)
    method InternalHasFsm (line 383) | private bool InternalHasFsm(TypeNamePair typeNamePair)
    method InternalGetFsm (line 388) | private FsmBase InternalGetFsm(TypeNamePair typeNamePair)
    method InternalDestroyFsm (line 399) | private bool InternalDestroyFsm(TypeNamePair typeNamePair)

FILE: GameFramework/Fsm/FsmState.cs
  class FsmState (line 16) | public abstract class FsmState<T> where T : class
    method FsmState (line 21) | public FsmState()
    method OnInit (line 29) | protected internal virtual void OnInit(IFsm<T> fsm)
    method OnEnter (line 37) | protected internal virtual void OnEnter(IFsm<T> fsm)
    method OnUpdate (line 47) | protected internal virtual void OnUpdate(IFsm<T> fsm, float elapseSeco...
    method OnLeave (line 56) | protected internal virtual void OnLeave(IFsm<T> fsm, bool isShutdown)
    method OnDestroy (line 64) | protected internal virtual void OnDestroy(IFsm<T> fsm)
    method ChangeState (line 73) | protected void ChangeState<TState>(IFsm<T> fsm) where TState : FsmStat...
    method ChangeState (line 89) | protected void ChangeState(IFsm<T> fsm, Type stateType)

FILE: GameFramework/Fsm/IFsm.cs
  type IFsm (line 17) | public interface IFsm<T> where T : class
    method Start (line 87) | void Start<TState>() where TState : FsmState<T>;
    method Start (line 93) | void Start(Type stateType);
    method HasState (line 100) | bool HasState<TState>() where TState : FsmState<T>;
    method HasState (line 107) | bool HasState(Type stateType);
    method GetState (line 114) | TState GetState<TState>() where TState : FsmState<T>;
    method GetState (line 121) | FsmState<T> GetState(Type stateType);
    method GetAllStates (line 127) | FsmState<T>[] GetAllStates();
    method GetAllStates (line 133) | void GetAllStates(List<FsmState<T>> results);
    method HasData (line 140) | bool HasData(string name);
    method GetData (line 148) | TData GetData<TData>(string name) where TData : Variable;
    method GetData (line 155) | Variable GetData(string name);
    method SetData (line 163) | void SetData<TData>(string name, TData data) where TData : Variable;
    method SetData (line 170) | void SetData(string name, Variable data);
    method RemoveData (line 177) | bool RemoveData(string name);

FILE: GameFramework/Fsm/IFsmManager.cs
  type IFsmManager (line 16) | public interface IFsmManager
    method HasFsm (line 31) | bool HasFsm<T>() where T : class;
    method HasFsm (line 38) | bool HasFsm(Type ownerType);
    method HasFsm (line 46) | bool HasFsm<T>(string name) where T : class;
    method HasFsm (line 54) | bool HasFsm(Type ownerType, string name);
    method GetFsm (line 61) | IFsm<T> GetFsm<T>() where T : class;
    method GetFsm (line 68) | FsmBase GetFsm(Type ownerType);
    method GetFsm (line 76) | IFsm<T> GetFsm<T>(string name) where T : class;
    method GetFsm (line 84) | FsmBase GetFsm(Type ownerType, string name);
    method GetAllFsms (line 90) | FsmBase[] GetAllFsms();
    method GetAllFsms (line 96) | void GetAllFsms(List<FsmBase> results);
    method CreateFsm (line 105) | IFsm<T> CreateFsm<T>(T owner, params FsmState<T>[] states) where T : c...
    method CreateFsm (line 115) | IFsm<T> CreateFsm<T>(string name, T owner, params FsmState<T>[] states...
    method CreateFsm (line 124) | IFsm<T> CreateFsm<T>(T owner, List<FsmState<T>> states) where T : class;
    method CreateFsm (line 134) | IFsm<T> CreateFsm<T>(string name, T owner, List<FsmState<T>> states) w...
    method DestroyFsm (line 141) | bool DestroyFsm<T>() where T : class;
    method DestroyFsm (line 148) | bool DestroyFsm(Type ownerType);
    method DestroyFsm (line 156) | bool DestroyFsm<T>(string name) where T : class;
    method DestroyFsm (line 164) | bool DestroyFsm(Type ownerType, string name);
    method DestroyFsm (line 172) | bool DestroyFsm<T>(IFsm<T> fsm) where T : class;
    method DestroyFsm (line 179) | bool DestroyFsm(FsmBase fsm);

FILE: GameFramework/Localization/ILocalizationHelper.cs
  type ILocalizationHelper (line 13) | public interface ILocalizationHelper

FILE: GameFramework/Localization/ILocalizationManager.cs
  type ILocalizationManager (line 15) | public interface ILocalizationManager : IDataProvider<ILocalizationManager>
    method SetResourceManager (line 54) | void SetResourceManager(IResourceManager resourceManager);
    method SetDataProviderHelper (line 60) | void SetDataProviderHelper(IDataProviderHelper<ILocalizationManager> d...
    method SetLocalizationHelper (line 66) | void SetLocalizationHelper(ILocalizationHelper localizationHelper);
    method EnsureCachedBytesSize (line 72) | void EnsureCachedBytesSize(int ensureSize);
    method FreeCachedBytes (line 77) | void FreeCachedBytes();
    method GetString (line 84) | string GetString(string key);
    method GetString (line 93) | string GetString<T>(string key, T arg);
    method GetString (line 104) | string GetString<T1, T2>(string key, T1 arg1, T2 arg2);
    method GetString (line 117) | string GetString<T1, T2, T3>(string key, T1 arg1, T2 arg2, T3 arg3);
    method GetString (line 132) | string GetString<T1, T2, T3, T4>(string key, T1 arg1, T2 arg2, T3 arg3...
    method GetString (line 149) | string GetString<T1, T2, T3, T4, T5>(string key, T1 arg1, T2 arg2, T3 ...
    method GetString (line 168) | string GetString<T1, T2, T3, T4, T5, T6>(string key, T1 arg1, T2 arg2,...
    method GetString (line 189) | string GetString<T1, T2, T3, T4, T5, T6, T7>(string key, T1 arg1, T2 a...
    method GetString (line 212) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8>(string key, T1 arg1, ...
    method GetString (line 237) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string key, T1 ar...
    method GetString (line 264) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string key, ...
    method GetString (line 293) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(string ...
    method GetString (line 324) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(st...
    method GetString (line 357) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1...
    method GetString (line 392) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1...
    method GetString (line 429) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1...
    method GetString (line 468) | string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T1...
    method HasRawString (line 475) | bool HasRawString(string key);
    method GetRawString (line 482) | string GetRawString(string key);
    method AddRawString (line 490) | bool AddRawString(string key, string value);
    method RemoveRawString (line 497) | bool RemoveRawString(string key);
    method RemoveAllRawStrings (line 502) | void RemoveAllRawStrings();

FILE: GameFramework/Localization/Language.cs
  type Language (line 13) | public enum Language : byte

FILE: GameFramework/Localization/LocalizationManager.cs
  class LocalizationManager (line 17) | internal sealed partial class LocalizationManager : GameFrameworkModule,...
    method LocalizationManager (line 27) | public LocalizationManager()
    method Update (line 158) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 165) | internal override void Shutdown()
    method SetResourceManager (line 173) | public void SetResourceManager(IResourceManager resourceManager)
    method SetDataProviderHelper (line 182) | public void SetDataProviderHelper(IDataProviderHelper<ILocalizationMan...
    method SetLocalizationHelper (line 191) | public void SetLocalizationHelper(ILocalizationHelper localizationHelper)
    method EnsureCachedBytesSize (line 205) | public void EnsureCachedBytesSize(int ensureSize)
    method FreeCachedBytes (line 213) | public void FreeCachedBytes()
    method ReadData (line 222) | public void ReadData(string dictionaryAssetName)
    method ReadData (line 232) | public void ReadData(string dictionaryAssetName, int priority)
    method ReadData (line 242) | public void ReadData(string dictionaryAssetName, object userData)
    method ReadData (line 253) | public void ReadData(string dictionaryAssetName, int priority, object ...
    method ParseData (line 263) | public bool ParseData(string dictionaryString)
    method ParseData (line 274) | public bool ParseData(string dictionaryString, object userData)
    method ParseData (line 284) | public bool ParseData(byte[] dictionaryBytes)
    method ParseData (line 295) | public bool ParseData(byte[] dictionaryBytes, object userData)
    method ParseData (line 307) | public bool ParseData(byte[] dictionaryBytes, int startIndex, int length)
    method ParseData (line 320) | public bool ParseData(byte[] dictionaryBytes, int startIndex, int leng...
    method GetString (line 330) | public string GetString(string key)
    method GetString (line 348) | public string GetString<T>(string key, T arg)
    method GetString (line 375) | public string GetString<T1, T2>(string key, T1 arg1, T2 arg2)
    method GetString (line 404) | public string GetString<T1, T2, T3>(string key, T1 arg1, T2 arg2, T3 a...
    method GetString (line 435) | public string GetString<T1, T2, T3, T4>(string key, T1 arg1, T2 arg2, ...
    method GetString (line 468) | public string GetString<T1, T2, T3, T4, T5>(string key, T1 arg1, T2 ar...
    method GetString (line 503) | public string GetString<T1, T2, T3, T4, T5, T6>(string key, T1 arg1, T...
    method GetString (line 540) | public string GetString<T1, T2, T3, T4, T5, T6, T7>(string key, T1 arg...
    method GetString (line 579) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8>(string key, T1...
    method GetString (line 620) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string key...
    method GetString (line 663) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(strin...
    method GetString (line 708) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(...
    method GetString (line 755) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method GetString (line 804) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method GetString (line 855) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method GetString (line 909) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method GetString (line 965) | public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ...
    method HasRawString (line 989) | public bool HasRawString(string key)
    method GetRawString (line 1004) | public string GetRawString(string key)
    method AddRawString (line 1026) | public bool AddRawString(string key, string value)
    method RemoveRawString (line 1047) | public bool RemoveRawString(string key)
    method RemoveAllRawStrings (line 1060) | public void RemoveAllRawStrings()

FILE: GameFramework/Network/AddressFamily.cs
  type AddressFamily (line 13) | public enum AddressFamily : byte

FILE: GameFramework/Network/INetworkChannel.cs
  type INetworkChannel (line 17) | public interface INetworkChannel
    method RegisterHandler (line 129) | void RegisterHandler(IPacketHandler handler);
    method SetDefaultHandler (line 135) | void SetDefaultHandler(EventHandler<Packet> handler);
    method Connect (line 142) | void Connect(IPAddress ipAddress, int port);
    method Connect (line 150) | void Connect(IPAddress ipAddress, int port, object userData);
    method Close (line 155) | void Close();
    method Send (line 162) | void Send<T>(T packet) where T : Packet;

FILE: GameFramework/Network/INetworkChannelHelper.cs
  type INetworkChannelHelper (line 15) | public interface INetworkChannelHelper
    method Initialize (line 29) | void Initialize(INetworkChannel networkChannel);
    method Shutdown (line 34) | void Shutdown();
    method PrepareForConnecting (line 39) | void PrepareForConnecting();
    method SendHeartBeat (line 45) | bool SendHeartBeat();
    method Serialize (line 54) | bool Serialize<T>(T packet, Stream destination) where T : Packet;
    method DeserializePacketHeader (line 62) | IPacketHeader DeserializePacketHeader(Stream source, out object custom...
    method DeserializePacket (line 71) | Packet DeserializePacket(IPacketHeader packetHeader, Stream source, ou...

FILE: GameFramework/Network/INetworkManager.cs
  type INetworkManager (line 16) | public interface INetworkManager
    method HasNetworkChannel (line 56) | bool HasNetworkChannel(string name);
    method GetNetworkChannel (line 63) | INetworkChannel GetNetworkChannel(string name);
    method GetAllNetworkChannels (line 69) | INetworkChannel[] GetAllNetworkChannels();
    method GetAllNetworkChannels (line 75) | void GetAllNetworkChannels(List<INetworkChannel> results);
    method CreateNetworkChannel (line 84) | INetworkChannel CreateNetworkChannel(string name, ServiceType serviceT...
    method DestroyNetworkChannel (line 91) | bool DestroyNetworkChannel(string name);

FILE: GameFramework/Network/IPacketHandler.cs
  type IPacketHandler (line 13) | public interface IPacketHandler
    method Handle (line 28) | void Handle(object sender, Packet packet);

FILE: GameFramework/Network/IPacketHeader.cs
  type IPacketHeader (line 13) | public interface IPacketHeader

FILE: GameFramework/Network/NetworkClosedEventArgs.cs
  class NetworkClosedEventArgs (line 13) | public sealed class NetworkClosedEventArgs : GameFrameworkEventArgs
    method NetworkClosedEventArgs (line 18) | public NetworkClosedEventArgs()
    method Create (line 37) | public static NetworkClosedEventArgs Create(INetworkChannel networkCha...
    method Clear (line 47) | public override void Clear()

FILE: GameFramework/Network/NetworkConnectedEventArgs.cs
  class NetworkConnectedEventArgs (line 13) | public sealed class NetworkConnectedEventArgs : GameFrameworkEventArgs
    method NetworkConnectedEventArgs (line 18) | public NetworkConnectedEventArgs()
    method Create (line 48) | public static NetworkConnectedEventArgs Create(INetworkChannel network...
    method Clear (line 59) | public override void Clear()

FILE: GameFramework/Network/NetworkCustomErrorEventArgs.cs
  class NetworkCustomErrorEventArgs (line 13) | public sealed class NetworkCustomErrorEventArgs : GameFrameworkEventArgs
    method NetworkCustomErrorEventArgs (line 18) | public NetworkCustomErrorEventArgs()
    method Create (line 48) | public static NetworkCustomErrorEventArgs Create(INetworkChannel netwo...
    method Clear (line 59) | public override void Clear()

FILE: GameFramework/Network/NetworkErrorCode.cs
  type NetworkErrorCode (line 13) | public enum NetworkErrorCode : byte

FILE: GameFramework/Network/NetworkErrorEventArgs.cs
  class NetworkErrorEventArgs (line 15) | public sealed class NetworkErrorEventArgs : GameFrameworkEventArgs
    method NetworkErrorEventArgs (line 20) | public NetworkErrorEventArgs()
    method Create (line 72) | public static NetworkErrorEventArgs Create(INetworkChannel networkChan...
    method Clear (line 85) | public override void Clear()

FILE: GameFramework/Network/NetworkManager.ConnectState.cs
  class NetworkManager (line 12) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class ConnectState (line 14) | private sealed class ConnectState
      method ConnectState (line 19) | public ConnectState(Socket socket, object userData)

FILE: GameFramework/Network/NetworkManager.HeartBeatState.cs
  class NetworkManager (line 10) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class HeartBeatState (line 12) | private sealed class HeartBeatState
      method HeartBeatState (line 17) | public HeartBeatState()
      method Reset (line 47) | public void Reset(bool resetHeartBeatElapseSeconds)

FILE: GameFramework/Network/NetworkManager.NetworkChannelBase.cs
  class NetworkManager (line 15) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class NetworkChannelBase (line 20) | private abstract class NetworkChannelBase : INetworkChannel, IDisposable
      method NetworkChannelBase (line 51) | public NetworkChannelBase(string name, INetworkChannelHelper network...
      method Update (line 236) | public virtual void Update(float elapseSeconds, float realElapseSeco...
      method Shutdown (line 286) | public virtual void Shutdown()
      method RegisterHandler (line 297) | public void RegisterHandler(IPacketHandler handler)
      method SetDefaultHandler (line 311) | public void SetDefaultHandler(EventHandler<Packet> handler)
      method Connect (line 321) | public void Connect(IPAddress ipAddress, int port)
      method Connect (line 332) | public virtual void Connect(IPAddress ipAddress, int port, object us...
      method Close (line 368) | public void Close()
      method Send (line 419) | public void Send<T>(T packet) where T : Packet
      method Dispose (line 466) | public void Dispose()
      method Dispose (line 476) | private void Dispose(bool disposing)
      method ProcessSend (line 493) | protected virtual bool ProcessSend()
      method ProcessReceive (line 543) | protected virtual void ProcessReceive()
      method ProcessPacketHeader (line 547) | protected virtual bool ProcessPacketHeader()
      method ProcessPacket (line 595) | protected virtual bool ProcessPacket()

FILE: GameFramework/Network/NetworkManager.ReceiveState.cs
  class NetworkManager (line 13) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class ReceiveState (line 15) | private sealed class ReceiveState : IDisposable
      method ReceiveState (line 22) | public ReceiveState()
      method PrepareForPacketHeader (line 45) | public void PrepareForPacketHeader(int packetHeaderLength)
      method PrepareForPacket (line 50) | public void PrepareForPacket(IPacketHeader packetHeader)
      method Dispose (line 60) | public void Dispose()
      method Dispose (line 66) | private void Dispose(bool disposing)
      method Reset (line 85) | private void Reset(int targetLength, IPacketHeader packetHeader)

FILE: GameFramework/Network/NetworkManager.SendState.cs
  class NetworkManager (line 13) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class SendState (line 15) | private sealed class SendState : IDisposable
      method SendState (line 21) | public SendState()
      method Reset (line 35) | public void Reset()
      method Dispose (line 41) | public void Dispose()
      method Dispose (line 47) | private void Dispose(bool disposing)

FILE: GameFramework/Network/NetworkManager.TcpNetworkChannel.cs
  class NetworkManager (line 14) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class TcpNetworkChannel (line 19) | private sealed class TcpNetworkChannel : NetworkChannelBase
      method TcpNetworkChannel (line 30) | public TcpNetworkChannel(string name, INetworkChannelHelper networkC...
      method Connect (line 55) | public override void Connect(IPAddress ipAddress, int port, object u...
      method ProcessSend (line 75) | protected override bool ProcessSend()
      method ConnectAsync (line 86) | private void ConnectAsync(IPAddress ipAddress, int port, object user...
      method ConnectCallback (line 105) | private void ConnectCallback(IAsyncResult ar)
      method SendAsync (line 153) | private void SendAsync()
      method SendCallback (line 173) | private void SendCallback(IAsyncResult ar)
      method ReceiveAsync (line 210) | private void ReceiveAsync()
      method ReceiveCallback (line 230) | private void ReceiveCallback(IAsyncResult ar)

FILE: GameFramework/Network/NetworkManager.TcpWithSyncReceiveNetworkChannel.cs
  class NetworkManager (line 14) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    class TcpWithSyncReceiveNetworkChannel (line 19) | private sealed class TcpWithSyncReceiveNetworkChannel : NetworkChannel...
      method TcpWithSyncReceiveNetworkChannel (line 29) | public TcpWithSyncReceiveNetworkChannel(string name, INetworkChannel...
      method Connect (line 53) | public override void Connect(IPAddress ipAddress, int port, object u...
      method ProcessSend (line 73) | protected override bool ProcessSend()
      method ProcessReceive (line 84) | protected override void ProcessReceive()
      method ConnectAsync (line 96) | private void ConnectAsync(IPAddress ipAddress, int port, object user...
      method ConnectCallback (line 115) | private void ConnectCallback(IAsyncResult ar)
      method SendAsync (line 162) | private void SendAsync()
      method SendCallback (line 182) | private void SendCallback(IAsyncResult ar)
      method ReceiveSync (line 219) | private bool ReceiveSync()

FILE: GameFramework/Network/NetworkManager.cs
  class NetworkManager (line 17) | internal sealed partial class NetworkManager : GameFrameworkModule, INet...
    method NetworkManager (line 30) | public NetworkManager()
    method Update (line 131) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 142) | internal override void Shutdown()
    method HasNetworkChannel (line 163) | public bool HasNetworkChannel(string name)
    method GetNetworkChannel (line 173) | public INetworkChannel GetNetworkChannel(string name)
    method GetAllNetworkChannels (line 188) | public INetworkChannel[] GetAllNetworkChannels()
    method GetAllNetworkChannels (line 204) | public void GetAllNetworkChannels(List<INetworkChannel> results)
    method CreateNetworkChannel (line 225) | public INetworkChannel CreateNetworkChannel(string name, ServiceType s...
    method DestroyNetworkChannel (line 271) | public bool DestroyNetworkChannel(string name)
    method OnNetworkChannelConnected (line 288) | private void OnNetworkChannelConnected(NetworkChannelBase networkChann...
    method OnNetworkChannelClosed (line 301) | private void OnNetworkChannelClosed(NetworkChannelBase networkChannel)
    method OnNetworkChannelMissHeartBeat (line 314) | private void OnNetworkChannelMissHeartBeat(NetworkChannelBase networkC...
    method OnNetworkChannelError (line 327) | private void OnNetworkChannelError(NetworkChannelBase networkChannel, ...
    method OnNetworkChannelCustomError (line 340) | private void OnNetworkChannelCustomError(NetworkChannelBase networkCha...

FILE: GameFramework/Network/NetworkMissHeartBeatEventArgs.cs
  class NetworkMissHeartBeatEventArgs (line 13) | public sealed class NetworkMissHeartBeatEventArgs : GameFrameworkEventArgs
    method NetworkMissHeartBeatEventArgs (line 18) | public NetworkMissHeartBeatEventArgs()
    method Create (line 48) | public static NetworkMissHeartBeatEventArgs Create(INetworkChannel net...
    method Clear (line 59) | public override void Clear()

FILE: GameFramework/Network/Packet.cs
  class Packet (line 13) | public abstract class Packet : BaseEventArgs

FILE: GameFramework/Network/ServiceType.cs
  type ServiceType (line 13) | public enum ServiceType : byte

FILE: GameFramework/ObjectPool/IObjectPool.cs
  type IObjectPool (line 16) | public interface IObjectPool<T> where T : ObjectBase
    method Register (line 107) | void Register(T obj, bool spawned);
    method CanSpawn (line 113) | bool CanSpawn();
    method CanSpawn (line 120) | bool CanSpawn(string name);
    method Spawn (line 126) | T Spawn();
    method Spawn (line 133) | T Spawn(string name);
    method Unspawn (line 139) | void Unspawn(T obj);
    method Unspawn (line 145) | void Unspawn(object target);
    method SetLocked (line 152) | void SetLocked(T obj, bool locked);
    method SetLocked (line 159) | void SetLocked(object target, bool locked);
    method SetPriority (line 166) | void SetPriority(T obj, int priority);
    method SetPriority (line 173) | void SetPriority(object target, int priority);
    method ReleaseObject (line 180) | bool ReleaseObject(T obj);
    method ReleaseObject (line 187) | bool ReleaseObject(object target);
    method Release (line 192) | void Release();
    method Release (line 198) | void Release(int toReleaseCount);
    method Release (line 204) | void Release(ReleaseObjectFilterCallback<T> releaseObjectFilterCallback);
    method Release (line 211) | void Release(int toReleaseCount, ReleaseObjectFilterCallback<T> releas...
    method ReleaseAllUnused (line 216) | void ReleaseAllUnused();

FILE: GameFramework/ObjectPool/IObjectPoolManager.cs
  type IObjectPoolManager (line 16) | public interface IObjectPoolManager
    method HasObjectPool (line 31) | bool HasObjectPool<T>() where T : ObjectBase;
    method HasObjectPool (line 38) | bool HasObjectPool(Type objectType);
    method HasObjectPool (line 46) | bool HasObjectPool<T>(string name) where T : ObjectBase;
    method HasObjectPool (line 54) | bool HasObjectPool(Type objectType, string name);
    method HasObjectPool (line 61) | bool HasObjectPool(Predicate<ObjectPoolBase> condition);
    method GetObjectPool (line 68) | IObjectPool<T> GetObjectPool<T>() where T : ObjectBase;
    method GetObjectPool (line 75) | ObjectPoolBase GetObjectPool(Type objectType);
    method GetObjectPool (line 83) | IObjectPool<T> GetObjectPool<T>(string name) where T : ObjectBase;
    method GetObjectPool (line 91) | ObjectPoolBase GetObjectPool(Type objectType, string name);
    method GetObjectPool (line 98) | ObjectPoolBase GetObjectPool(Predicate<ObjectPoolBase> condition);
    method GetObjectPools (line 105) | ObjectPoolBase[] GetObjectPools(Predicate<ObjectPoolBase> condition);
    method GetObjectPools (line 112) | void GetObjectPools(Predicate<ObjectPoolBase> condition, List<ObjectPo...
    method GetAllObjectPools (line 118) | ObjectPoolBase[] GetAllObjectPools();
    method GetAllObjectPools (line 124) | void GetAllObjectPools(List<ObjectPoolBase> results);
    method GetAllObjectPools (line 131) | ObjectPoolBase[] GetAllObjectPools(bool sort);
    method GetAllObjectPools (line 138) | void GetAllObjectPools(bool sort, List<ObjectPoolBase> results);
    method CreateSingleSpawnObjectPool (line 145) | IObjectPool<T> CreateSingleSpawnObjectPool<T>() where T : ObjectBase;
    method CreateSingleSpawnObjectPool (line 152) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType);
    method CreateSingleSpawnObjectPool (line 160) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name) where T : O...
    method CreateSingleSpawnObjectPool (line 168) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string name);
    method CreateSingleSpawnObjectPool (line 176) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity) where T : ...
    method CreateSingleSpawnObjectPool (line 184) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int capaci...
    method CreateSingleSpawnObjectPool (line 192) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(float expireTime) where ...
    method CreateSingleSpawnObjectPool (line 200) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, float expi...
    method CreateSingleSpawnObjectPool (line 209) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int capacit...
    method CreateSingleSpawnObjectPool (line 218) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateSingleSpawnObjectPool (line 227) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, float expir...
    method CreateSingleSpawnObjectPool (line 236) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateSingleSpawnObjectPool (line 245) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity, float expi...
    method CreateSingleSpawnObjectPool (line 254) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int capaci...
    method CreateSingleSpawnObjectPool (line 263) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity, int priori...
    method CreateSingleSpawnObjectPool (line 272) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int capaci...
    method CreateSingleSpawnObjectPool (line 281) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(float expireTime, int pr...
    method CreateSingleSpawnObjectPool (line 290) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, float expi...
    method CreateSingleSpawnObjectPool (line 300) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int capacit...
    method CreateSingleSpawnObjectPool (line 310) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateSingleSpawnObjectPool (line 320) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int capacit...
    method CreateSingleSpawnObjectPool (line 330) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateSingleSpawnObjectPool (line 340) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, float expir...
    method CreateSingleSpawnObjectPool (line 350) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateSingleSpawnObjectPool (line 360) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity, float expi...
    method CreateSingleSpawnObjectPool (line 370) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int capaci...
    method CreateSingleSpawnObjectPool (line 381) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int capacit...
    method CreateSingleSpawnObjectPool (line 392) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateSingleSpawnObjectPool (line 404) | IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, float autoR...
    method CreateSingleSpawnObjectPool (line 416) | ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, string nam...
    method CreateMultiSpawnObjectPool (line 423) | IObjectPool<T> CreateMultiSpawnObjectPool<T>() where T : ObjectBase;
    method CreateMultiSpawnObjectPool (line 430) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType);
    method CreateMultiSpawnObjectPool (line 438) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name) where T : Ob...
    method CreateMultiSpawnObjectPool (line 446) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name);
    method CreateMultiSpawnObjectPool (line 454) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity) where T : O...
    method CreateMultiSpawnObjectPool (line 462) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int capacity);
    method CreateMultiSpawnObjectPool (line 470) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(float expireTime) where T...
    method CreateMultiSpawnObjectPool (line 478) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, float expir...
    method CreateMultiSpawnObjectPool (line 487) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int capacity...
    method CreateMultiSpawnObjectPool (line 496) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method CreateMultiSpawnObjectPool (line 505) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, float expire...
    method CreateMultiSpawnObjectPool (line 514) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method CreateMultiSpawnObjectPool (line 523) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity, float expir...
    method CreateMultiSpawnObjectPool (line 532) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int capacit...
    method CreateMultiSpawnObjectPool (line 541) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity, int priorit...
    method CreateMultiSpawnObjectPool (line 550) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int capacit...
    method CreateMultiSpawnObjectPool (line 559) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(float expireTime, int pri...
    method CreateMultiSpawnObjectPool (line 568) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, float expir...
    method CreateMultiSpawnObjectPool (line 578) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int capacity...
    method CreateMultiSpawnObjectPool (line 588) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method CreateMultiSpawnObjectPool (line 598) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int capacity...
    method CreateMultiSpawnObjectPool (line 608) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method CreateMultiSpawnObjectPool (line 618) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, float expire...
    method CreateMultiSpawnObjectPool (line 628) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method CreateMultiSpawnObjectPool (line 638) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity, float expir...
    method CreateMultiSpawnObjectPool (line 648) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int capacit...
    method CreateMultiSpawnObjectPool (line 659) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int capacity...
    method CreateMultiSpawnObjectPool (line 670) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method CreateMultiSpawnObjectPool (line 682) | IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, float autoRe...
    method CreateMultiSpawnObjectPool (line 694) | ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, string name...
    method DestroyObjectPool (line 701) | bool DestroyObjectPool<T>() where T : ObjectBase;
    method DestroyObjectPool (line 708) | bool DestroyObjectPool(Type objectType);
    method DestroyObjectPool (line 716) | bool DestroyObjectPool<T>(string name) where T : ObjectBase;
    method DestroyObjectPool (line 724) | bool DestroyObjectPool(Type objectType, string name);
    method DestroyObjectPool (line 732) | bool DestroyObjectPool<T>(IObjectPool<T> objectPool) where T : ObjectB...
    method DestroyObjectPool (line 739) | bool DestroyObjectPool(ObjectPoolBase objectPool);
    method Release (line 744) | void Release();
    method ReleaseAllUnused (line 749) | void ReleaseAllUnused();

FILE: GameFramework/ObjectPool/ObjectBase.cs
  class ObjectBase (line 15) | public abstract class ObjectBase : IReference
    method ObjectBase (line 26) | public ObjectBase()
    method Initialize (line 117) | protected void Initialize(object target)
    method Initialize (line 127) | protected void Initialize(string name, object target)
    method Initialize (line 138) | protected void Initialize(string name, object target, bool locked)
    method Initialize (line 149) | protected void Initialize(string name, object target, int priority)
    method Initialize (line 161) | protected void Initialize(string name, object target, bool locked, int...
    method Clear (line 178) | public virtual void Clear()
    method OnSpawn (line 190) | protected internal virtual void OnSpawn()
    method OnUnspawn (line 197) | protected internal virtual void OnUnspawn()
    method Release (line 205) | protected internal abstract void Release(bool isShutdown);

FILE: GameFramework/ObjectPool/ObjectInfo.cs
  type ObjectInfo (line 16) | [StructLayout(LayoutKind.Auto)]
    method ObjectInfo (line 35) | public ObjectInfo(string name, bool locked, bool customCanReleaseFlag,...

FILE: GameFramework/ObjectPool/ObjectPoolBase.cs
  class ObjectPoolBase (line 15) | public abstract class ObjectPoolBase
    method ObjectPoolBase (line 22) | public ObjectPoolBase()
    method ObjectPoolBase (line 31) | public ObjectPoolBase(string name)
    method Release (line 129) | public abstract void Release();
    method Release (line 135) | public abstract void Release(int toReleaseCount);
    method ReleaseAllUnused (line 140) | public abstract void ReleaseAllUnused();
    method GetAllObjectInfos (line 146) | public abstract ObjectInfo[] GetAllObjectInfos();
    method Update (line 148) | internal abstract void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 150) | internal abstract void Shutdown();

FILE: GameFramework/ObjectPool/ObjectPoolManager.Object.cs
  class ObjectPoolManager (line 12) | internal sealed partial class ObjectPoolManager : GameFrameworkModule, I...
    class Object (line 18) | private sealed class Object<T> : IReference where T : ObjectBase
      method Object (line 26) | public Object()
      method Create (line 123) | public static Object<T> Create(T obj, bool spawned)
      method Clear (line 144) | public void Clear()
      method Peek (line 154) | public T Peek()
      method Spawn (line 163) | public T Spawn()
      method Unspawn (line 174) | public void Unspawn()
      method Release (line 189) | public void Release(bool isShutdown)

FILE: GameFramework/ObjectPool/ObjectPoolManager.ObjectPool.cs
  class ObjectPoolManager (line 13) | internal sealed partial class ObjectPoolManager : GameFrameworkModule, I...
    class ObjectPool (line 19) | private sealed class ObjectPool<T> : ObjectPoolBase, IObjectPool<T> wh...
      method ObjectPool (line 42) | public ObjectPool(string name, bool allowMultiSpawn, float autoRelea...
      method Register (line 191) | public void Register(T obj, bool spawned)
      method CanSpawn (line 212) | public bool CanSpawn()
      method CanSpawn (line 222) | public bool CanSpawn(string name)
      method Spawn (line 248) | public T Spawn()
      method Spawn (line 258) | public T Spawn(string name)
      method Unspawn (line 284) | public void Unspawn(T obj)
      method Unspawn (line 298) | public void Unspawn(object target)
      method SetLocked (line 325) | public void SetLocked(T obj, bool locked)
      method SetLocked (line 340) | public void SetLocked(object target, bool locked)
      method SetPriority (line 363) | public void SetPriority(T obj, int priority)
      method SetPriority (line 378) | public void SetPriority(object target, int priority)
      method ReleaseObject (line 401) | public bool ReleaseObject(T obj)
      method ReleaseObject (line 416) | public bool ReleaseObject(object target)
      method Release (line 445) | public override void Release()
      method Release (line 454) | public override void Release(int toReleaseCount)
      method Release (line 463) | public void Release(ReleaseObjectFilterCallback<T> releaseObjectFilt...
      method Release (line 473) | public void Release(int toReleaseCount, ReleaseObjectFilterCallback<...
      method ReleaseAllUnused (line 508) | public override void ReleaseAllUnused()
      method GetAllObjectInfos (line 522) | public override ObjectInfo[] GetAllObjectInfos()
      method Update (line 536) | internal override void Update(float elapseSeconds, float realElapseS...
      method Shutdown (line 547) | internal override void Shutdown()
      method GetObject (line 561) | private Object<T> GetObject(object target)
      method GetCanReleaseObjects (line 577) | private void GetCanReleaseObjects(List<T> results)
      method DefaultReleaseObjectFilterCallback (line 597) | private List<T> DefaultReleaseObjectFilterCallback(List<T> candidate...

FILE: GameFramework/ObjectPool/ObjectPoolManager.cs
  class ObjectPoolManager (line 16) | internal sealed partial class ObjectPoolManager : GameFrameworkModule, I...
    method ObjectPoolManager (line 29) | public ObjectPoolManager()
    method Update (line 64) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 75) | internal override void Shutdown()
    method HasObjectPool (line 91) | public bool HasObjectPool<T>() where T : ObjectBase
    method HasObjectPool (line 101) | public bool HasObjectPool(Type objectType)
    method HasObjectPool (line 122) | public bool HasObjectPool<T>(string name) where T : ObjectBase
    method HasObjectPool (line 133) | public bool HasObjectPool(Type objectType, string name)
    method HasObjectPool (line 153) | public bool HasObjectPool(Predicate<ObjectPoolBase> condition)
    method GetObjectPool (line 176) | public IObjectPool<T> GetObjectPool<T>() where T : ObjectBase
    method GetObjectPool (line 186) | public ObjectPoolBase GetObjectPool(Type objectType)
    method GetObjectPool (line 207) | public IObjectPool<T> GetObjectPool<T>(string name) where T : ObjectBase
    method GetObjectPool (line 218) | public ObjectPoolBase GetObjectPool(Type objectType, string name)
    method GetObjectPool (line 238) | public ObjectPoolBase GetObjectPool(Predicate<ObjectPoolBase> condition)
    method GetObjectPools (line 261) | public ObjectPoolBase[] GetObjectPools(Predicate<ObjectPoolBase> condi...
    method GetObjectPools (line 285) | public void GetObjectPools(Predicate<ObjectPoolBase> condition, List<O...
    method GetAllObjectPools (line 311) | public ObjectPoolBase[] GetAllObjectPools()
    method GetAllObjectPools (line 320) | public void GetAllObjectPools(List<ObjectPoolBase> results)
    method GetAllObjectPools (line 330) | public ObjectPoolBase[] GetAllObjectPools(bool sort)
    method GetAllObjectPools (line 361) | public void GetAllObjectPools(bool sort, List<ObjectPoolBase> results)
    method CreateSingleSpawnObjectPool (line 385) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>() where T : Objec...
    method CreateSingleSpawnObjectPool (line 395) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType)
    method CreateSingleSpawnObjectPool (line 406) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name) wher...
    method CreateSingleSpawnObjectPool (line 417) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 428) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity) whe...
    method CreateSingleSpawnObjectPool (line 439) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int...
    method CreateSingleSpawnObjectPool (line 450) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(float expireTime)...
    method CreateSingleSpawnObjectPool (line 461) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, flo...
    method CreateSingleSpawnObjectPool (line 473) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int ...
    method CreateSingleSpawnObjectPool (line 485) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 497) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, floa...
    method CreateSingleSpawnObjectPool (line 509) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 521) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity, flo...
    method CreateSingleSpawnObjectPool (line 533) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int...
    method CreateSingleSpawnObjectPool (line 545) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity, int...
    method CreateSingleSpawnObjectPool (line 557) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int...
    method CreateSingleSpawnObjectPool (line 569) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(float expireTime,...
    method CreateSingleSpawnObjectPool (line 581) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, flo...
    method CreateSingleSpawnObjectPool (line 594) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int ...
    method CreateSingleSpawnObjectPool (line 607) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 620) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int ...
    method CreateSingleSpawnObjectPool (line 633) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 646) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, floa...
    method CreateSingleSpawnObjectPool (line 659) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 672) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(int capacity, flo...
    method CreateSingleSpawnObjectPool (line 685) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, int...
    method CreateSingleSpawnObjectPool (line 699) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, int ...
    method CreateSingleSpawnObjectPool (line 713) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateSingleSpawnObjectPool (line 728) | public IObjectPool<T> CreateSingleSpawnObjectPool<T>(string name, floa...
    method CreateSingleSpawnObjectPool (line 743) | public ObjectPoolBase CreateSingleSpawnObjectPool(Type objectType, str...
    method CreateMultiSpawnObjectPool (line 753) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>() where T : Object...
    method CreateMultiSpawnObjectPool (line 763) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType)
    method CreateMultiSpawnObjectPool (line 774) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name) where...
    method CreateMultiSpawnObjectPool (line 785) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 796) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity) wher...
    method CreateMultiSpawnObjectPool (line 807) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int ...
    method CreateMultiSpawnObjectPool (line 818) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(float expireTime) ...
    method CreateMultiSpawnObjectPool (line 829) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, floa...
    method CreateMultiSpawnObjectPool (line 841) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int c...
    method CreateMultiSpawnObjectPool (line 853) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 865) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, float...
    method CreateMultiSpawnObjectPool (line 877) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 889) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity, floa...
    method CreateMultiSpawnObjectPool (line 901) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int ...
    method CreateMultiSpawnObjectPool (line 913) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity, int ...
    method CreateMultiSpawnObjectPool (line 925) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int ...
    method CreateMultiSpawnObjectPool (line 937) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(float expireTime, ...
    method CreateMultiSpawnObjectPool (line 949) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, floa...
    method CreateMultiSpawnObjectPool (line 962) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int c...
    method CreateMultiSpawnObjectPool (line 975) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 988) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int c...
    method CreateMultiSpawnObjectPool (line 1001) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 1014) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, float...
    method CreateMultiSpawnObjectPool (line 1027) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 1040) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(int capacity, floa...
    method CreateMultiSpawnObjectPool (line 1053) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, int ...
    method CreateMultiSpawnObjectPool (line 1067) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, int c...
    method CreateMultiSpawnObjectPool (line 1081) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method CreateMultiSpawnObjectPool (line 1096) | public IObjectPool<T> CreateMultiSpawnObjectPool<T>(string name, float...
    method CreateMultiSpawnObjectPool (line 1111) | public ObjectPoolBase CreateMultiSpawnObjectPool(Type objectType, stri...
    method DestroyObjectPool (line 1121) | public bool DestroyObjectPool<T>() where T : ObjectBase
    method DestroyObjectPool (line 1131) | public bool DestroyObjectPool(Type objectType)
    method DestroyObjectPool (line 1152) | public bool DestroyObjectPool<T>(string name) where T : ObjectBase
    method DestroyObjectPool (line 1163) | public bool DestroyObjectPool(Type objectType, string name)
    method DestroyObjectPool (line 1184) | public bool DestroyObjectPool<T>(IObjectPool<T> objectPool) where T : ...
    method DestroyObjectPool (line 1199) | public bool DestroyObjectPool(ObjectPoolBase objectPool)
    method Release (line 1212) | public void Release()
    method ReleaseAllUnused (line 1224) | public void ReleaseAllUnused()
    method InternalHasObjectPool (line 1233) | private bool InternalHasObjectPool(TypeNamePair typeNamePair)
    method InternalGetObjectPool (line 1238) | private ObjectPoolBase InternalGetObjectPool(TypeNamePair typeNamePair)
    method InternalCreateObjectPool (line 1249) | private IObjectPool<T> InternalCreateObjectPool<T>(string name, bool a...
    method InternalCreateObjectPool (line 1262) | private ObjectPoolBase InternalCreateObjectPool(Type objectType, strin...
    method InternalDestroyObjectPool (line 1286) | private bool InternalDestroyObjectPool(TypeNamePair typeNamePair)
    method ObjectPoolComparer (line 1298) | private static int ObjectPoolComparer(ObjectPoolBase a, ObjectPoolBase b)

FILE: GameFramework/Procedure/IProcedureManager.cs
  type IProcedureManager (line 16) | public interface IProcedureManager
    method Initialize (line 39) | void Initialize(IFsmManager fsmManager, params ProcedureBase[] procedu...
    method StartProcedure (line 45) | void StartProcedure<T>() where T : ProcedureBase;
    method StartProcedure (line 51) | void StartProcedure(Type procedureType);
    method HasProcedure (line 58) | bool HasProcedure<T>() where T : ProcedureBase;
    method HasProcedure (line 65) | bool HasProcedure(Type procedureType);
    method GetProcedure (line 72) | ProcedureBase GetProcedure<T>() where T : ProcedureBase;
    method GetProcedure (line 79) | ProcedureBase GetProcedure(Type procedureType);

FILE: GameFramework/Procedure/ProcedureBase.cs
  class ProcedureBase (line 16) | public abstract class ProcedureBase : FsmState<IProcedureManager>
    method OnInit (line 22) | protected internal override void OnInit(ProcedureOwner procedureOwner)
    method OnEnter (line 31) | protected internal override void OnEnter(ProcedureOwner procedureOwner)
    method OnUpdate (line 42) | protected internal override void OnUpdate(ProcedureOwner procedureOwne...
    method OnLeave (line 52) | protected internal override void OnLeave(ProcedureOwner procedureOwner...
    method OnDestroy (line 61) | protected internal override void OnDestroy(ProcedureOwner procedureOwner)

FILE: GameFramework/Procedure/ProcedureManager.cs
  class ProcedureManager (line 16) | internal sealed class ProcedureManager : GameFrameworkModule, IProcedure...
    method ProcedureManager (line 24) | public ProcedureManager()
    method Update (line 79) | internal override void Update(float elapseSeconds, float realElapseSec...
    method Shutdown (line 86) | internal override void Shutdown()
    method Initialize (line 105) | public void Initialize(IFsmManager fsmManager, params ProcedureBase[] ...
    method StartProcedure (line 120) | public void StartProcedure<T>() where T : ProcedureBase
    method StartProcedure (line 134) | public void StartProcedure(Type procedureType)
    method HasProcedure (line 149) | public bool HasProcedure<T>() where T : ProcedureBase
    method HasProcedure (line 164) | public bool HasProcedure(Type procedureType)
    method GetProcedure (line 179) | public ProcedureBase GetProcedure<T>() where T : ProcedureBase
    method GetProcedure (line 194) | public ProcedureBase GetProcedure(Type procedureType)

FILE: GameFramework/Resource/CheckVersionListResult.cs
  type CheckVersionListResult (line 13) | public enum CheckVersionListResult : byte

FILE: GameFramework/Resource/Constant.cs
  class Constant (line 13) | internal static class Constant

FILE: GameFramework/Resource/HasAssetResult.cs
  type HasAssetResult (line 13) | public enum HasAssetResult : byte

FILE: GameFramework/Resource/ILoadResourceAgentHelper.cs
  type ILoadResourceAgentHelper (line 16) | public interface ILoadResourceAgentHelper
    method ReadFile (line 52) | void ReadFile(string fullPath);
    method ReadFile (line 59) | void ReadFile(IFileSystem fileSystem, string name);
    method ReadBytes (line 65) | void ReadBytes(string fullPath);
    method ReadBytes (line 72) | void ReadBytes(IFileSystem fileSystem, string name);
    method ParseBytes (line 78) | void ParseBytes(byte[] bytes);
    method LoadAsset (line 87) | void LoadAsset(object resource, string assetName, Type assetType, bool...
    method Reset (line 92) | void Reset();

FILE: GameFramework/Resource/IResourceGroup.cs
  type IResourceGroup (line 15) | public interface IResourceGroup
    method GetResourceNames (line 93) | string[] GetResourceNames();
    method GetResourceNames (line 99) | void GetResourceNames(List<string> results);

FILE: GameFramework/Resource/IResourceGroupCollection.cs
  type IResourceGroupCollection (line 15) | public interface IResourceGroupCollection
    method GetResourceGroups (line 85) | IResourceGroup[] GetResourceGroups();
    method GetResourceNames (line 91) | string[] GetResourceNames();
    method GetResourceNames (line 97) | void GetResourceNames(List<string> results);

FILE: GameFramework/Resource/IResourceHelper.cs
  type IResourceHelper (line 13) | public interface IResourceHelper
    method LoadBytes (line 21) | void LoadBytes(string fileUri, LoadBytesCallbacks loadBytesCallbacks, ...
    method UnloadScene (line 29) | void UnloadScene(string sceneAssetName, UnloadSceneCallbacks unloadSce...
    method Release (line 35) | void Release(object objectToRelease);

FILE: GameFramework/Resource/IResourceManager.cs
  type IResourceManager (line 19) | public interface IResourceManager
    method SetReadOnlyPath (line 371) | void SetReadOnlyPath(string readOnlyPath);
    method SetReadWritePath (line 377) | void SetReadWritePath(string readWritePath);
    method SetResourceMode (line 383) | void SetResourceMode(ResourceMode resourceMode);
    method SetCurrentVariant (line 389) | void SetCurrentVariant(string currentVariant);
    method SetObjectPoolManager (line 395) | void SetObjectPoolManager(IObjectPoolManager objectPoolManager);
    method SetFileSystemManager (line 401) | void SetFileSystemManager(IFileSystemManager fileSystemManager);
    method SetDownloadManager (line 407) | void SetDownloadManager(IDownloadManager downloadManager);
    method SetDecryptResourceCallback (line 414) | void SetDecryptResourceCallback(DecryptResourceCallback decryptResourc...
    method SetResourceHelper (line 420) | void SetResourceHelper(IResourceHelper resourceHelper);
    method AddLoadResourceAgentHelper (line 426) | void AddLoadResourceAgentHelper(ILoadResourceAgentHelper loadResourceA...
    method InitResources (line 432) | void InitResources(InitResourcesCompleteCallback initResourcesComplete...
    method CheckVersionList (line 439) | CheckVersionListResult CheckVersionList(int latestInternalResourceVers...
    method UpdateVersionList (line 449) | void UpdateVersionList(int versionListLength, int versionListHashCode,...
    method VerifyResources (line 456) | void VerifyResources(int verifyResourceLengthPerFrame, VerifyResources...
    method CheckResources (line 463) | void CheckResources(bool ignoreOtherVariant, CheckResourcesCompleteCal...
    method ApplyResources (line 470) | void ApplyResources(string resourcePackPath, ApplyResourcesCompleteCal...
    method UpdateResources (line 476) | void UpdateResources(UpdateResourcesCompleteCallback updateResourcesCo...
    method UpdateResources (line 483) | void UpdateResources(string resourceGroupName, UpdateResourcesComplete...
    method StopUpdateResources (line 488) | void StopUpdateResources();
    method VerifyResourcePack (line 495) | bool VerifyResourcePack(string resourcePackPath);
    method GetAllLoadAssetInfos (line 501) | TaskInfo[] GetAllLoadAssetInfos();
    method GetAllLoadAssetInfos (line 507) | void GetAllLoadAssetInfos(List<TaskInfo> results);
    method HasAsset (line 514) | HasAssetResult HasAsset(string assetName);
    method LoadAsset (line 521) | void LoadAsset(string assetName, LoadAssetCallbacks loadAssetCallbacks);
    method LoadAsset (line 529) | void LoadAsset(string assetName, Type assetType, LoadAssetCallbacks lo...
    method LoadAsset (line 537) | void LoadAsset(string assetName, int priority, LoadAssetCallbacks load...
    method LoadAsset (line 545) | void LoadAsset(string assetName, LoadAssetCallbacks loadAssetCallbacks...
    method LoadAsset (line 554) | void LoadAsset(string assetName, Type assetType, int priority, LoadAss...
    method LoadAsset (line 563) | void LoadAsset(string assetName, Type assetType, LoadAssetCallbacks lo...
    method LoadAsset (line 572) | void LoadAsset(string assetName, int priority, LoadAssetCallbacks load...
    method LoadAsset (line 582) | void LoadAsset(string assetName, Type assetType, int priority, LoadAss...
    method UnloadAsset (line 588) | void UnloadAsset(object asset);
    method LoadScene (line 595) | void LoadScene(string sceneAssetName, LoadSceneCallbacks loadSceneCall...
    method LoadScene (line 603) | void LoadScene(string sceneAssetName, int priority, LoadSceneCallbacks...
    method LoadScene (line 611) | void LoadScene(string sceneAssetName, LoadSceneCallbacks loadSceneCall...
    method LoadScene (line 620) | void LoadScene(string sceneAssetName, int priority, LoadSceneCallbacks...
    method UnloadScene (line 627) | void UnloadScene(string sceneAssetName, UnloadSceneCallbacks unloadSce...
    method UnloadScene (line 635) | void UnloadScene(string sceneAssetName, UnloadSceneCallbacks unloadSce...
    method GetBinaryPath (line 643) | string GetBinaryPath(string binaryAssetName);
    method GetBinaryPath (line 654) | bool GetBinaryPath(string binaryAssetName, out bool storageInReadOnly,...
    method GetBinaryLength (line 661) | int GetBinaryLength(string binaryAssetName);
    method LoadBinary (line 668) | void LoadBinary(string binaryAssetName, LoadBinaryCallbacks loadBinary...
    method LoadBinary (line 676) | void LoadBinary(string binaryAssetName, LoadBinaryCallbacks loadBinary...
    method LoadBinaryFromFileSystem (line 683) | byte[] LoadBinaryFromFileSystem(string binaryAssetName);
    method LoadBinaryFromFileSystem (line 691) | int LoadBinaryFromFileSystem(string binaryAssetName, byte[] buffer);
    method LoadBinaryFromFileSystem (line 700) | int LoadBinaryFromFileSystem(string binaryAssetName, byte[] buffer, in...
    method LoadBinaryFromFileSystem (line 710) | int LoadBinaryFromFileSystem(string binaryAssetName, byte[] buffer, in...
    method LoadBinarySegmentFromFileSystem (line 718) | byte[] LoadBinarySegmentFromFileSystem(string binaryAssetName, int len...
    method LoadBinarySegmentFromFileSystem (line 727) | byte[] LoadBinarySegmentFromFileSystem(string binaryAssetName, int off...
    method LoadBinarySegmentFromFileSystem (line 735) | int LoadBinarySegmentFromFileSystem(string binaryAssetName, byte[] buf...
    method LoadBinarySegmentFromFileSystem (line 744) | int LoadBinarySegmentFromFileSystem(string binaryAssetName, byte[] buf...
    method LoadBinarySegmentFromFileSystem (line 754) | int LoadBinarySegmentFromFileSystem(string binaryAssetName, byte[] buf...
    method LoadBinarySegmentFromFileSystem (line 763) | int LoadBinarySegmentFromFileSystem(string binaryAssetName, int offset...
    method LoadBinarySegmentFromFileSystem (line 773) | int LoadBinarySegmentFromFileSystem(string binaryAssetName, int offset...
    method LoadBinarySegmentFromFileSystem (line 784) | int LoadBinarySegmentFromFileSystem(string binaryAssetName, int offset...
    method HasResourceGroup (line 791) | bool HasResourceGroup(string resourceGroupName);
    method GetResourceGroup (line 797) | IResourceGroup GetResourceGroup();
    method GetResourceGroup (line 804) | IResourceGroup GetResourceGroup(string resourceGroupName);
    method GetAllResourceGroups (line 810) | IResourceGroup[] GetAllResourceGroups();
    method GetAllResourceGroups (line 816) | void GetAllResourceGroups(List<IResourceGroup> results);
    method GetResourceGroupCollection (line 823) | IResourceGroupCollection GetResourceGroupCollection(params string[] re...
    method GetResourceGroupCollection (line 830) | IResourceGroupCollection GetResourceGroupCollection(List<string> resou...

FILE: GameFramework/Resource/LoadAssetCallbacks.cs
  class LoadAssetCallbacks (line 13) | public sealed class LoadAssetCallbacks
    method LoadAssetCallbacks (line 24) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...
    method LoadAssetCallbacks (line 34) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...
    method LoadAssetCallbacks (line 44) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...
    method LoadAssetCallbacks (line 54) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...
    method LoadAssetCallbacks (line 65) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...
    method LoadAssetCallbacks (line 76) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...
    method LoadAssetCallbacks (line 88) | public LoadAssetCallbacks(LoadAssetSuccessCallback loadAssetSuccessCal...

FILE: GameFramework/Resource/LoadBinaryCallbacks.cs
  class LoadBinaryCallbacks (line 13) | public sealed class LoadBinaryCallbacks
    method LoadBinaryCallbacks (line 22) | public LoadBinaryCallbacks(LoadBinarySuccessCallback loadBinarySuccess...
    method LoadBinaryCallbacks (line 32) | public LoadBinaryCallbacks(LoadBinarySuccessCallback loadBinarySuccess...

FILE: GameFramework/Resource/LoadBytesCallbacks.cs
  class LoadBytesCallbacks (line 13) | public sealed class LoadBytesCallbacks
    method LoadBytesCallbacks (line 22) | public LoadBytesCallbacks(LoadBytesSuccessCallback loadBinarySuccessCa...
    method LoadBytesCallbacks (line 32) | public LoadBytesCallbacks(LoadBytesSuccessCallback loadBytesSuccessCal...

FILE: GameFramework/Resource/LoadResourceAgentHelperErrorEventArgs.cs
  class LoadResourceAgentHelperErrorEventArgs (line 13) | public sealed class LoadResourceAgentHelperErrorEventArgs : GameFramewor...
    method LoadResourceAgentHelperErrorEventArgs (line 18) | public LoadResourceAgentHelperErrorEventArgs()
    method Create (line 48) | public static LoadResourceAgentHelperErrorEventArgs Create(LoadResourc...
    method Clear (line 59) | public override void Clear()

FILE: GameFramework/Resource/LoadResourceAgentHelperLoadCompleteEventArgs.cs
  class LoadResourceAgentHelperLoadCompleteEventArgs (line 13) | public sealed class LoadResourceAgentHelperLoadCompleteEventArgs : GameF...
    method LoadResourceAgentHelperLoadCompleteEventArgs (line 18) | public LoadResourceAgentHelperLoadCompleteEventArgs()
    method Create (line 37) | public static LoadResourceAgentHelperLoadCompleteEventArgs Create(obje...
    method Clear (line 47) | public override void Clear()

FILE: GameFramework/Resource/LoadResourceAgentHelperParseBytesCompleteEventArgs.cs
  class LoadResourceAgentHelperParseBytesCompleteEventArgs (line 13) | public sealed class LoadResourceAgentHelperParseBytesCompleteEventArgs :...
    method LoadResourceAgentHelperParseBytesCompleteEventArgs (line 18) | public LoadResourceAgentHelperParseBytesCompleteEventArgs()
    method Create (line 37) | public static LoadResourceAgentHelperParseBytesCompleteEventArgs Creat...
    method Clear (line 47) | public override void Clear()

FILE: GameFramework/Resource/LoadResourceAgentHelperReadBytesCompleteEventArgs.cs
  class LoadResourceAgentHelperReadBytesCompleteEventArgs (line 13) | public sealed class LoadResourceAgentHelperReadBytesCompleteEventArgs : ...
    method LoadResourceAgentHelperReadBytesCompleteEventArgs (line 20) | public LoadResourceAgentHelperReadBytesCompleteEventArgs()
    method Create (line 30) | public static LoadResourceAgentHelperReadBytesCompleteEventArgs Create...
    method Clear (line 40) | public override void Clear()
    method GetBytes (line 49) | public byte[] GetBytes()

FILE: GameFramework/Resource/LoadResourceAgentHelperReadFileCompleteEventArgs.cs
  class LoadResourceAgentHelperReadFileCompleteEventArgs (line 13) | public sealed class LoadResourceAgentHelperReadFileCompleteEventArgs : G...
    method LoadResourceAgentHelperReadFileCompleteEventArgs (line 18) | public LoadResourceAgentHelperReadFileCompleteEventArgs()
    method Create (line 37) | public static LoadResourceAgentHelperReadFileCompleteEventArgs Create(...
    method Clear (line 47) | public override void Clear()

FILE: GameFramework/Resource/LoadResourceAgentHelperUpdateEventArgs.cs
  class LoadResourceAgentHelperUpdateEventArgs (line 13) | public sealed class LoadResourceAgentHelperUpdateEventArgs : GameFramewo...
    method LoadResourceAgentHelperUpdateEventArgs (line 18) | public LoadResourceAgentHelperUpdateEventArgs()
    method Create (line 48) | public static LoadResourceAgentHelperUpdateEventArgs Create(LoadResour...
    method Clear (line 59) | public override void Clear()

FILE: GameFramework/Resource/LoadResourceProgress.cs
  type LoadResourceProgress (line 13) | public enum LoadResourceProgress : byte

FILE: GameFramework/Resource/LoadResourceStatus.cs
  type LoadResourceStatus (line 13) | public enum LoadResourceStatus : byte

FILE: GameFramework/Resource/LoadSceneCallbacks.cs
  class LoadSceneCallbacks (line 13) | public sealed class LoadSceneCallbacks
    method LoadSceneCallbacks (line 24) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...
    method LoadSceneCallbacks (line 34) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...
    method LoadSceneCallbacks (line 44) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...
    method LoadSceneCallbacks (line 54) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...
    method LoadSceneCallbacks (line 65) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...
    method LoadSceneCallbacks (line 76) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...
    method LoadSceneCallbacks (line 88) | public LoadSceneCallbacks(LoadSceneSuccessCallback loadSceneSuccessCal...

FILE: GameFramework/Resource/LocalVersionList.FileSystem.cs
  type LocalVersionList (line 12) | public partial struct LocalVersionList
    type FileSystem (line 17) | [StructLayout(LayoutKind.Auto)]
      method FileSystem (line 30) | public FileSystem(string name, int[] resourceIndexes)
      method GetResourceIndexes (line 56) | public int[] GetResourceIndexes()

FILE: GameFramework/Resource/LocalVersionList.Resource.cs
  type LocalVersionList (line 12) | public partial struct LocalVersionList
    type Resource (line 17) | [StructLayout(LayoutKind.Auto)]
      method Resource (line 36) | public Resource(string name, string variant, string extension, byte ...

FILE: GameFramework/Resource/LocalVersionList.cs
  type LocalVersionList (line 15) | [StructLayout(LayoutKind.Auto)]
    method LocalVersionList (line 30) | public LocalVersionList(Resource[] resources, FileSystem[] fileSystems)
    method GetResources (line 52) | public Resource[] GetResources()
    method GetFileSystems (line 66) | public FileSystem[] GetFileSystems()

FILE: GameFramework/Resource/PackageVersionList.Asset.cs
  type PackageVersionList (line 12) | public partial struct PackageVersionList
    type Asset (line 17) | [StructLayout(LayoutKind.Auto)]
      method Asset (line 30) | public Asset(string name, int[] dependencyAssetIndexes)
      method GetDependencyAssetIndexes (line 56) | public int[] GetDependencyAssetIndexes()

FILE: GameFramework/Resource/PackageVersionList.FileSystem.cs
  type PackageVersionList (line 12) | public partial struct PackageVersionList
    type FileSystem (line 17) | [StructLayout(LayoutKind.Auto)]
      method FileSystem (line 30) | public FileSystem(string name, int[] resourceIndexes)
      method GetResourceIndexes (line 56) | public int[] GetResourceIndexes()

FILE: GameFramework/Resource/PackageVersionList.Resource.cs
  type PackageVersionList (line 12) | public partial struct PackageVersionList
    type Resource (line 17) | [StructLayout(LayoutKind.Auto)]
      method Resource (line 40) | public Resource(string name, string variant, string extension, byte ...
      method GetAssetIndexes (line 126) | public int[] GetAssetIndexes()

FILE: GameFramework/Resource/PackageVersionList.ResourceGroup.cs
  type PackageVersionList (line 12) | public partial struct PackageVersionList
    type ResourceGroup (line 17) | [StructLayout(LayoutKind.Auto)]
      method ResourceGroup (line 30) | public ResourceGroup(string name, int[] resourceIndexes)
      method GetResourceIndexes (line 56) | public int[] GetResourceIndexes()

FILE: GameFramework/Resource/PackageVersionList.cs
  type PackageVersionList (line 15) | [StructLayout(LayoutKind.Auto)]
    method PackageVersionList (line 40) | public PackageVersionList(string applicableGameVersion, int internalRe...
    method GetAssets (line 98) | public Asset[] GetAssets()
    method GetResources (line 112) | public Resource[] GetResources()
    method GetFileSystems (line 126) | public FileSystem[] GetFileSystems()
    method GetResourceGroups (line 140) | public ResourceGroup[] GetResourceGroups()

FILE: GameFramework/Resource/PackageVersionListSerializer.cs
  class PackageVersionListSerializer (line 13) | public sealed class PackageVersionListSerializer : GameFrameworkSerializ...
    method PackageVersionListSerializer (line 20) | public PackageVersionListSerializer()
    method GetHeader (line 28) | protected override byte[] GetHeader()

FILE: GameFramework/Resource/ReadOnlyVersionListSerializer.cs
  class ReadOnlyVersionListSerializer (line 13) | public sealed class ReadOnlyVersionListSerializer : GameFrameworkSeriali...
    method ReadOnlyVersionListSerializer (line 20) | public ReadOnlyVersionListSerializer()
    method GetHeader (line 28) | protected override byte[] GetHeader()

FILE: GameFramework/Resource/ReadWriteVersionListSerializer.cs
  class ReadWriteVersionListSerializer (line 13) | public sealed class ReadWriteVersionListSerializer : GameFrameworkSerial...
    method ReadWriteVersionListSerializer (line 20) | public ReadWriteVersionListSerializer()
    method GetHeader (line 28) | protected override byte[] GetHeader()

FILE: GameFramework/Resource/ResourceApplyFailureEventArgs.cs
  class ResourceApplyFailureEventArgs (line 13) | public sealed class ResourceApplyFailureEventArgs : GameFrameworkEventArgs
    method ResourceApplyFailureEventArgs (line 18) | public ResourceApplyFailureEventArgs()
    method Create (line 59) | public static ResourceApplyFailureEventArgs Create(string name, string...
    method Clear (line 71) | public override void Clear()

FILE: GameFramework/Resource/ResourceApplyStartEventArgs.cs
  class ResourceApplyStartEventArgs (line 13) | public sealed class ResourceApplyStartEventArgs : GameFrameworkEventArgs
    method ResourceApplyStartEventArgs (line 18) | public ResourceApplyStartEventArgs()
    method Create (line 59) | public static ResourceApplyStartEventArgs Create(string resourcePackPa...
    method Clear (line 71) | public override void Clear()

FILE: GameFramework/Resource/ResourceApplySuccessEventArgs.cs
  class ResourceApplySuccessEventArgs (line 13) | public sealed class ResourceApplySuccessEventArgs : GameFrameworkEventArgs
    method ResourceApplySuccessEventArgs (line 18) | public ResourceApplySuccessEventArgs()
    method Create (line 81) | public static ResourceApplySuccessEventArgs Create(string name, string...
    method Clear (line 95) | public override void Clear()

FILE: GameFramework/Resource/ResourceManager.AssetInfo.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class AssetInfo (line 15) | private sealed class AssetInfo
      method AssetInfo (line 27) | public AssetInfo(string assetName, ResourceName resourceName, string...
      method GetDependencyAssetNames (line 60) | public string[] GetDependencyAssetNames()

FILE: GameFramework/Resource/ResourceManager.LoadType.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    type LoadType (line 15) | private enum LoadType : byte

FILE: GameFramework/Resource/ResourceManager.ReadWriteResourceInfo.cs
  class ResourceManager (line 12) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    type ReadWriteResourceInfo (line 14) | [StructLayout(LayoutKind.Auto)]
      method ReadWriteResourceInfo (line 22) | public ReadWriteResourceInfo(string fileSystemName, LoadType loadTyp...

FILE: GameFramework/Resource/ResourceManager.ResourceChecker.CheckInfo.CheckStatus.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceChecker (line 12) | private sealed partial class ResourceChecker
      class CheckInfo (line 14) | private sealed partial class CheckInfo
        type CheckStatus (line 19) | public enum CheckStatus : byte

FILE: GameFramework/Resource/ResourceManager.ResourceChecker.CheckInfo.LocalVersionInfo.cs
  class ResourceManager (line 12) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceChecker (line 14) | private sealed partial class ResourceChecker
      class CheckInfo (line 16) | private sealed partial class CheckInfo
        type LocalVersionInfo (line 21) | [StructLayout(LayoutKind.Auto)]
          method LocalVersionInfo (line 30) | public LocalVersionInfo(string fileSystemName, LoadType loadType...

FILE: GameFramework/Resource/ResourceManager.ResourceChecker.CheckInfo.RemoteVersionInfo.cs
  class ResourceManager (line 12) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceChecker (line 14) | private sealed partial class ResourceChecker
      class CheckInfo (line 16) | private sealed partial class CheckInfo
        type RemoteVersionInfo (line 21) | [StructLayout(LayoutKind.Auto)]
          method RemoteVersionInfo (line 32) | public RemoteVersionInfo(string fileSystemName, LoadType loadTyp...

FILE: GameFramework/Resource/ResourceManager.ResourceChecker.CheckInfo.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceChecker (line 12) | private sealed partial class ResourceChecker
      class CheckInfo (line 17) | private sealed partial class CheckInfo
        method CheckInfo (line 33) | public CheckInfo(ResourceName resourceName)
        method SetCachedFileSystemName (line 193) | public void SetCachedFileSystemName(string fileSystemName)
        method SetVersionInfo (line 206) | public void SetVersionInfo(LoadType loadType, int length, int hash...
        method SetReadOnlyInfo (line 223) | public void SetReadOnlyInfo(LoadType loadType, int length, int has...
        method SetReadWriteInfo (line 240) | public void SetReadWriteInfo(LoadType loadType, int length, int ha...
        method RefreshStatus (line 256) | public void RefreshStatus(string currentVariant, bool ignoreOtherV...

FILE: GameFramework/Resource/ResourceManager.ResourceChecker.cs
  class ResourceManager (line 15) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceChecker (line 20) | private sealed partial class ResourceChecker
      method ResourceChecker (line 37) | public ResourceChecker(ResourceManager resourceManager)
      method Shutdown (line 54) | public void Shutdown()
      method CheckResources (line 64) | public void CheckResources(string currentVariant, bool ignoreOtherVa...
      method SetCachedFileSystemName (line 88) | private void SetCachedFileSystemName(ResourceName resourceName, stri...
      method SetVersionInfo (line 93) | private void SetVersionInfo(ResourceName resourceName, LoadType load...
      method SetReadOnlyInfo (line 98) | private void SetReadOnlyInfo(ResourceName resourceName, LoadType loa...
      method SetReadWriteInfo (line 103) | private void SetReadWriteInfo(ResourceName resourceName, LoadType lo...
      method GetOrAddCheckInfo (line 108) | private CheckInfo GetOrAddCheckInfo(ResourceName resourceName)
      method RefreshCheckInfoStatus (line 122) | private void RefreshCheckInfoStatus()
      method RemoveEmptyFileSystems (line 229) | private void RemoveEmptyFileSystems()
      method OnLoadUpdatableVersionListSuccess (line 255) | private void OnLoadUpdatableVersionListSuccess(string fileUri, byte[...
      method OnLoadUpdatableVersionListFailure (line 363) | private void OnLoadUpdatableVersionListFailure(string fileUri, strin...
      method OnLoadReadOnlyVersionListSuccess (line 368) | private void OnLoadReadOnlyVersionListSuccess(string fileUri, byte[]...
      method OnLoadReadOnlyVersionListFailure (line 425) | private void OnLoadReadOnlyVersionListFailure(string fileUri, string...
      method OnLoadReadWriteVersionListSuccess (line 436) | private void OnLoadReadWriteVersionListSuccess(string fileUri, byte[...
      method OnLoadReadWriteVersionListFailure (line 493) | private void OnLoadReadWriteVersionListFailure(string fileUri, strin...

FILE: GameFramework/Resource/ResourceManager.ResourceGroup.cs
  class ResourceManager (line 12) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceGroup (line 17) | private sealed class ResourceGroup : IResourceGroup
      method ResourceGroup (line 30) | public ResourceGroup(string name, Dictionary<ResourceName, ResourceI...
      method GetResourceNames (line 180) | public string[] GetResourceNames()
      method GetResourceNames (line 196) | public void GetResourceNames(List<string> results)
      method InternalGetResourceNames (line 214) | public ResourceName[] InternalGetResourceNames()
      method InternalGetResourceNames (line 230) | public void InternalGetResourceNames(List<ResourceName> results)
      method HasResource (line 249) | public bool HasResource(ResourceName resourceName)
      method AddResource (line 260) | public void AddResource(ResourceName resourceName, int length, int c...

FILE: GameFramework/Resource/ResourceManager.ResourceGroupCollection.cs
  class ResourceManager (line 12) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceGroupCollection (line 17) | private sealed class ResourceGroupCollection : IResourceGroupCollection
      method ResourceGroupCollection (line 30) | public ResourceGroupCollection(ResourceGroup[] resourceGroups, Dicti...
      method GetResourceGroups (line 213) | public IResourceGroup[] GetResourceGroups()
      method GetResourceNames (line 222) | public string[] GetResourceNames()
      method GetResourceNames (line 238) | public void GetResourceNames(List<string> results)

FILE: GameFramework/Resource/ResourceManager.ResourceInfo.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceInfo (line 15) | private sealed class ResourceInfo
      method ResourceInfo (line 37) | public ResourceInfo(ResourceName resourceName, string fileSystemName...
      method MarkReady (line 162) | public void MarkReady()

FILE: GameFramework/Resource/ResourceManager.ResourceIniter.cs
  class ResourceManager (line 14) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceIniter (line 19) | private sealed class ResourceIniter
      method ResourceIniter (line 31) | public ResourceIniter(ResourceManager resourceManager)
      method Shutdown (line 43) | public void Shutdown()
      method InitResources (line 50) | public void InitResources(string currentVariant)
      method OnLoadPackageVersionListSuccess (line 67) | private void OnLoadPackageVersionListSuccess(string fileUri, byte[] ...
      method OnLoadPackageVersionListFailure (line 175) | private void OnLoadPackageVersionListFailure(string fileUri, string ...

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.AssetObject.cs
  class ResourceManager (line 13) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 15) | private sealed partial class ResourceLoader
      class AssetObject (line 20) | private sealed class AssetObject : ObjectBase
        method AssetObject (line 27) | public AssetObject()
        method Create (line 45) | public static AssetObject Create(string name, object target, List<...
        method Clear (line 90) | public override void Clear()
        method OnUnspawn (line 99) | protected internal override void OnUnspawn()
        method Release (line 108) | protected internal override void Release(bool isShutdown)

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.LoadAssetTask.cs
  class ResourceManager (line 12) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 14) | private sealed partial class ResourceLoader
      class LoadAssetTask (line 16) | private sealed class LoadAssetTask : LoadResourceTaskBase
        method LoadAssetTask (line 20) | public LoadAssetTask()
        method Create (line 33) | public static LoadAssetTask Create(string assetName, Type assetTyp...
        method Clear (line 41) | public override void Clear()
        method OnLoadAssetSuccess (line 47) | public override void OnLoadAssetSuccess(LoadResourceAgent agent, o...
        method OnLoadAssetFailure (line 56) | public override void OnLoadAssetFailure(LoadResourceAgent agent, L...
        method OnLoadAssetUpdate (line 65) | public override void OnLoadAssetUpdate(LoadResourceAgent agent, Lo...
        method OnLoadDependencyAsset (line 77) | public override void OnLoadDependencyAsset(LoadResourceAgent agent...

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.LoadBinaryInfo.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 12) | private sealed partial class ResourceLoader
      class LoadBinaryInfo (line 14) | private sealed class LoadBinaryInfo : IReference
        method LoadBinaryInfo (line 21) | public LoadBinaryInfo()
        method Create (line 61) | public static LoadBinaryInfo Create(string binaryAssetName, Resour...
        method Clear (line 71) | public void Clear()

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.LoadDependencyAssetTask.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 12) | private sealed partial class ResourceLoader
      class LoadDependencyAssetTask (line 14) | private sealed class LoadDependencyAssetTask : LoadResourceTaskBase
        method LoadDependencyAssetTask (line 18) | public LoadDependencyAssetTask()
        method Create (line 31) | public static LoadDependencyAssetTask Create(string assetName, int...
        method Clear (line 40) | public override void Clear()
        method OnLoadAssetSuccess (line 46) | public override void OnLoadAssetSuccess(LoadResourceAgent agent, o...
        method OnLoadAssetFailure (line 52) | public override void OnLoadAssetFailure(LoadResourceAgent agent, L...

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.LoadResourceAgent.cs
  class ResourceManager (line 15) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 17) | private sealed partial class ResourceLoader
      class LoadResourceAgent (line 22) | private sealed partial class LoadResourceAgent : ITaskAgent<LoadReso...
        method LoadResourceAgent (line 45) | public LoadResourceAgent(ILoadResourceAgentHelper loadResourceAgen...
        method Initialize (line 98) | public void Initialize()
        method Update (line 113) | public void Update(float elapseSeconds, float realElapseSeconds)
        method Shutdown (line 120) | public void Shutdown()
        method Clear (line 131) | public static void Clear()
        method Start (line 143) | public StartTaskStatus Start(LoadResourceTaskBase task)
        method Reset (line 245) | public void Reset()
        method IsAssetLoading (line 251) | private static bool IsAssetLoading(string assetName)
        method IsResourceLoading (line 256) | private static bool IsResourceLoading(string resourceName)
        method OnAssetObjectReady (line 261) | private void OnAssetObjectReady(AssetObject assetObject)
        method OnResourceObjectReady (line 275) | private void OnResourceObjectReady(ResourceObject resourceObject)
        method OnError (line 280) | private void OnError(LoadResourceStatus status, string errorMessage)
        method OnLoadResourceAgentHelperUpdate (line 289) | private void OnLoadResourceAgentHelperUpdate(object sender, LoadRe...
        method OnLoadResourceAgentHelperReadFileComplete (line 294) | private void OnLoadResourceAgentHelperReadFileComplete(object send...
        method OnLoadResourceAgentHelperReadBytesComplete (line 302) | private void OnLoadResourceAgentHelperReadBytesComplete(object sen...
        method OnLoadResourceAgentHelperParseBytesComplete (line 314) | private void OnLoadResourceAgentHelperParseBytesComplete(object se...
        method OnLoadResourceAgentHelperLoadComplete (line 322) | private void OnLoadResourceAgentHelperLoadComplete(object sender, ...
        method OnLoadResourceAgentHelperError (line 354) | private void OnLoadResourceAgentHelperError(object sender, LoadRes...

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.LoadResourceTaskBase.cs
  class ResourceManager (line 13) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 15) | private sealed partial class ResourceLoader
      class LoadResourceTaskBase (line 17) | private abstract class LoadResourceTaskBase : TaskBase
        method LoadResourceTaskBase (line 30) | public LoadResourceTaskBase()
        method Clear (line 119) | public override void Clear()
        method GetDependencyAssetNames (line 132) | public string[] GetDependencyAssetNames()
        method GetDependencyAssets (line 137) | public List<object> GetDependencyAssets()
        method LoadMain (line 142) | public void LoadMain(LoadResourceAgent agent, ResourceObject resou...
        method OnLoadAssetSuccess (line 148) | public virtual void OnLoadAssetSuccess(LoadResourceAgent agent, ob...
        method OnLoadAssetFailure (line 152) | public virtual void OnLoadAssetFailure(LoadResourceAgent agent, Lo...
        method OnLoadAssetUpdate (line 156) | public virtual void OnLoadAssetUpdate(LoadResourceAgent agent, Loa...
        method OnLoadDependencyAsset (line 160) | public virtual void OnLoadDependencyAsset(LoadResourceAgent agent,...
        method Initialize (line 165) | protected void Initialize(string assetName, Type assetType, int pr...

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.LoadSceneTask.cs
  class ResourceManager (line 10) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 12) | private sealed partial class ResourceLoader
      class LoadSceneTask (line 14) | private sealed class LoadSceneTask : LoadResourceTaskBase
        method LoadSceneTask (line 18) | public LoadSceneTask()
        method Create (line 31) | public static LoadSceneTask Create(string sceneAssetName, int prio...
        method Clear (line 39) | public override void Clear()
        method OnLoadAssetSuccess (line 45) | public override void OnLoadAssetSuccess(LoadResourceAgent agent, o...
        method OnLoadAssetFailure (line 54) | public override void OnLoadAssetFailure(LoadResourceAgent agent, L...
        method OnLoadAssetUpdate (line 63) | public override void OnLoadAssetUpdate(LoadResourceAgent agent, Lo...
        method OnLoadDependencyAsset (line 75) | public override void OnLoadDependencyAsset(LoadResourceAgent agent...

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.ResourceObject.cs
  class ResourceManager (line 13) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 15) | private sealed partial class ResourceLoader
      class ResourceObject (line 20) | private sealed class ResourceObject : ObjectBase
        method ResourceObject (line 26) | public ResourceObject()
        method Create (line 43) | public static ResourceObject Create(string name, object target, IR...
        method Clear (line 62) | public override void Clear()
        method AddDependencyResource (line 70) | public void AddDependencyResource(object dependencyResource)
        method Release (line 95) | protected internal override void Release(bool isShutdown)

FILE: GameFramework/Resource/ResourceManager.ResourceLoader.cs
  class ResourceManager (line 16) | internal sealed partial class ResourceManager : GameFrameworkModule, IRe...
    class ResourceLoader (line 21) | private sealed partial class ResourceLoader
      method ResourceLoader (line 40) | public ResourceLoader(ResourceManager resourceManager)
      method Update (line 223) | public void Update(float elapseSeconds, float realElapseSeconds)
      method Shutdown (line 231) | public voi
Condensed preview — 335 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,132K chars).
[
  {
    "path": ".gitignore",
    "chars": 3138,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": "GameFramework/Base/DataProvider/DataProvider.cs",
    "chars": 18720,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/DataProviderCreator.cs",
    "chars": 2509,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/IDataProvider.cs",
    "chars": 3695,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/IDataProviderHelper.cs",
    "chars": 2523,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/ReadDataDependencyAssetEventArgs.cs",
    "chars": 3062,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/ReadDataFailureEventArgs.cs",
    "chars": 2161,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/ReadDataSuccessEventArgs.cs",
    "chars": 2131,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataProvider/ReadDataUpdateEventArgs.cs",
    "chars": 2121,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/DataStruct/TypeNamePair.cs",
    "chars": 3564,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/EventPool/BaseEventArgs.cs",
    "chars": 574,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/EventPool/EventPool.Event.cs",
    "chars": 1441,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/EventPool/EventPool.cs",
    "chars": 9113,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/EventPool/EventPoolMode.cs",
    "chars": 857,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkAction.cs",
    "chars": 19733,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkEntry.cs",
    "chars": 4600,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkEventArgs.cs",
    "chars": 717,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkException.cs",
    "chars": 1642,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkFunc.cs",
    "chars": 22011,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkLinkedList.cs",
    "chars": 12032,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkLinkedListRange.cs",
    "chars": 5777,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkModule.cs",
    "chars": 1079,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkMultiDictionary.cs",
    "chars": 9065,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/GameFrameworkSerializer.cs",
    "chars": 7454,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Log/GameFrameworkLog.ILogHelper.cs",
    "chars": 748,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Log/GameFrameworkLog.cs",
    "chars": 120050,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Log/GameFrameworkLogLevel.cs",
    "chars": 815,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/ReferencePool/IReference.cs",
    "chars": 493,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/ReferencePool/ReferencePool.ReferenceCollection.cs",
    "chars": 5789,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/ReferencePool/ReferencePool.cs",
    "chars": 7297,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/ReferencePool/ReferencePoolInfo.cs",
    "chars": 3448,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/TaskPool/ITaskAgent.cs",
    "chars": 1336,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/TaskPool/StartTaskStatus.cs",
    "chars": 793,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/TaskPool/TaskBase.cs",
    "chars": 3033,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/TaskPool/TaskInfo.cs",
    "chars": 3754,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/TaskPool/TaskPool.cs",
    "chars": 14214,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/TaskPool/TaskStatus.cs",
    "chars": 643,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Variable/GenericVariable.cs",
    "chars": 1920,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Variable/Variable.cs",
    "chars": 1098,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Version/Version.IVersionHelper.cs",
    "chars": 816,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Base/Version/Version.cs",
    "chars": 1750,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Config/ConfigManager.ConfigData.cs",
    "chars": 1680,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Config/ConfigManager.cs",
    "chars": 15370,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Config/IConfigHelper.cs",
    "chars": 423,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Config/IConfigManager.cs",
    "chars": 5044,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataNode/DataNodeManager.DataNode.cs",
    "chars": 10789,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataNode/DataNodeManager.cs",
    "chars": 8475,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataNode/IDataNode.cs",
    "chars": 3776,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataNode/IDataNodeManager.cs",
    "chars": 4271,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/DataTableBase.cs",
    "chars": 8995,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/DataTableManager.DataTable.cs",
    "chars": 16604,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/DataTableManager.cs",
    "chars": 16575,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/IDataRow.cs",
    "chars": 1255,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/IDataTable.cs",
    "chars": 5241,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/IDataTableHelper.cs",
    "chars": 428,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/DataTable/IDataTableManager.cs",
    "chars": 6427,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Debugger/DebuggerManager.DebuggerWindowGroup.cs",
    "chars": 10543,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Debugger/DebuggerManager.cs",
    "chars": 3957,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Debugger/IDebuggerManager.cs",
    "chars": 1698,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Debugger/IDebuggerWindow.cs",
    "chars": 1218,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Debugger/IDebuggerWindowGroup.cs",
    "chars": 1479,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/Constant.cs",
    "chars": 538,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadAgentHelperCompleteEventArgs.cs",
    "chars": 1640,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadAgentHelperErrorEventArgs.cs",
    "chars": 1959,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadAgentHelperUpdateBytesEventArgs.cs",
    "chars": 2696,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadAgentHelperUpdateLengthEventArgs.cs",
    "chars": 1738,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadFailureEventArgs.cs",
    "chars": 2856,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadManager.DownloadAgent.cs",
    "chars": 12683,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadManager.DownloadCounter.DownloadCounterNode.cs",
    "chars": 1880,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadManager.DownloadCounter.cs",
    "chars": 5516,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadManager.DownloadTask.cs",
    "chars": 4234,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadManager.DownloadTaskStatus.cs",
    "chars": 936,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadManager.cs",
    "chars": 15580,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadStartEventArgs.cs",
    "chars": 2831,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadSuccessEventArgs.cs",
    "chars": 2855,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/DownloadUpdateEventArgs.cs",
    "chars": 2843,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/IDownloadAgentHelper.cs",
    "chars": 2162,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Download/IDownloadManager.cs",
    "chars": 7028,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/EntityManager.EntityGroup.cs",
    "chars": 12814,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/EntityManager.EntityInfo.cs",
    "chars": 3870,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/EntityManager.EntityInstanceObject.cs",
    "chars": 2030,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/EntityManager.EntityStatus.cs",
    "chars": 739,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/EntityManager.ShowEntityInfo.cs",
    "chars": 2191,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/EntityManager.cs",
    "chars": 46626,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/HideEntityCompleteEventArgs.cs",
    "chars": 2557,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/IEntity.cs",
    "chars": 3076,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/IEntityGroup.cs",
    "chars": 3654,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/IEntityGroupHelper.cs",
    "chars": 427,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/IEntityHelper.cs",
    "chars": 1244,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/IEntityManager.cs",
    "chars": 14602,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/ShowEntityDependencyAssetEventArgs.cs",
    "chars": 3848,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/ShowEntityFailureEventArgs.cs",
    "chars": 2927,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/ShowEntitySuccessEventArgs.cs",
    "chars": 2113,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Entity/ShowEntityUpdateEventArgs.cs",
    "chars": 2885,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Event/EventManager.cs",
    "chars": 4137,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Event/GameEventArgs.cs",
    "chars": 442,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Event/IEventManager.cs",
    "chars": 2323,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/CommonFileSystemStream.cs",
    "chars": 4848,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileInfo.cs",
    "chars": 2209,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystem.BlockData.cs",
    "chars": 1978,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystem.HeaderData.cs",
    "chars": 3442,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystem.StringData.cs",
    "chars": 2279,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystem.cs",
    "chars": 46091,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystemAccess.cs",
    "chars": 793,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystemManager.cs",
    "chars": 9202,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/FileSystemStream.cs",
    "chars": 4243,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/IFileSystem.cs",
    "chars": 9170,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/IFileSystemHelper.cs",
    "chars": 816,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/FileSystem/IFileSystemManager.cs",
    "chars": 2594,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Fsm/Fsm.cs",
    "chars": 16962,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Fsm/FsmBase.cs",
    "chars": 2457,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Fsm/FsmManager.cs",
    "chars": 12388,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Fsm/FsmState.cs",
    "chars": 3250,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Fsm/IFsm.cs",
    "chars": 4619,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Fsm/IFsmManager.cs",
    "chars": 5763,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/GameFramework.csproj",
    "chars": 22477,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "GameFramework/Localization/ILocalizationHelper.cs",
    "chars": 568,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Localization/ILocalizationManager.cs",
    "chars": 22420,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Localization/Language.cs",
    "chars": 4641,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Localization/LocalizationManager.cs",
    "chars": 41180,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/AddressFamily.cs",
    "chars": 666,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/INetworkChannel.cs",
    "chars": 3545,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/INetworkChannelHelper.cs",
    "chars": 2140,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/INetworkManager.cs",
    "chars": 2670,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/IPacketHandler.cs",
    "chars": 767,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/IPacketHeader.cs",
    "chars": 553,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkClosedEventArgs.cs",
    "chars": 1458,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkConnectedEventArgs.cs",
    "chars": 1830,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkCustomErrorEventArgs.cs",
    "chars": 1916,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkErrorCode.cs",
    "chars": 1244,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkErrorEventArgs.cs",
    "chars": 2676,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.ConnectState.cs",
    "chars": 1085,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.HeartBeatState.cs",
    "chars": 1587,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.NetworkChannelBase.cs",
    "chars": 21439,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.ReceiveState.cs",
    "chars": 2721,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.SendState.cs",
    "chars": 1719,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.TcpNetworkChannel.cs",
    "chars": 10219,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.TcpWithSyncReceiveNetworkChannel.cs",
    "chars": 9453,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkManager.cs",
    "chars": 12848,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/NetworkMissHeartBeatEventArgs.cs",
    "chars": 1868,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/Packet.cs",
    "chars": 436,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Network/ServiceType.cs",
    "chars": 608,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/IObjectPool.cs",
    "chars": 5178,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/IObjectPoolManager.cs",
    "chars": 29589,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ObjectBase.cs",
    "chars": 5036,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ObjectInfo.cs",
    "chars": 2962,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ObjectPoolBase.cs",
    "chars": 3281,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ObjectPoolManager.Object.cs",
    "chars": 5176,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ObjectPoolManager.ObjectPool.cs",
    "chars": 21645,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ObjectPoolManager.cs",
    "chars": 51355,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/ObjectPool/ReleaseObjectFilterCallback.cs",
    "chars": 827,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Procedure/IProcedureManager.cs",
    "chars": 2226,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Procedure/ProcedureBase.cs",
    "chars": 2196,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Procedure/ProcedureManager.cs",
    "chars": 5787,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Properties/AssemblyInfo.cs",
    "chars": 1246,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/ApplyResourcesCompleteCallback.cs",
    "chars": 613,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/CheckResourcesCompleteCallback.cs",
    "chars": 840,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/CheckVersionListResult.cs",
    "chars": 606,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/Constant.cs",
    "chars": 538,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/DecryptResourceCallback.cs",
    "chars": 1122,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/HasAssetResult.cs",
    "chars": 993,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/ILoadResourceAgentHelper.cs",
    "chars": 3137,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/IResourceGroup.cs",
    "chars": 2016,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/IResourceGroupCollection.cs",
    "chars": 2090,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/IResourceHelper.cs",
    "chars": 1275,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/IResourceManager.cs",
    "chars": 26534,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/InitResourcesCompleteCallback.cs",
    "chars": 447,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadAssetCallbacks.cs",
    "chars": 5841,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadAssetDependencyAssetCallback.cs",
    "chars": 807,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadAssetFailureCallback.cs",
    "chars": 705,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadAssetSuccessCallback.cs",
    "chars": 684,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadAssetUpdateCallback.cs",
    "chars": 625,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadBinaryCallbacks.cs",
    "chars": 2129,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadBinaryFailureCallback.cs",
    "chars": 727,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadBinarySuccessCallback.cs",
    "chars": 718,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadBytesCallbacks.cs",
    "chars": 2087,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadBytesFailureCallback.cs",
    "chars": 626,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadBytesSuccessCallback.cs",
    "chars": 674,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceAgentHelperErrorEventArgs.cs",
    "chars": 1984,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceAgentHelperLoadCompleteEventArgs.cs",
    "chars": 1611,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceAgentHelperParseBytesCompleteEventArgs.cs",
    "chars": 1728,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceAgentHelperReadBytesCompleteEventArgs.cs",
    "chars": 1745,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceAgentHelperReadFileCompleteEventArgs.cs",
    "chars": 1702,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceAgentHelperUpdateEventArgs.cs",
    "chars": 1945,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceProgress.cs",
    "chars": 856,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadResourceStatus.cs",
    "chars": 945,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadSceneCallbacks.cs",
    "chars": 5841,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadSceneDependencyAssetCallback.cs",
    "chars": 819,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadSceneFailureCallback.cs",
    "chars": 717,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadSceneSuccessCallback.cs",
    "chars": 638,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LoadSceneUpdateCallback.cs",
    "chars": 637,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LocalVersionList.FileSystem.cs",
    "chars": 1770,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LocalVersionList.Resource.cs",
    "chars": 3170,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/LocalVersionList.cs",
    "chars": 2132,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/PackageVersionList.Asset.cs",
    "chars": 1817,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/PackageVersionList.FileSystem.cs",
    "chars": 1772,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/PackageVersionList.Resource.cs",
    "chars": 3688,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/PackageVersionList.ResourceGroup.cs",
    "chars": 1771,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/PackageVersionList.cs",
    "chars": 4534,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  },
  {
    "path": "GameFramework/Resource/PackageVersionListSerializer.cs",
    "chars": 951,
    "preview": "//------------------------------------------------------------\n// Game Framework\n// Copyright © 2013-2021 Jiang Yin. Al"
  }
]

// ... and 135 more files (download for full content)

About this extraction

This page contains the full source code of the EllanJiang/GameFramework GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 335 files (1.9 MB), approximately 476.5k tokens, and a symbol index with 3032 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!