示例#1
0
        private static void CheckForOwner(QNetworkIdentity uv)
        {
            var i = 0;

            while (i < s_PendingOwnerIds.Count)
            {
                var pendingOwner = s_PendingOwnerIds[i];
                if (pendingOwner.netId == uv.NetId)
                {
                    uv.SetConnectionToServer(readyConnection);
                    uv.SetLocalPlayer(pendingOwner.playerControllerId);
                    Debug.Log($"ClientScene::OnOwnerMessage - player={uv.gameObject.name}");
                    if (readyConnection.connectionId < 0)
                    {
                        Debug.LogError("Owner message received on a local client.");
                        break;
                    }
                    InternalAddPlayer(uv, pendingOwner.playerControllerId);
                    s_PendingOwnerIds.RemoveAt(i);
                    break;
                }

                i++;
            }
        }
示例#2
0
 internal void AddOwnedObject(QNetworkIdentity obj)
 {
     if (ClientOwnedObjects == null)
     {
         ClientOwnedObjects = new HashSet <NetworkInstanceId>();
     }
     ClientOwnedObjects.Add(obj.NetId);
 }
示例#3
0
 internal void RemoveFromVisList(QNetworkIdentity uv, bool isDestroyed)
 {
     VisList.Remove(uv);
     if (!isDestroyed)
     {
         QNetworkServer.HideForConnection(uv, this);
     }
 }
示例#4
0
 public void Write(QNetworkIdentity value)
 {
     if (value == null)
     {
         WritePackedUInt32(0U);
     }
     else
     {
         Write(value.NetId);
     }
 }
        internal bool GetNetworkIdentity(NetworkInstanceId netId, out QNetworkIdentity uv)
        {
            bool result;

            if (localObjects.ContainsKey(netId) && localObjects[netId] != null)
            {
                uv     = localObjects[netId];
                result = true;
            }
            else
            {
                uv     = null;
                result = false;
            }
            return(result);
        }
 internal void SetLocalObject(NetworkInstanceId netId, GameObject obj, bool isClient, bool isServer)
 {
     if (obj == null)
     {
         localObjects[netId] = null;
     }
     else
     {
         QNetworkIdentity networkIdentity = null;
         if (localObjects.ContainsKey(netId))
         {
             networkIdentity = localObjects[netId];
         }
         if (networkIdentity == null)
         {
             networkIdentity     = obj.GetComponent <QNetworkIdentity>();
             localObjects[netId] = networkIdentity;
         }
         networkIdentity.UpdateClientServer(isClient, isServer);
     }
 }
示例#7
0
        internal static void InternalAddPlayer(QNetworkIdentity view, short playerControllerId)
        {
            Debug.LogWarning($"ClientScene::InternalAddPlayer: playerControllerId : {playerControllerId}");
            if (playerControllerId >= localPlayers.Count)
            {
                Debug.LogWarning(
                    $"ClientScene::InternalAddPlayer: playerControllerId higher than expected: {playerControllerId}");
                while (playerControllerId >= localPlayers.Count)
                {
                    localPlayers.Add(new QPlayerController());
                }
            }
            var playerController = new QPlayerController
            {
                Gameobject         = view.gameObject,
                PlayerControllerId = playerControllerId,
                UnetView           = view
            };

            localPlayers[playerControllerId] = playerController;
            readyConnection.SetPlayerController(playerController);
        }
示例#8
0
 private static void ApplySpawnPayload(QNetworkIdentity uv, Vector3 position, byte[] payload, NetworkInstanceId netId, GameObject newGameObject)
 {
     if (!uv.gameObject.activeSelf)
     {
         uv.gameObject.SetActive(true);
     }
     uv.transform.position = position;
     if (payload != null && payload.Length > 0)
     {
         var reader = new QNetworkReader(payload);
         uv.OnUpdateVars(reader, true);
     }
     if (newGameObject != null)
     {
         newGameObject.SetActive(true);
         uv.SetNetworkInstanceId(netId);
         SetLocalObject(netId, newGameObject);
         if (s_IsSpawnFinished)
         {
             uv.OnStartClient();
             CheckForOwner(uv);
         }
     }
 }
示例#9
0
 internal void RemoveOwnedObject(QNetworkIdentity obj) => ClientOwnedObjects?.Remove(obj.NetId);
示例#10
0
 internal void AddToVisList(QNetworkIdentity uv)
 {
     VisList.Add(uv);
     QNetworkServer.ShowForConnection(uv, this);
 }
示例#11
0
 internal QPlayerController(GameObject go, short playerControllerId)
 {
     Gameobject         = go;
     UnetView           = go.GetComponent <QNetworkIdentity>();
     PlayerControllerId = playerControllerId;
 }
示例#12
0
 public void Update() =>
 QNetworkIdentity.UNetStaticUpdate();