Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 10 additions & 28 deletions GameFramework/Base/GameFrameworkEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

using System;
using System.Collections.Generic;
using System.Reflection;

namespace GameFramework
{
Expand All @@ -16,32 +15,9 @@ namespace GameFramework
/// </summary>
public static class GameFrameworkEntry
{
private const string GameFrameworkVersion = "3.0.0";
private static readonly IDictionary<string, Type> s_AssemblyGameFrameworkModules = new Dictionary<string, Type>();
private const string GameFrameworkVersion = "3.0.0.p1";
private static readonly LinkedList<GameFrameworkModule> s_GameFrameworkModules = new LinkedList<GameFrameworkModule>();

/// <summary>
/// 初始化游戏框架入口的新实例。
/// </summary>
static GameFrameworkEntry()
{
Type gameFrameworkModule = typeof(GameFrameworkModule);
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
foreach (Type i in types)
{
if (i.BaseType != gameFrameworkModule)
{
continue;
}

Type[] interfaces = i.GetInterfaces();
foreach (Type j in interfaces)
{
s_AssemblyGameFrameworkModules.Add(j.FullName, i);
}
}
}

/// <summary>
/// 获取游戏框架版本号。
/// </summary>
Expand Down Expand Up @@ -93,10 +69,16 @@ public static T GetModule<T>() where T : class
throw new GameFrameworkException(string.Format("You must get module by interface, but '{0}' is not.", interfaceType.FullName));
}

Type moduleType = null;
if (!s_AssemblyGameFrameworkModules.TryGetValue(interfaceType.FullName, out moduleType))
if (!interfaceType.FullName.StartsWith("GameFramework."))
{
throw new GameFrameworkException(string.Format("You must get a Game Framework module, but '{0}' is not.", interfaceType.FullName));
}

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

return GetModule(moduleType) as T;
Expand Down
15 changes: 12 additions & 3 deletions GameFramework/DataTable/DataTableManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,10 @@ private void LoadDataTableSuccessCallback(string dataTableAssetName, object data
m_DataTableHelper.ReleaseDataTableAsset(dataTableAsset);
}

m_LoadDataTableSuccessEventHandler?.Invoke(this, new LoadDataTableSuccessEventArgs(dataTableAssetName, duration, userData));
if (m_LoadDataTableSuccessEventHandler != null)
{
m_LoadDataTableSuccessEventHandler(this, new LoadDataTableSuccessEventArgs(dataTableAssetName, duration, userData));
}
}

private void LoadDataTableFailureCallback(string dataTableAssetName, LoadResourceStatus status, string errorMessage, object userData)
Expand All @@ -436,12 +439,18 @@ private void LoadDataTableFailureCallback(string dataTableAssetName, LoadResourc

private void LoadDataTableUpdateCallback(string dataTableAssetName, float progress, object userData)
{
m_LoadDataTableUpdateEventHandler?.Invoke(this, new LoadDataTableUpdateEventArgs(dataTableAssetName, progress, userData));
if (m_LoadDataTableUpdateEventHandler != null)
{
m_LoadDataTableUpdateEventHandler(this, new LoadDataTableUpdateEventArgs(dataTableAssetName, progress, userData));
}
}

private void LoadDataTableDependencyAssetCallback(string dataTableAssetName, string dependencyAssetName, int loadedCount, int totalCount, object userData)
{
m_LoadDataTableDependencyAssetEventHandler?.Invoke(this, new LoadDataTableDependencyAssetEventArgs(dataTableAssetName, dependencyAssetName, loadedCount, totalCount, userData));
if (m_LoadDataTableDependencyAssetEventHandler != null)
{
m_LoadDataTableDependencyAssetEventHandler(this, new LoadDataTableDependencyAssetEventArgs(dataTableAssetName, dependencyAssetName, loadedCount, totalCount, userData));
}
}
}
}
20 changes: 16 additions & 4 deletions GameFramework/Download/DownloadManager.DownloadAgent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,10 @@ public void Start(DownloadTask task)
m_StartLength = m_SavedLength = m_DownloadedLength = 0;
}

DownloadAgentStart?.Invoke(this);
if (DownloadAgentStart != null)
{
DownloadAgentStart(this);
}

