Added scene sync to new clients
This commit is contained in:
parent
0b90d02371
commit
f49aa9aadb
@ -5,6 +5,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace MLAPI
|
||||
{
|
||||
@ -110,6 +111,7 @@ namespace MLAPI
|
||||
NetworkSceneManager.sceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
|
||||
NetworkSceneManager.sceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
|
||||
}
|
||||
NetworkSceneManager.SetCurrentSceneIndex();
|
||||
|
||||
|
||||
HashSet<string> channelNames = new HashSet<string>();
|
||||
@ -475,6 +477,11 @@ namespace MLAPI
|
||||
using (BinaryReader messageReader = new BinaryReader(messageReadStream))
|
||||
{
|
||||
MyClientId = messageReader.ReadInt32();
|
||||
uint sceneIndex = 0;
|
||||
if(NetworkConfig.EnableSceneSwitching)
|
||||
{
|
||||
sceneIndex = messageReader.ReadUInt32();
|
||||
}
|
||||
connectedClients.Add(MyClientId, new NetworkedClient() { ClientId = MyClientId });
|
||||
int clientCount = messageReader.ReadInt32();
|
||||
for (int i = 0; i < clientCount; i++)
|
||||
@ -503,6 +510,10 @@ namespace MLAPI
|
||||
}
|
||||
}
|
||||
}
|
||||
if(NetworkConfig.EnableSceneSwitching)
|
||||
{
|
||||
NetworkSceneManager.OnSceneSwitch(sceneIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -955,6 +966,11 @@ namespace MLAPI
|
||||
{
|
||||
sizeOfStream += 4;
|
||||
sizeOfStream += 13 * amountOfObjectsToSend;
|
||||
sizeOfStream += amountOfObjectsToSend; //Bool isActive
|
||||
}
|
||||
if(NetworkConfig.EnableSceneSwitching)
|
||||
{
|
||||
sizeOfStream += 4;
|
||||
}
|
||||
|
||||
using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
|
||||
@ -962,6 +978,10 @@ namespace MLAPI
|
||||
using (BinaryWriter writer = new BinaryWriter(writeStream))
|
||||
{
|
||||
writer.Write(clientId);
|
||||
if(NetworkConfig.EnableSceneSwitching)
|
||||
{
|
||||
writer.Write(NetworkSceneManager.CurrentSceneIndex);
|
||||
}
|
||||
writer.Write(connectedClients.Count - 1);
|
||||
foreach (KeyValuePair<int, NetworkedClient> item in connectedClients)
|
||||
{
|
||||
|
@ -16,6 +16,12 @@ namespace MLAPI.NetworkingManagerComponents
|
||||
private static Scene lastScene;
|
||||
private static Scene nextScene;
|
||||
private static bool isSwitching = false;
|
||||
internal static uint CurrentSceneIndex = 0;
|
||||
|
||||
internal static void SetCurrentSceneIndex ()
|
||||
{
|
||||
CurrentSceneIndex = sceneNameToIndex[SceneManager.GetActiveScene().name];
|
||||
}
|
||||
|
||||
public static void SwitchScene(string sceneName)
|
||||
{
|
||||
@ -34,6 +40,7 @@ namespace MLAPI.NetworkingManagerComponents
|
||||
Debug.LogWarning("MLAPI: The scene " + sceneName + " is not registered as a switchable scene.");
|
||||
return;
|
||||
}
|
||||
CurrentSceneIndex = sceneNameToIndex[sceneName];
|
||||
isSwitching = true;
|
||||
lastScene = SceneManager.GetActiveScene();
|
||||
AsyncOperation sceneLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
|
||||
|
Loading…
x
Reference in New Issue
Block a user