private void OnWorldSync(MessageWorldSync message) { foreach (var item in message.netObjects) { OnMessInstantiate(item); } }
/// <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; } }
/// <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); }