if (m_StartLength > 0)
{
Expand Down Expand Up @@ -306,7 +309,10 @@ private void OnDownloadAgentHelperUpdate(object sender, DownloadAgentHelperUpdat

m_DownloadedLength = e.Length;

DownloadAgentUpdate?.Invoke(this, bytes != null ? bytes.Length : 0);
if (DownloadAgentUpdate != null)
{
DownloadAgentUpdate(this, bytes != null ? bytes.Length : 0);
}
}

private void OnDownloadAgentHelperComplete(object sender, DownloadAgentHelperCompleteEventArgs e)
Expand Down Expand Up @@ -336,7 +342,10 @@ private void OnDownloadAgentHelperComplete(object sender, DownloadAgentHelperCom

m_Task.Status = DownloadTaskStatus.Done;

DownloadAgentSuccess?.Invoke(this, bytes != null ? bytes.Length : 0);
if (DownloadAgentSuccess != null)
{
DownloadAgentSuccess(this, bytes != null ? bytes.Length : 0);
}

m_Task.Done = true;
}
Expand All @@ -352,7 +361,10 @@ private void OnDownloadAgentHelperError(object sender, DownloadAgentHelperErrorE

m_Task.Status = DownloadTaskStatus.Error;

DownloadAgentFailure?.Invoke(this, e.ErrorMessage);
if (DownloadAgentFailure != null)
{
DownloadAgentFailure(this, e.ErrorMessage);
}

m_Task.Done = true;
}
Expand Down
20 changes: 16 additions & 4 deletions GameFramework/Download/DownloadManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -291,24 +291,36 @@ public void RemoveAllDownload()

private void OnDownloadAgentStart(DownloadAgent sender)
{
m_DownloadStartEventHandler?.Invoke(this, new DownloadStartEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, sender.CurrentLength, sender.Task.UserData));
if (m_DownloadStartEventHandler != null)
{
m_DownloadStartEventHandler(this, new DownloadStartEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, sender.CurrentLength, sender.Task.UserData));
}
}

private void OnDownloadAgentUpdate(DownloadAgent sender, int lastDownloadedLength)
{
m_DownloadCounter.RecordDownloadedLength(lastDownloadedLength);
m_DownloadUpdateEventHandler?.Invoke(this, new DownloadUpdateEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, sender.CurrentLength, sender.Task.UserData));
if (m_DownloadUpdateEventHandler != null)
{
m_DownloadUpdateEventHandler(this, new DownloadUpdateEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, sender.CurrentLength, sender.Task.UserData));
}
}

private void OnDownloadAgentSuccess(DownloadAgent sender, int lastDownloadedLength)
{
m_DownloadCounter.RecordDownloadedLength(lastDownloadedLength);
m_DownloadSuccessEventHandler?.Invoke(this, new DownloadSuccessEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, sender.CurrentLength, sender.Task.UserData));
if (m_DownloadSuccessEventHandler != null)
{
m_DownloadSuccessEventHandler(this, new DownloadSuccessEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, sender.CurrentLength, sender.Task.UserData));
}
}

private void OnDownloadAgentFailure(DownloadAgent sender, string errorMessage)
{
m_DownloadFailureEventHandler?.Invoke(this, new DownloadFailureEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, errorMessage, sender.Task.UserData));
if (m_DownloadFailureEventHandler != null)
{
m_DownloadFailureEventHandler(this, new DownloadFailureEventArgs(sender.Task.SerialId, sender.Task.DownloadPath, sender.Task.DownloadUri, errorMessage, sender.Task.UserData));
}
}
}
}
21 changes: 17 additions & 4 deletions GameFramework/Entity/EntityManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -933,7 +933,11 @@ private void InternalShowEntity(int entityId, string entityAssetName, string ent
entityInfo.Status = EntityStatus.WillShow;
entity.OnShow(userData);
entityInfo.Status = EntityStatus.Showed;
m_ShowEntitySuccessEventHandler?.Invoke(this, new ShowEntitySuccessEventArgs(entityAssetName, entity, duration, userData));

if (m_ShowEntitySuccessEventHandler != null)
{
m_ShowEntitySuccessEventHandler(this, new ShowEntitySuccessEventArgs(entityAssetName, entity, duration, userData));
}
}
catch (Exception exception)
{
Expand Down Expand Up @@ -974,7 +978,10 @@ private void InternalHideEntity(EntityInfo entityInfo, object userData)
throw new GameFrameworkException("Entity info is unmanaged.");
}

