private static void StateUpdateTimerOnElapsed(Object source, ElapsedEventArgs e) { _bitBuffer.Clear(); _bitBuffer.AddByte(3); _bitBuffer.AddUShort((ushort)_dataToSend.Count); foreach (PlayerData playerData in _dataToSend) { _bitBuffer.AddUShort(playerData.id); _bitBuffer.AddUInt(playerData.qX); _bitBuffer.AddUInt(playerData.qY); } _bitBuffer.ToArray(_buffer); _webServer.SendAll(_connectedIds, new ArraySegment <byte>(_buffer, 3 + 10 * _dataToSend.Count)); }
void LateUpdate() { _ws.ProcessMessageQueue(this); if (_ws.ConnectionState == ClientState.Connected) { if (Time.time - _timeSinceLastSend > SendInterval) { _timeSinceLastSend = Time.time; QuantizedVector3 qPosition = BoundedRange.Quantize(_modelTransform.position, Constants.WORLD_BOUNDS); QuantizedQuaternion qRotation = SmallestThree.Quantize(_modelTransform.rotation); ushort qBestTime = HalfPrecision.Quantize(GameTimer.BestTime); _bitBuffer.Clear(); _bitBuffer.AddUInt(qPosition.x) .AddUInt(qPosition.y) .AddUInt(qPosition.z) .AddUInt(qRotation.m) .AddUInt(qRotation.a) .AddUInt(qRotation.b) .AddUInt(qRotation.c) .AddUShort(qBestTime) .ToArray(_byteBuffer); _ws.Send(new ArraySegment <byte>(_byteBuffer, 0, 28)); } } }
public static BitBuffer AddFloat(this BitBuffer buffer, float value) { buffer.AddUInt(new UIntFloat { floatValue = value }.uintValue); return(buffer); }
public static BitBuffer AddVector3(this BitBuffer buffer, Vector3 value, BoundedRange[] range) { var compressed = BoundedRange.Compress(value, range); buffer.AddUInt(compressed.x).AddUInt(compressed.y).AddUInt(compressed.z); return(buffer); }
// Update is called once per frame void LateUpdate() { _webServer.ProcessMessageQueue(this); if (Time.time - _timeSinceLastSend > SendInterval) { _timeSinceLastSend = Time.time; ushort validCount = 0; //incremented every loop where player transform isnt null _bitBuffer.Clear(); _bitBuffer.AddUShort(1); // state message _bitBuffer.AddUShort((ushort)_playerTransforms.Count); foreach (var player in _playerTransforms) { if (player.Value != null) { validCount++; _bitBuffer.AddUShort(player.Key); for (int i = 0; i < 8; i++) { _bitBuffer.AddUInt(player.Value[i]); } } } _bitBuffer.ToArray(_bigBuffer); _webServer.SendAll(_connectionIds, new ArraySegment <byte>(_bigBuffer, 0, 6 + 30 * validCount)); } }
private static void StateUpdateTimerOnElapsed(Object source, ElapsedEventArgs e) { _bitBuffer.Clear(); _bitBuffer.AddByte(3); _bitBuffer.AddUShort((ushort)_dataToSend.Count); foreach (PlayerData playerData in _dataToSend) { _bitBuffer.AddUInt(playerData.qX); } }
private void SendUnreliable(uint value) { unsafe { _sentUnreliable++; var id = _detector.AddHeaderForPeerId((ushort)_client.ID, _buffer); _buffer.AddUInt(value); var length = _buffer.Length; var ptr = Marshal.AllocHGlobal(length); var span = new Span <byte>(ptr.ToPointer(), length); _buffer.ToSpan(ref span); var data = new PacketData { Data = ptr, Length = length, SequenceId = id }; _buffer.Clear(); var canSend = _detector.EnqueueData((ushort)_client.ID, data); if (canSend) { var packet = new Packet(); packet.Create(data.Data, data.Length, PacketFlags.None); _sendData.Enqueue(new SendData { Packet = packet, Peer = _client }); } else { _client.DisconnectNow(0); } } }
public override BitBuffer PackVariable(BitBuffer buffer) { buffer.AddUInt(Value); return(buffer); }
public static BitBuffer AddUShort(this BitBuffer buffer, ushort value) { buffer.AddUInt(value); return(buffer); }