mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 02:50:32 +00:00
ClientScene: removed static message caching to simplify code and reduce state
This commit is contained in:
parent
c64e849b1b
commit
0d175c2844
@ -15,16 +15,7 @@ public class ClientScene
|
|||||||
static bool s_IsSpawnFinished;
|
static bool s_IsSpawnFinished;
|
||||||
static NetworkScene s_NetworkScene = new NetworkScene();
|
static NetworkScene s_NetworkScene = new NetworkScene();
|
||||||
|
|
||||||
// static message objects to avoid runtime-allocations
|
|
||||||
static ObjectSpawnSceneMessage s_ObjectSpawnSceneMessage = new ObjectSpawnSceneMessage();
|
|
||||||
static ObjectSpawnFinishedMessage s_ObjectSpawnFinishedMessage = new ObjectSpawnFinishedMessage();
|
|
||||||
static ObjectDestroyMessage s_ObjectDestroyMessage = new ObjectDestroyMessage();
|
|
||||||
static ObjectSpawnMessage s_ObjectSpawnMessage = new ObjectSpawnMessage();
|
|
||||||
static OwnerMessage s_OwnerMessage = new OwnerMessage();
|
|
||||||
static ClientAuthorityMessage s_ClientAuthorityMessage = new ClientAuthorityMessage();
|
|
||||||
|
|
||||||
#if ENABLE_UNET_HOST_MIGRATION
|
#if ENABLE_UNET_HOST_MIGRATION
|
||||||
|
|
||||||
public const int ReconnectIdInvalid = -1;
|
public const int ReconnectIdInvalid = -1;
|
||||||
public const int ReconnectIdHost = 0;
|
public const int ReconnectIdHost = 0;
|
||||||
static int s_ReconnectId = ReconnectIdInvalid;
|
static int s_ReconnectId = ReconnectIdInvalid;
|
||||||
@ -38,7 +29,6 @@ static public void SetReconnectId(int newReconnectId, PeerInfoMessage[] peers)
|
|||||||
|
|
||||||
if (LogFilter.logDebug) { Debug.Log("ClientScene::SetReconnectId: " + newReconnectId); }
|
if (LogFilter.logDebug) { Debug.Log("ClientScene::SetReconnectId: " + newReconnectId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static internal void SetNotReady()
|
static internal void SetNotReady()
|
||||||
@ -516,78 +506,80 @@ static void ApplySpawnPayload(NetworkIdentity uv, Vector3 position, byte[] paylo
|
|||||||
|
|
||||||
static void OnObjectSpawn(NetworkMessage netMsg)
|
static void OnObjectSpawn(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectSpawnMessage);
|
ObjectSpawnMessage msg = new ObjectSpawnMessage();
|
||||||
|
netMsg.ReadMessage(msg);
|
||||||
|
|
||||||
if (!s_ObjectSpawnMessage.assetId.IsValid())
|
if (!msg.assetId.IsValid())
|
||||||
{
|
{
|
||||||
if (LogFilter.logError) { Debug.LogError("OnObjSpawn netId: " + s_ObjectSpawnMessage.netId + " has invalid asset Id"); }
|
if (LogFilter.logError) { Debug.LogError("OnObjSpawn netId: " + msg.netId + " has invalid asset Id"); }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (LogFilter.logDebug) { Debug.Log("Client spawn handler instantiating [netId:" + s_ObjectSpawnMessage.netId + " asset ID:" + s_ObjectSpawnMessage.assetId + " pos:" + s_ObjectSpawnMessage.position + "]"); }
|
if (LogFilter.logDebug) { Debug.Log("Client spawn handler instantiating [netId:" + msg.netId + " asset ID:" + msg.assetId + " pos:" + msg.position + "]"); }
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
UnityEditor.NetworkDetailStats.IncrementStat(
|
UnityEditor.NetworkDetailStats.IncrementStat(
|
||||||
UnityEditor.NetworkDetailStats.NetworkDirection.Incoming,
|
UnityEditor.NetworkDetailStats.NetworkDirection.Incoming,
|
||||||
MsgType.ObjectSpawn, GetStringForAssetId(s_ObjectSpawnMessage.assetId), 1);
|
MsgType.ObjectSpawn, GetStringForAssetId(msg.assetId), 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NetworkIdentity localNetworkIdentity;
|
NetworkIdentity localNetworkIdentity;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ObjectSpawnMessage.netId, out localNetworkIdentity))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localNetworkIdentity))
|
||||||
{
|
{
|
||||||
// this object already exists (was in the scene), just apply the update to existing object
|
// this object already exists (was in the scene), just apply the update to existing object
|
||||||
ApplySpawnPayload(localNetworkIdentity, s_ObjectSpawnMessage.position, s_ObjectSpawnMessage.payload, s_ObjectSpawnMessage.netId, null);
|
ApplySpawnPayload(localNetworkIdentity, msg.position, msg.payload, msg.netId, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameObject prefab;
|
GameObject prefab;
|
||||||
SpawnDelegate handler;
|
SpawnDelegate handler;
|
||||||
if (NetworkScene.GetPrefab(s_ObjectSpawnMessage.assetId, out prefab))
|
if (NetworkScene.GetPrefab(msg.assetId, out prefab))
|
||||||
{
|
{
|
||||||
var obj = (GameObject)Object.Instantiate(prefab, s_ObjectSpawnMessage.position, s_ObjectSpawnMessage.rotation);
|
var obj = (GameObject)Object.Instantiate(prefab, msg.position, msg.rotation);
|
||||||
if (LogFilter.logDebug)
|
if (LogFilter.logDebug)
|
||||||
{
|
{
|
||||||
Debug.Log("Client spawn handler instantiating [netId:" + s_ObjectSpawnMessage.netId + " asset ID:" + s_ObjectSpawnMessage.assetId + " pos:" + s_ObjectSpawnMessage.position + " rotation: " + s_ObjectSpawnMessage.rotation + "]");
|
Debug.Log("Client spawn handler instantiating [netId:" + msg.netId + " asset ID:" + msg.assetId + " pos:" + msg.position + " rotation: " + msg.rotation + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
localNetworkIdentity = obj.GetComponent<NetworkIdentity>();
|
localNetworkIdentity = obj.GetComponent<NetworkIdentity>();
|
||||||
if (localNetworkIdentity == null)
|
if (localNetworkIdentity == null)
|
||||||
{
|
{
|
||||||
if (LogFilter.logError) { Debug.LogError("Client object spawned for " + s_ObjectSpawnMessage.assetId + " does not have a NetworkIdentity"); }
|
if (LogFilter.logError) { Debug.LogError("Client object spawned for " + msg.assetId + " does not have a NetworkIdentity"); }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
localNetworkIdentity.Reset();
|
localNetworkIdentity.Reset();
|
||||||
ApplySpawnPayload(localNetworkIdentity, s_ObjectSpawnMessage.position, s_ObjectSpawnMessage.payload, s_ObjectSpawnMessage.netId, obj);
|
ApplySpawnPayload(localNetworkIdentity, msg.position, msg.payload, msg.netId, obj);
|
||||||
}
|
}
|
||||||
// lookup registered factory for type:
|
// lookup registered factory for type:
|
||||||
else if (NetworkScene.GetSpawnHandler(s_ObjectSpawnMessage.assetId, out handler))
|
else if (NetworkScene.GetSpawnHandler(msg.assetId, out handler))
|
||||||
{
|
{
|
||||||
GameObject obj = handler(s_ObjectSpawnMessage.position, s_ObjectSpawnMessage.assetId);
|
GameObject obj = handler(msg.position, msg.assetId);
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
{
|
{
|
||||||
if (LogFilter.logWarn) { Debug.LogWarning("Client spawn handler for " + s_ObjectSpawnMessage.assetId + " returned null"); }
|
if (LogFilter.logWarn) { Debug.LogWarning("Client spawn handler for " + msg.assetId + " returned null"); }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
localNetworkIdentity = obj.GetComponent<NetworkIdentity>();
|
localNetworkIdentity = obj.GetComponent<NetworkIdentity>();
|
||||||
if (localNetworkIdentity == null)
|
if (localNetworkIdentity == null)
|
||||||
{
|
{
|
||||||
if (LogFilter.logError) { Debug.LogError("Client object spawned for " + s_ObjectSpawnMessage.assetId + " does not have a network identity"); }
|
if (LogFilter.logError) { Debug.LogError("Client object spawned for " + msg.assetId + " does not have a network identity"); }
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
localNetworkIdentity.Reset();
|
localNetworkIdentity.Reset();
|
||||||
localNetworkIdentity.SetDynamicAssetId(s_ObjectSpawnMessage.assetId);
|
localNetworkIdentity.SetDynamicAssetId(msg.assetId);
|
||||||
ApplySpawnPayload(localNetworkIdentity, s_ObjectSpawnMessage.position, s_ObjectSpawnMessage.payload, s_ObjectSpawnMessage.netId, obj);
|
ApplySpawnPayload(localNetworkIdentity, msg.position, msg.payload, msg.netId, obj);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (LogFilter.logError) { Debug.LogError("Failed to spawn server object, did you forget to add it to the NetworkManager? assetId=" + s_ObjectSpawnMessage.assetId + " netId=" + s_ObjectSpawnMessage.netId); }
|
if (LogFilter.logError) { Debug.LogError("Failed to spawn server object, did you forget to add it to the NetworkManager? assetId=" + msg.assetId + " netId=" + msg.netId); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnObjectSpawnScene(NetworkMessage netMsg)
|
static void OnObjectSpawnScene(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectSpawnSceneMessage);
|
ObjectSpawnSceneMessage msg = new ObjectSpawnSceneMessage();
|
||||||
|
netMsg.ReadMessage(msg);
|
||||||
|
|
||||||
if (LogFilter.logDebug) { Debug.Log("Client spawn scene handler instantiating [netId:" + s_ObjectSpawnSceneMessage.netId + " sceneId:" + s_ObjectSpawnSceneMessage.sceneId + " pos:" + s_ObjectSpawnSceneMessage.position); }
|
if (LogFilter.logDebug) { Debug.Log("Client spawn scene handler instantiating [netId:" + msg.netId + " sceneId:" + msg.sceneId + " pos:" + msg.position); }
|
||||||
|
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
@ -597,19 +589,19 @@ static void OnObjectSpawnScene(NetworkMessage netMsg)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
NetworkIdentity localNetworkIdentity;
|
NetworkIdentity localNetworkIdentity;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ObjectSpawnSceneMessage.netId, out localNetworkIdentity))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localNetworkIdentity))
|
||||||
{
|
{
|
||||||
// this object already exists (was in the scene)
|
// this object already exists (was in the scene)
|
||||||
ApplySpawnPayload(localNetworkIdentity, s_ObjectSpawnSceneMessage.position, s_ObjectSpawnSceneMessage.payload, s_ObjectSpawnSceneMessage.netId, localNetworkIdentity.gameObject);
|
ApplySpawnPayload(localNetworkIdentity, msg.position, msg.payload, msg.netId, localNetworkIdentity.gameObject);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkIdentity spawnedId = SpawnSceneObject(s_ObjectSpawnSceneMessage.sceneId);
|
NetworkIdentity spawnedId = SpawnSceneObject(msg.sceneId);
|
||||||
if (spawnedId == null)
|
if (spawnedId == null)
|
||||||
{
|
{
|
||||||
if (LogFilter.logError)
|
if (LogFilter.logError)
|
||||||
{
|
{
|
||||||
Debug.LogError("Spawn scene object not found for " + s_ObjectSpawnSceneMessage.sceneId + " SpawnableObjects.Count=" + s_SpawnableObjects.Count);
|
Debug.LogError("Spawn scene object not found for " + msg.sceneId + " SpawnableObjects.Count=" + s_SpawnableObjects.Count);
|
||||||
// dump the whole spawnable objects dict for easier debugging
|
// dump the whole spawnable objects dict for easier debugging
|
||||||
foreach (var kvp in s_SpawnableObjects)
|
foreach (var kvp in s_SpawnableObjects)
|
||||||
Debug.Log("Spawnable: SceneId=" + kvp.Key + " name=" + kvp.Value.name);
|
Debug.Log("Spawnable: SceneId=" + kvp.Key + " name=" + kvp.Value.name);
|
||||||
@ -617,16 +609,17 @@ static void OnObjectSpawnScene(NetworkMessage netMsg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LogFilter.logDebug) { Debug.Log("Client spawn for [netId:" + s_ObjectSpawnSceneMessage.netId + "] [sceneId:" + s_ObjectSpawnSceneMessage.sceneId + "] obj:" + spawnedId.gameObject.name); }
|
if (LogFilter.logDebug) { Debug.Log("Client spawn for [netId:" + msg.netId + "] [sceneId:" + msg.sceneId + "] obj:" + spawnedId.gameObject.name); }
|
||||||
ApplySpawnPayload(spawnedId, s_ObjectSpawnSceneMessage.position, s_ObjectSpawnSceneMessage.payload, s_ObjectSpawnSceneMessage.netId, spawnedId.gameObject);
|
ApplySpawnPayload(spawnedId, msg.position, msg.payload, msg.netId, spawnedId.gameObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnObjectSpawnFinished(NetworkMessage netMsg)
|
static void OnObjectSpawnFinished(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectSpawnFinishedMessage);
|
ObjectSpawnFinishedMessage msg = new ObjectSpawnFinishedMessage();
|
||||||
if (LogFilter.logDebug) { Debug.Log("SpawnFinished:" + s_ObjectSpawnFinishedMessage.state); }
|
netMsg.ReadMessage(msg);
|
||||||
|
if (LogFilter.logDebug) { Debug.Log("SpawnFinished:" + msg.state); }
|
||||||
|
|
||||||
if (s_ObjectSpawnFinishedMessage.state == 0)
|
if (msg.state == 0)
|
||||||
{
|
{
|
||||||
PrepareToSpawnSceneObjects();
|
PrepareToSpawnSceneObjects();
|
||||||
s_IsSpawnFinished = false;
|
s_IsSpawnFinished = false;
|
||||||
@ -646,11 +639,12 @@ static void OnObjectSpawnFinished(NetworkMessage netMsg)
|
|||||||
|
|
||||||
static void OnObjectDestroy(NetworkMessage netMsg)
|
static void OnObjectDestroy(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectDestroyMessage);
|
ObjectDestroyMessage msg = new ObjectDestroyMessage();
|
||||||
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnObjDestroy netId:" + s_ObjectDestroyMessage.netId); }
|
netMsg.ReadMessage(msg);
|
||||||
|
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnObjDestroy netId:" + msg.netId); }
|
||||||
|
|
||||||
NetworkIdentity localObject;
|
NetworkIdentity localObject;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ObjectDestroyMessage.netId, out localObject))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localObject))
|
||||||
{
|
{
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
UnityEditor.NetworkDetailStats.IncrementStat(
|
UnityEditor.NetworkDetailStats.IncrementStat(
|
||||||
@ -673,30 +667,32 @@ static void OnObjectDestroy(NetworkMessage netMsg)
|
|||||||
s_SpawnableObjects[localObject.sceneId] = localObject;
|
s_SpawnableObjects[localObject.sceneId] = localObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s_NetworkScene.RemoveLocalObject(s_ObjectDestroyMessage.netId);
|
s_NetworkScene.RemoveLocalObject(msg.netId);
|
||||||
localObject.MarkForReset();
|
localObject.MarkForReset();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (LogFilter.logDebug) { Debug.LogWarning("Did not find target for destroy message for " + s_ObjectDestroyMessage.netId); }
|
if (LogFilter.logDebug) { Debug.LogWarning("Did not find target for destroy message for " + msg.netId); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnLocalClientObjectDestroy(NetworkMessage netMsg)
|
static void OnLocalClientObjectDestroy(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectDestroyMessage);
|
ObjectDestroyMessage msg = new ObjectDestroyMessage();
|
||||||
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnLocalObjectObjDestroy netId:" + s_ObjectDestroyMessage.netId); }
|
netMsg.ReadMessage(msg);
|
||||||
|
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnLocalObjectObjDestroy netId:" + msg.netId); }
|
||||||
|
|
||||||
s_NetworkScene.RemoveLocalObject(s_ObjectDestroyMessage.netId);
|
s_NetworkScene.RemoveLocalObject(msg.netId);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnLocalClientObjectHide(NetworkMessage netMsg)
|
static void OnLocalClientObjectHide(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectDestroyMessage);
|
ObjectDestroyMessage msg = new ObjectDestroyMessage();
|
||||||
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + s_ObjectDestroyMessage.netId); }
|
netMsg.ReadMessage(msg);
|
||||||
|
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + msg.netId); }
|
||||||
|
|
||||||
NetworkIdentity localObject;
|
NetworkIdentity localObject;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ObjectDestroyMessage.netId, out localObject))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localObject))
|
||||||
{
|
{
|
||||||
localObject.OnSetLocalVisibility(false);
|
localObject.OnSetLocalVisibility(false);
|
||||||
}
|
}
|
||||||
@ -704,9 +700,11 @@ static void OnLocalClientObjectHide(NetworkMessage netMsg)
|
|||||||
|
|
||||||
static void OnLocalClientObjectSpawn(NetworkMessage netMsg)
|
static void OnLocalClientObjectSpawn(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectSpawnMessage);
|
ObjectSpawnMessage msg = new ObjectSpawnMessage();
|
||||||
|
netMsg.ReadMessage(msg);
|
||||||
|
|
||||||
NetworkIdentity localObject;
|
NetworkIdentity localObject;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ObjectSpawnMessage.netId, out localObject))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localObject))
|
||||||
{
|
{
|
||||||
localObject.OnSetLocalVisibility(true);
|
localObject.OnSetLocalVisibility(true);
|
||||||
}
|
}
|
||||||
@ -714,9 +712,11 @@ static void OnLocalClientObjectSpawn(NetworkMessage netMsg)
|
|||||||
|
|
||||||
static void OnLocalClientObjectSpawnScene(NetworkMessage netMsg)
|
static void OnLocalClientObjectSpawnScene(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ObjectSpawnSceneMessage);
|
ObjectSpawnSceneMessage msg = new ObjectSpawnSceneMessage();
|
||||||
|
netMsg.ReadMessage(msg);
|
||||||
|
|
||||||
NetworkIdentity localObject;
|
NetworkIdentity localObject;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ObjectSpawnSceneMessage.netId, out localObject))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localObject))
|
||||||
{
|
{
|
||||||
localObject.OnSetLocalVisibility(true);
|
localObject.OnSetLocalVisibility(true);
|
||||||
}
|
}
|
||||||
@ -727,7 +727,6 @@ static void OnUpdateVarsMessage(NetworkMessage netMsg)
|
|||||||
NetworkInstanceId netId = netMsg.reader.ReadNetworkId();
|
NetworkInstanceId netId = netMsg.reader.ReadNetworkId();
|
||||||
if (LogFilter.logDev) { Debug.Log("ClientScene::OnUpdateVarsMessage " + netId + " channel:" + netMsg.channelId); }
|
if (LogFilter.logDev) { Debug.Log("ClientScene::OnUpdateVarsMessage " + netId + " channel:" + netMsg.channelId); }
|
||||||
|
|
||||||
|
|
||||||
NetworkIdentity localObject;
|
NetworkIdentity localObject;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(netId, out localObject))
|
if (s_NetworkScene.GetNetworkIdentity(netId, out localObject))
|
||||||
{
|
{
|
||||||
@ -811,43 +810,45 @@ static void OnSyncListMessage(NetworkMessage netMsg)
|
|||||||
|
|
||||||
static void OnClientAuthority(NetworkMessage netMsg)
|
static void OnClientAuthority(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_ClientAuthorityMessage);
|
ClientAuthorityMessage msg = new ClientAuthorityMessage();
|
||||||
|
netMsg.ReadMessage(msg);
|
||||||
|
|
||||||
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnClientAuthority for connectionId=" + netMsg.conn.connectionId + " netId: " + s_ClientAuthorityMessage.netId); }
|
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnClientAuthority for connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); }
|
||||||
|
|
||||||
NetworkIdentity uv;
|
NetworkIdentity uv;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_ClientAuthorityMessage.netId, out uv))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out uv))
|
||||||
{
|
{
|
||||||
uv.HandleClientAuthority(s_ClientAuthorityMessage.authority);
|
uv.HandleClientAuthority(msg.authority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnClientAddedPlayer?
|
// OnClientAddedPlayer?
|
||||||
static void OnOwnerMessage(NetworkMessage netMsg)
|
static void OnOwnerMessage(NetworkMessage netMsg)
|
||||||
{
|
{
|
||||||
netMsg.ReadMessage(s_OwnerMessage);
|
OwnerMessage msg = new OwnerMessage();
|
||||||
|
netMsg.ReadMessage(msg);
|
||||||
|
|
||||||
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnOwnerMessage - connectionId=" + netMsg.conn.connectionId + " netId: " + s_OwnerMessage.netId); }
|
if (LogFilter.logDebug) { Debug.Log("ClientScene::OnOwnerMessage - connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); }
|
||||||
|
|
||||||
|
|
||||||
// is there already an owner that is a different object??
|
// is there already an owner that is a different object??
|
||||||
PlayerController oldOwner;
|
PlayerController oldOwner;
|
||||||
if (netMsg.conn.GetPlayerController(s_OwnerMessage.playerControllerId, out oldOwner))
|
if (netMsg.conn.GetPlayerController(msg.playerControllerId, out oldOwner))
|
||||||
{
|
{
|
||||||
oldOwner.unetView.SetNotLocalPlayer();
|
oldOwner.unetView.SetNotLocalPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkIdentity localNetworkIdentity;
|
NetworkIdentity localNetworkIdentity;
|
||||||
if (s_NetworkScene.GetNetworkIdentity(s_OwnerMessage.netId, out localNetworkIdentity))
|
if (s_NetworkScene.GetNetworkIdentity(msg.netId, out localNetworkIdentity))
|
||||||
{
|
{
|
||||||
// this object already exists
|
// this object already exists
|
||||||
localNetworkIdentity.SetConnectionToServer(netMsg.conn);
|
localNetworkIdentity.SetConnectionToServer(netMsg.conn);
|
||||||
localNetworkIdentity.SetLocalPlayer(s_OwnerMessage.playerControllerId);
|
localNetworkIdentity.SetLocalPlayer(msg.playerControllerId);
|
||||||
InternalAddPlayer(localNetworkIdentity, s_OwnerMessage.playerControllerId);
|
InternalAddPlayer(localNetworkIdentity, msg.playerControllerId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var pendingOwner = new PendingOwner { netId = s_OwnerMessage.netId, playerControllerId = s_OwnerMessage.playerControllerId };
|
var pendingOwner = new PendingOwner { netId = msg.netId, playerControllerId = msg.playerControllerId };
|
||||||
s_PendingOwnerIds.Add(pendingOwner);
|
s_PendingOwnerIds.Add(pendingOwner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user