m_HideEntityCompleteEventHandler?.Invoke(this, new HideEntityCompleteEventArgs(entity.Id, userData));
if (m_HideEntityCompleteEventHandler != null)
{
m_HideEntityCompleteEventHandler(this, new HideEntityCompleteEventArgs(entity.Id, userData));
}

m_RecycleQueue.AddLast(new RecycleNode(entityInfo));
}
Expand Down Expand Up @@ -1035,7 +1042,10 @@ private void InstantiateEntityUpdateCallback(string entityAssetName, float progr
throw new GameFrameworkException("Show entity info is invalid.");
}

m_ShowEntityUpdateEventHandler?.Invoke(this, new ShowEntityUpdateEventArgs(showEntityInfo.EntityId, entityAssetName, showEntityInfo.EntityGroupName, progress, showEntityInfo.UserData));
if (m_ShowEntityUpdateEventHandler != null)
{
m_ShowEntityUpdateEventHandler(this, new ShowEntityUpdateEventArgs(showEntityInfo.EntityId, entityAssetName, showEntityInfo.EntityGroupName, progress, showEntityInfo.UserData));
}
}

private void InstantiateEntityDependencyAssetCallback(string entityAssetName, string dependencyAssetName, int loadedCount, int totalCount, object userData)
Expand All @@ -1046,7 +1056,10 @@ private void InstantiateEntityDependencyAssetCallback(string entityAssetName, st
throw new GameFrameworkException("Show entity info is invalid.");
}

m_ShowEntityDependencyAssetEventHandler?.Invoke(this, new ShowEntityDependencyAssetEventArgs(showEntityInfo.EntityId, entityAssetName, showEntityInfo.EntityGroupName, dependencyAssetName, loadedCount, totalCount, showEntityInfo.UserData));
if (m_ShowEntityDependencyAssetEventHandler != null)
{
m_ShowEntityDependencyAssetEventHandler(this, new ShowEntityDependencyAssetEventArgs(showEntityInfo.EntityId, entityAssetName, showEntityInfo.EntityGroupName, dependencyAssetName, loadedCount, totalCount, showEntityInfo.UserData));
}
}
}
}
5 changes: 4 additions & 1 deletion GameFramework/Fsm/FsmState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,10 @@ internal void OnEvent(IFsm<T> fsm, object sender, int eventId, object userData)
FsmEventHandler<T> eventHandlers = null;
if (m_EventHandlers.TryGetValue(eventId, out eventHandlers))
{
eventHandlers?.Invoke(fsm, sender, userData);
if (eventHandlers != null)
{
eventHandlers(fsm, sender, userData);
}
}
}
}
Expand Down
15 changes: 12 additions & 3 deletions GameFramework/Localization/LocalizationManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,10 @@ private void LoadDictionarySuccessCallback(string dictionaryAssetName, object di
m_LocalizationHelper.ReleaseDictionaryAsset(dictionaryAsset);
}

m_LoadDictionarySuccessEventHandler?.Invoke(this, new LoadDictionarySuccessEventArgs(dictionaryAssetName, duration, userData));
if (m_LoadDictionarySuccessEventHandler != null)
{
m_LoadDictionarySuccessEventHandler(this, new LoadDictionarySuccessEventArgs(dictionaryAssetName, duration, userData));
}
}

private void LoadDictionaryFailureCallback(string dictionaryAssetName, LoadResourceStatus status, string errorMessage, object userData)
Expand All @@ -398,12 +401,18 @@ private void LoadDictionaryFailureCallback(string dictionaryAssetName, LoadResou

private void LoadDictionaryUpdateCallback(string dictionaryAssetName, float progress, object userData)
{
m_LoadDictionaryUpdateEventHandler?.Invoke(this, new LoadDictionaryUpdateEventArgs(dictionaryAssetName, progress, userData));
if (m_LoadDictionaryUpdateEventHandler != null)
{
m_LoadDictionaryUpdateEventHandler(this, new LoadDictionaryUpdateEventArgs(dictionaryAssetName, progress, userData));
}
}

private void LoadDictionaryDependencyAssetCallback(string dictionaryAssetName, string dependencyAssetName, int loadedCount, int totalCount, object userData)
{
m_LoadDictionaryDependencyAssetEventHandler?.Invoke(this, new LoadDictionaryDependencyAssetEventArgs(dictionaryAssetName, dependencyAssetName, loadedCount, totalCount, userData));
if (m_LoadDictionaryDependencyAssetEventHandler != null)
{
m_LoadDictionaryDependencyAssetEventHandler(this, new LoadDictionaryDependencyAssetEventArgs(dictionaryAssetName, dependencyAssetName, loadedCount, totalCount, userData));
}
}
}
}
25 changes: 20 additions & 5 deletions GameFramework/Network/NetworkManager.NetworkChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,10 @@ public void Close()
m_Socket = null;
m_ReceiveState = null;

