Added scene sync to new clients

This commit is contained in:
Albin Corén 2018-03-05 12:39:57 +01:00
parent 0b90d02371
commit f49aa9aadb
2 changed files with 27 additions and 0 deletions

View File

@ -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)
{

View File

@ -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);