diff --git a/Source/Editor/States/PlayingState.cs b/Source/Editor/States/PlayingState.cs
index 18a94348d..7a550948a 100644
--- a/Source/Editor/States/PlayingState.cs
+++ b/Source/Editor/States/PlayingState.cs
@@ -82,6 +82,16 @@ namespace FlaxEditor.States
}
}
+ ///
+ /// True if play mode is starting.
+ ///
+ public bool IsPlayModeStarting;
+
+ ///
+ /// True if play mode is ending.
+ ///
+ public bool IsPlayModeEnding;
+
internal PlayingState(Editor editor)
: base(editor)
{
@@ -127,6 +137,7 @@ namespace FlaxEditor.States
public override void OnEnter()
{
Profiler.BeginEvent("PlayingState.OnEnter");
+ IsPlayModeStarting = true;
Editor.OnPlayBeginning();
CacheSelection();
@@ -150,6 +161,7 @@ namespace FlaxEditor.States
RestoreSelection();
Editor.OnPlayBegin();
+ IsPlayModeStarting = false;
Profiler.EndEvent();
}
@@ -171,6 +183,7 @@ namespace FlaxEditor.States
public override void OnExit(State nextState)
{
Profiler.BeginEvent("PlayingState.OnExit");
+ IsPlayModeEnding = true;
Editor.OnPlayEnding();
IsPaused = true;
@@ -194,6 +207,7 @@ namespace FlaxEditor.States
RestoreSelection();
Editor.OnPlayEnd();
+ IsPlayModeEnding = false;
Profiler.EndEvent();
}
}
diff --git a/Source/Engine/Networking/NetworkManager.h b/Source/Engine/Networking/NetworkManager.h
index 9115216fb..a634217c1 100644
--- a/Source/Engine/Networking/NetworkManager.h
+++ b/Source/Engine/Networking/NetworkManager.h
@@ -140,6 +140,12 @@ public:
return State == NetworkConnectionState::Connected;
}
+ // Returns true if network is online or disconnected.
+ API_PROPERTY() FORCE_INLINE static bool IsOffline()
+ {
+ return State == NetworkConnectionState::Offline || State == NetworkConnectionState::Disconnected;
+ }
+
///
/// Gets the network client for a given connection. Returns null if failed to find it.
///
diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp
index fea77ab58..4e0d7f339 100644
--- a/Source/Engine/Networking/NetworkReplicator.cpp
+++ b/Source/Engine/Networking/NetworkReplicator.cpp
@@ -663,7 +663,7 @@ bool NetworkReplicator::InvokeSerializer(const ScriptingTypeHandle& typeHandle,
void NetworkReplicator::AddObject(ScriptingObject* obj, ScriptingObject* parent)
{
- if (!obj || NetworkManager::State == NetworkConnectionState::Offline)
+ if (!obj || NetworkManager::IsOffline())
return;
ScopeLock lock(ObjectsLock);
if (Objects.Contains(obj))
@@ -695,7 +695,7 @@ void NetworkReplicator::AddObject(ScriptingObject* obj, ScriptingObject* parent)
void NetworkReplicator::RemoveObject(ScriptingObject* obj)
{
- if (!obj || NetworkManager::State == NetworkConnectionState::Offline)
+ if (!obj || NetworkManager::IsOffline())
return;
ScopeLock lock(ObjectsLock);
const auto it = Objects.Find(obj->GetID());
@@ -715,7 +715,7 @@ void NetworkReplicator::SpawnObject(ScriptingObject* obj)
void NetworkReplicator::SpawnObject(ScriptingObject* obj, const DataContainer& clientIds)
{
- if (!obj || NetworkManager::State == NetworkConnectionState::Offline)
+ if (!obj || NetworkManager::IsOffline())
return;
ScopeLock lock(ObjectsLock);
const auto it = Objects.Find(obj->GetID());
@@ -730,7 +730,7 @@ void NetworkReplicator::SpawnObject(ScriptingObject* obj, const DataContainerGetID());
@@ -887,7 +887,7 @@ NetworkStream* NetworkReplicator::BeginInvokeRPC()
void NetworkReplicator::EndInvokeRPC(ScriptingObject* obj, const ScriptingTypeHandle& type, const StringAnsiView& name, NetworkStream* argsStream)
{
const NetworkRpcInfo* info = NetworkRpcInfo::RPCsTable.TryGet(NetworkRpcName(type, name));
- if (!info || !obj)
+ if (!info || !obj || NetworkManager::IsOffline())
return;
ObjectsLock.Lock();
auto& rpc = RpcQueue.AddOne();