NetworkChannelClosed?.Invoke(this);
if (NetworkChannelClosed != null)
{
NetworkChannelClosed(this);
}
}
}

Expand Down Expand Up @@ -761,11 +764,17 @@ private bool Process()
m_ReceiveState.Reset();
if (packet == null)
{
NetworkChannelCustomError?.Invoke(this, customErrorData);
if (NetworkChannelCustomError != null)
{
NetworkChannelCustomError(this, customErrorData);
}
}
else
{
NetworkChannelReceived?.Invoke(this, packet);
if (NetworkChannelReceived != null)
{
NetworkChannelReceived(this, packet);
}
}
}
catch (Exception exception)
Expand Down Expand Up @@ -812,7 +821,10 @@ private void ConnectCallback(IAsyncResult ar)
m_HeartBeatState.Reset(true);
}

NetworkChannelConnected?.Invoke(this, socketUserData.UserData);
if (NetworkChannelConnected != null)
{
NetworkChannelConnected(this, socketUserData.UserData);
}

Receive();
}
Expand Down Expand Up @@ -841,7 +853,10 @@ private void SendCallback(IAsyncResult ar)
throw;
}

NetworkChannelSended?.Invoke(this, bytesSent, socketUserData.UserData);
if (NetworkChannelSended != null)
{
NetworkChannelSended(this, bytesSent, socketUserData.UserData);
}
}

private void ReceiveCallback(IAsyncResult ar)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,28 +40,40 @@ public override bool IsScene
public override void OnLoadSuccess(LoadResourceAgent agent, object asset, object instance, float duration)
{
base.OnLoadSuccess(agent, asset, instance, duration);
m_InstantiateAssetCallbacks.InstantiateAssetSuccessCallback?.Invoke(AssetName, instance, duration, UserData);
if (m_InstantiateAssetCallbacks.InstantiateAssetSuccessCallback != null)
{
m_InstantiateAssetCallbacks.InstantiateAssetSuccessCallback(AssetName, instance, duration, UserData);
}
}

public override void OnLoadFailure(LoadResourceAgent agent, LoadResourceStatus status, string errorMessage)
{
base.OnLoadFailure(agent, status, errorMessage);
m_InstantiateAssetCallbacks.InstantiateAssetFailureCallback?.Invoke(AssetName, status, errorMessage, UserData);
if (m_InstantiateAssetCallbacks.InstantiateAssetFailureCallback != null)
{
m_InstantiateAssetCallbacks.InstantiateAssetFailureCallback(AssetName, status, errorMessage, UserData);
}
}

public override void OnLoadUpdate(LoadResourceAgent agent, LoadResourceProgress type, float progress)
{
base.OnLoadUpdate(agent, type, progress);
if (type == LoadResourceProgress.LoadAsset)
{
m_InstantiateAssetCallbacks.InstantiateAssetUpdateCallback?.Invoke(AssetName, progress, UserData);
if (m_InstantiateAssetCallbacks.InstantiateAssetUpdateCallback != null)
{
m_InstantiateAssetCallbacks.InstantiateAssetUpdateCallback(AssetName, progress, UserData);
}
}
}

public override void OnLoadDependencyAsset(LoadResourceAgent agent, string dependencyAssetName, object dependencyAsset)
{
base.OnLoadDependencyAsset(agent, dependencyAssetName, dependencyAsset);
m_InstantiateAssetCallbacks.InstantiateAssetDependencyAssetCallback?.Invoke(AssetName, dependencyAssetName, LoadedDependencyAssetCount, TotalDependencyAssetCount, UserData);
if (m_InstantiateAssetCallbacks.InstantiateAssetDependencyAssetCallback != null)
{
m_InstantiateAssetCallbacks.InstantiateAssetDependencyAssetCallback(AssetName, dependencyAssetName, LoadedDependencyAssetCount, TotalDependencyAssetCount, UserData);
}
}
}
}
Expand Down
Loading