示例#1
0
    private void OnMessInstantiate(MessageInstantiate message)
    {
        Debug.Log("Создан объект ID:" + message.netID);
        NetGO netGO;

        //проверяем наш ли это объект
        if (message.owner == StaticLinks.clientData.myId)
        {
            //ищем в коллекции несинхронизированных объектов тот который успешно создался
            netGO = netGOsNoSync.Where(x => x.localId == message.localId).FirstOrDefault();
            //если почему то не нашли то выходим
            if (netGO == null)
            {
                return;
            }
            //если всетаки нашли то инициализируем, и переводим в правильный список
            netGO.isMy = true;          //помечаем что он наш
            netGOsNoSync.Remove(netGO); // Удаляем его из временного списка
        }
        else
        {
            //а если он не наш, то просто создаем его
            netGO      = GameObject.Instantiate <NetGO>(Resources.Load <NetGO>(message.name.Split(new char[] { ' ', '(' })[0]));
            netGO.isMy = false;

            netGO.transform.position = message.position.Vector3();
            netGO.transform.rotation = message.rotation.Quaternion();
        }
        netGO.netID = message.netID;
        netGO.sync  = true;             //помечаем что объект синхронизирован с сервером
        netGOs.Add(netGO.netID, netGO); // Добавляем в нормальный словарь
    }
示例#2
0
    public void NetInstantiate(NetGO netGO)
    {
        MessageInstantiate message = new MessageInstantiate();

        message.name     = netGO.name;
        message.localId  = GetNewLocalId();
        message.position = netGO.transform.position.NetworkVector3();
        message.rotation = netGO.transform.rotation.NetworkQuaternion();
        netGO.localId    = message.localId;
        GalaxyApi.send.SendMessageToServer((byte)CommandType.goInstantiate, message, GalaxyCoreCommon.GalaxyDeliveryType.reliable);
        netGOsNoSync.Add(netGO);
    }
示例#3
0
        /// <summary>
        /// Обработчик создания новых объектов
        /// </summary>
        /// <param name="message"></param>
        /// <param name="clientConnection"></param>
        void InstantiateGO(MessageInstantiate message, ClientConnection clientConnection)
        {
            Client client = Server.clientManager.GetClientByConnection(clientConnection);
            NetGO  netGO  = new NetGO();

            netGO.name     = message.name;
            netGO.netID    = GetNewID();
            netGO.owner    = client.id;
            netGO.position = message.position;
            netGO.rotation = message.rotation;
            message.netID  = netGO.netID;
            message.owner  = client.id;
            netObjects.Add(netGO.netID, netGO);
            SendMessageToAll((byte)CommandType.goInstantiate, message, GalaxyDeliveryType.reliable);
            Console.WriteLine("Был создан NetGO id:" + netGO.netID);
        }
    /// <summary>
    /// В этот метод приходят все входящии сообщения (мы на них подписались)
    /// </summary>
    /// <param name="code"></param>
    /// <param name="data"></param>
    private void OnGalaxyIncommingMessage(byte code, byte[] data)
    {
        switch ((CommandType)code)
        {
        case CommandType.goInstantiate:
        {
            MessageInstantiate message = MessageInstantiate.Deserialize <MessageInstantiate>(data);
            OnMessInstantiate?.Invoke(message);
        }
        break;

        case CommandType.goTransform:
        {
            MessageTransform message = MessageTransform.Deserialize <MessageTransform>(data);
            OnMessTransform?.Invoke(message);
        }
        break;

        case CommandType.goDestroy:
        {
            MessageDestroyGO message = MessageDestroyGO.Deserialize <MessageDestroyGO>(data);
            OnMessDestroy?.Invoke(message);
        }
        break;

        case CommandType.worldSync:
        {
            MessageWorldSync message = MessageWorldSync.Deserialize <MessageWorldSync>(data);
            OnWorldSync?.Invoke(message);
        }
        break;

        case CommandType.goMessage:
        {
            MessageGO message = MessageGO.Deserialize <MessageGO>(data);
            OnGoMessage?.Invoke(message);
        }
        break;
        }
    }
示例#5
0
        /// <summary>
        /// Отправка текущего состояния мира
        /// </summary>
        private void SendWorld(ClientConnection clientConnection)
        {
            NetGO[] netGOs = netObjects.Values.ToArray(); // берем все наши сетевые объекты
            if (netGOs.Length == 0)
            {
                return;                     //раз нет сетевых объектов то выходим
            }
            MessageWorldSync message = new MessageWorldSync();

            message.netObjects = new List <MessageInstantiate>();
            foreach (var item in netGOs)
            {
                MessageInstantiate instantiate = new MessageInstantiate();
                instantiate.name     = item.name;
                instantiate.netID    = item.netID;
                instantiate.owner    = item.owner;
                instantiate.position = item.position;
                instantiate.rotation = item.rotation;
                message.netObjects.Add(instantiate);
            }
            clientConnection.SendMessage((byte)CommandType.worldSync, message, GalaxyDeliveryType.reliable);
        }
示例#6
0
        /// <summary>
        /// Сюда попадают проброшенные сообщения
        /// </summary>
        /// <param name="code"></param>
        /// <param name="data"></param>
        /// <param name="clientConnection"></param>
        public override void TossMessage(byte code, byte[] data, ClientConnection clientConnection)
        {
            switch ((CommandType)code)
            {
            case CommandType.goInstantiate:
            {
                MessageInstantiate message = MessageInstantiate.Deserialize <MessageInstantiate>(data);
                InstantiateGO(message, clientConnection);
            }
            break;

            case CommandType.goTransform:
            {
                MessageTransform message = MessageTransform.Deserialize <MessageTransform>(data);
                TransformGO(message, clientConnection);
            }
            break;

            case CommandType.goDestroy:
            {
                MessageDestroyGO message = MessageDestroyGO.Deserialize <MessageDestroyGO>(data);
                DestroyGO(message, clientConnection);
            }
            break;

            case CommandType.worldSync:
            {
                SendWorld(clientConnection);
            }
            break;

            case CommandType.goMessage:
            {
                SendMessageToAllExcept(clientConnection, (byte)CommandType.goMessage, data, GalaxyDeliveryType.reliable);
            }
            break;
            }
        }