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 System.IO;
using UnityEngine; using UnityEngine;
using UnityEngine.Networking; using UnityEngine.Networking;
using UnityEngine.SceneManagement;
namespace MLAPI namespace MLAPI
{ {
@ -110,6 +111,7 @@ namespace MLAPI
NetworkSceneManager.sceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]); NetworkSceneManager.sceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
NetworkSceneManager.sceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i); NetworkSceneManager.sceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
} }
NetworkSceneManager.SetCurrentSceneIndex();
HashSet<string> channelNames = new HashSet<string>(); HashSet<string> channelNames = new HashSet<string>();
@ -475,6 +477,11 @@ namespace MLAPI
using (BinaryReader messageReader = new BinaryReader(messageReadStream)) using (BinaryReader messageReader = new BinaryReader(messageReadStream))
{ {
MyClientId = messageReader.ReadInt32(); MyClientId = messageReader.ReadInt32();
uint sceneIndex = 0;
if(NetworkConfig.EnableSceneSwitching)
{
sceneIndex = messageReader.ReadUInt32();
}
connectedClients.Add(MyClientId, new NetworkedClient() { ClientId = MyClientId }); connectedClients.Add(MyClientId, new NetworkedClient() { ClientId = MyClientId });
int clientCount = messageReader.ReadInt32(); int clientCount = messageReader.ReadInt32();
for (int i = 0; i < clientCount; i++) 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 += 4;
sizeOfStream += 13 * amountOfObjectsToSend; sizeOfStream += 13 * amountOfObjectsToSend;
sizeOfStream += amountOfObjectsToSend; //Bool isActive
}
if(NetworkConfig.EnableSceneSwitching)
{
sizeOfStream += 4;
} }
using (MemoryStream writeStream = new MemoryStream(sizeOfStream)) using (MemoryStream writeStream = new MemoryStream(sizeOfStream))
@ -962,6 +978,10 @@ namespace MLAPI
using (BinaryWriter writer = new BinaryWriter(writeStream)) using (BinaryWriter writer = new BinaryWriter(writeStream))
{ {
writer.Write(clientId); writer.Write(clientId);
if(NetworkConfig.EnableSceneSwitching)
{
writer.Write(NetworkSceneManager.CurrentSceneIndex);
}
writer.Write(connectedClients.Count - 1); writer.Write(connectedClients.Count - 1);
foreach (KeyValuePair<int, NetworkedClient> item in connectedClients) foreach (KeyValuePair<int, NetworkedClient> item in connectedClients)
{ {

View File

@ -16,6 +16,12 @@ namespace MLAPI.NetworkingManagerComponents
private static Scene lastScene; private static Scene lastScene;
private static Scene nextScene; private static Scene nextScene;
private static bool isSwitching = false; 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) 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."); Debug.LogWarning("MLAPI: The scene " + sceneName + " is not registered as a switchable scene.");
return; return;
} }
CurrentSceneIndex = sceneNameToIndex[sceneName];
isSwitching = true; isSwitching = true;
lastScene = SceneManager.GetActiveScene(); lastScene = SceneManager.GetActiveScene();
AsyncOperation sceneLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); AsyncOperation sceneLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);